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>是运行时包含.前者就相当于宏,编译时替代,后者相当于函数,运行时返回. 

        

原文地址:https://www.cnblogs.com/hjiongjiong/p/4254811.html