zoukankan      html  css  js  c++  java
  • JSP-表单与request对象

     1  在html表单中,表单用于用户填写数据并通过提交实现数据的请求,提交有2种方式:1 POST 2 GET。区别如下

    比较 POST GET
    是否在url中显示参数
    数据传递是否有长度限制
    数据安全性
    url是否可以传播

         

    2  request对象:(请求对象)跟out对象一样,是jsp的一个内置对象,可以在jsp中直接调用。该对象的主要方法如下

     getParameter(String name)                            获得请求中名为name的参数的值,如果请求中没有这个参数,返回null

    getParameterValues(String name)                   返回请求中名为name的参数值,这个值往往是checkbox控件提交的,因此返回的是一个String数组

    getMethod()                                                 返回这个请求使用的HTTP方法(例如:GET、POST、PUT)

         

         2 response对象(响应对象)

    3.内置对象:jsp已经准备好的,可以直接使用的对象。

    4. 中文乱码问题

         4-1 POST方式提交时的解决方案:

                 设置请求的编码方式:  request.setCharacterEncoding("UTF-8");

             设置响应的编码方式: response.setCharacterEncoding("UTF-8");也可以在page指令中contentType中的charset设置成"UTF-8"。

       4-2 GET方式提交时的解决方案:

            1在读取数据时对数据进行修改:new string(s.getbytes(“iso-8859-1”,“utf-8”))  ;

            在配置文件中设置:comcatconfserver.xml文件

               〈connector ......URIEcoding="utf-8">

     

    5.页面间的数据传递

        5-1 使用属性存取数据:setattribute()方法和getattribute()方法

             setattribute()方法:在请求中保存属性值。

                    语法:setattribute(string name,Objcet o);

                             该方法没有返回值,参数name表示属性名称,参数0为属性的值,为Object类型。

                            例如:request.setattribute("mess","注册失败");

                   getattribute()方法:在请求中获取属性。

                      语法:getattribute(string name); 

                            该方法返回object类型的值,获取时应先做非null判断,并且要做类型转换。

                             例如:string mess=(string)request.getattribute(“mes”);

                                      if(mess!=null){}else{};

    6.转发和重定向实现的页面跳转

               转发又被称为服务器端跳转,重定向又被称为客户端跳转

                       

               

                   

       转发和重定向的区别

      

    Session对象(会话对象,可以在多次请求中保存数据)

           保存数据     session.setattribute("属性名",obj属性值);

          读取数据     session.getattribute("属性名");  返回值为object类型,要做类型强转和非空判断

          数据是保存在服务器端的。服务器端保存了很多session每个都有一个唯一的id,随着服务器响应传给浏览器,浏览器向服务器请求时,会和服务器的sessionid匹配。

                       可以用session.getsessionid()查看

          会话的清除和过期

                       程序主动清除session数据

                                    session.invalidate();使会话无效

                                    session.removeattribute("属性名");清除会话的某个属性

                      服务器主动清除长时间没请求的session

                                   设置会话过期时间

                                           session.setMaxInactiveInterval(int 秒数);

                                  在WEB.XML中设置所有session过期时间

                                           在web.xml中加入<session-config><session=timeout>30</session-timeout></session-config>  --单位为分钟数

             

                          

    cookie对象    以文件形式保存在客户端。

               需创建对象   Cookie cookie =New Cookie("名称",值);

                添加数据    response.addCookie(Cookie cookie)

               获取数据    request.getCookie()    返回Cookie[] for循环遍历,cookie.getname(),cookie.getvalue()

                设置有效期  setMaxAge(int expiry)  单位为妙     

              可以在浏览器隐私中禁用COOKIE

    application对象:可在整个web项目中共享数据

       语法:

              setattribute()方法:在请求中保存全局性属性值。

                    语法:setattribute(string name,Objcet o);

                             该方法没有返回值,参数name表示属性名称,参数0为属性的值,为Object类型。

                            例如:request.setattribute("mess","注册失败");

      

             getattribute()方法:在请求中获取属性。

                      语法:getattribute(string name); 

                            该方法返回object类型的值,获取时应先做非null判断,并且要做类型转换。

                             例如:string mess=(string)request.getattribute(“mes”);

                                      if(mess!=null){}else{};

    page,request,session,application的区别        

     application:全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。
    session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。
    request:请求作用域,就是客户端的一次请求。
    page:一个JSP页面。
    以上作用范围使越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward以及filter)。举个简单的例子:
    jsp1.jsp
    <jsp:useBean id="beanID" class="xxx .xxx.BeanClass" scope="request" />
    <jsp:include page="jsp2.jsp" />            
    jsp2.jsp
    <jsp:getProperty name="beanID" property="sample" />
    运行jsp1.jsp可以正常显示数据,因为作用范围是request,相当于调用了request.setAttribute()方法,
    jsp2页通过request.getAttribute来获得这个bean.如果把request改为page,就会抛出NullPointerExceptioin.
    一个请求可以跨好几个JSP(include和forword)和Servlet(如filter).不过这里有一个需要注意的就是区别
    <jsp:include> 和<%@ include %>.如果上面的<jsp:include page="jsp2.jsp" />改为<%@ include file="jsp2.jsp" %>,即使scope为page也是正确的,<%@ include %>是编译时包含,<jsp:include>是运行时包含.前者就相当于宏,编译时替代,后者相当于函数,运行时返回. 

            

  • 相关阅读:
    远程服务器同步配置
    什么是微服务架构,.netCore微服务选型
    Servlet与JSP版本历史以及Tomcat支持的版本
    JDK里面的JRE是什么
    JDK与Java SE/EE/ME的区别
    javaBean和Servlet有什么区别
    JSP的JSTL标签使用
    Java语法教程
    eclipse使用教程
    JSP生命周期
  • 原文地址:https://www.cnblogs.com/hjiongjiong/p/4254811.html
Copyright © 2011-2022 走看看