From 追风少年lulei

A. request对象

 

     request对象是javax.servlet.http.HttpServletRequest 类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。客户端的请求信息被封装在request对象中,通过它才能了解到用户的需求,然后做出响应。它是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。常用方法如下:

 

String getParameter(String name) 返回name指定参数的参数值

 

String[] getParameterValues(String name) 返回包含参数name的所有值的数组

 

void setAttribute(String, Object) 存储此请中的属性

 

object getAttribute(String, Object) 返回指定属性的属性值

 

String getContentType() 得到请求体的MIME类型

 

String getProtocol() 返回请求用的协议类型及版本号

 

String getServerName() 返回接受请求的服务器主机名

 

代码实例:

reg.jsp

 1 <body>  
 2     <h1>用户注册</h1><br/>  
 3     <hr>  
 4         <form action="03/request.jsp" name="regForm" method="post">  
 5         <table>  
 6             <tr>  
 7                 <td>用户名:</td>  
 8                 <td><input type="text" name="username" /></td>  
 9             </tr>  
10             <tr>  
11                 <td>爱好:</td>  
12                 <td>  
13                     <input type="checkbox" name="favorite" value="read"/>读书  
14                     <input type="checkbox" name="favorite" value="movie"/>电影  
15                     <input type="checkbox" name="favorite" value="internet"/>上网  
16                     <input type="checkbox" name="favorite" value="football"/>足球  
17                 </td>  
18             </tr>  
19             <tr>  
20                 <td colspan="2"><input type="submit" value="登陆" /></td>  
21             </tr>  
22         </table>  
23     </form>  
24   </body>  

request.jsp

 1 <body>  
 2    <h1>request的内置对象</h1><br/>  
 3    <hr>  
 4    <%   
 5    //设置默认的字符  
 6    request.setCharacterEncoding("utf-8");  
 7    %>  
 8             用户名:<%=request.getParameter("username") %><br>  
 9             爱好:<%  
10             if(request.getParameterValues("favorite")!=null){  
11              String[] favorite=request.getParameterValues("favorite");  
12                 for(String f:favorite){  
13                  out.println(f);  
14                  }  
15             }  
16              
17             %>  
18  </body>  

结果显示:

Java Web之request对象和response对象

Java Web之request对象和response对象

<%request.setCharacterEncoding("utf-8"); %>//解决中文乱码,但不能解决URL传递中文出现的乱码

注意:

            但是在测试超链接<a href="request.jsp?username=李四">测试url传参数</a>的时候,我们将参数的value直接在URL上进行赋值。如果赋值的结果是中文,在这种情况下如果使用request的setCharacterEncoding方法来进行修改字符集是无法解决中文乱码的问题的。

            正确的解决方法为:在Tomcat服务器中,在server.xml文件修改Connector,在里面添加:URLEncoding="utf-8"即可。

B、response对象

          response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。同时response对象具有页面(Page)作用域,即访问一个页面时,该页面的response对象只对本次访问有效,其他页面的response对象对当前页面无效。

          response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。

常用方法:

String setCharacterEncoding()//设置响应字符编码格式

String getCharacterEncoding()//获取响应字符编码格式

void setContentType(String type)//设置响应MIME类型

sendRedirect(Java.lang.String location)//请求重定向

PrintWriter getWriter()//获取打印输出对象

注意:PrintWriter对象的输出先于内置out对象。
解决方法:
out.println();
out.flush();//清空缓冲区并将缓冲区内容输出到浏览器
PrintWriter outer=response.getWriter();
outer.println();

代码实例:

reg.jsp

 1 <body>  
 2     <h1>用户注册</h1><br/>  
 3     <hr>  
 4     <form action="03/response.jsp" name="regForm" method="post">  
 5         <table>  
 6             <tr>  
 7                 <td>用户名:</td>  
 8                 <td><input type="text" name="username" /></td>  
 9             </tr>  
10             <tr>  
11                 <td>爱好:</td>  
12                 <td>  
13                     <input type="checkbox" name="favorite" value="read"/>读书  
14                     <input type="checkbox" name="favorite" value="movie"/>电影  
15                     <input type="checkbox" name="favorite" value="internet"/>上网  
16                     <input type="checkbox" name="favorite" value="football"/>足球  
17                 </td>  
18             </tr>  
19             <tr>  
20                 <td colspan="2"><input type="submit" value="登陆" /></td>  
21             </tr>  
22         </table>  
23     </form>  
24   </body>  

response.jsp

 1 <body>  
 2    <%  
 3      out.println("<h1>内置对象response</h1>");  
 4      out.println("<hr>");  
 5      //out.flush();//添加缓冲区域刷新  
 6      PrintWriter pw=response.getWriter();  
 7      pw.println("这里是从内置对象response中获取的输出流。");  
 8      
 9      //进行服务器响应的重定向操作  
10      response.sendRedirect("request.jsp");  
11      
12      //进行客户端的转发请求操作  
13      //request.getRequestDispatcher("request.jsp").forward(request, response);  
14    %>  
15   </body>  

request.jsp

 1 <body>  
 2     <h1>request的内置对象</h1><br/>  
 3     <hr>  
 4     <%   
 5     //设置默认的字符  
 6     request.setCharacterEncoding("utf-8");  
 7     %>  
 8              用户名:<%=request.getParameter("username") %><br>  
 9              爱好:<%  
10              if(request.getParameterValues("favorite")!=null){  
11                  String[] favorite=request.getParameterValues("favorite");  
12                  for(String f:favorite){  
13                      out.println(f);  
14                      }  
15              }  
16               
17              %>  
18   </body>  

注意:在response.jsp的中分别使用的是服务器的请求重定向和客户端的请求转发操作。

首先看看请求重定向的结果:

Java Web之request对象和response对象

Java Web之request对象和response对象

接下来看看请求转发的结果:

Java Web之request对象和response对象

Java Web之request对象和response对象

这里总结一下重定向和转发请求的作用:

请求重定向:客户端行为,相当于两次请求,前一次请求的内容不会被保存,url路径会改变(查看上面的图片中的URL)。
response.sendRedirect("request.jsp")
请求转发:服务器行为,一次请求,转发后请求对象会保存,url路径不变(查看上面的图片中的URL)!
requst.getRequestDispatcher("st.jsp").forward(request,response)

 


From 郗晓勇

JSP内置对象即无需声明就可以直接使用的对象实例,在实际的开发过程中,比较常用的JSP对象有request,response,session,out和application等,笔者在本文章中将简单介绍一下以上几种对象的使用。

request对象

request对象代表这是从用户发送过来的请求,从这个对象中可以取出客户端用户提交的数据或者是参数,这个对象只有接受用户请求的页面才可以访问。

1.request对象使用场合

如果要与用户互动,必须要知道用户的需求,然后根据这个需求生成用户期望看到的结果。这样才能实现与用户的互动。在Web应用中,用户的需求就抽象成一个request对象,这个对象中间包括了用户的需求。request正是用来收集类似这些用户的输入数据和参数的。

同时,request对象中还包括一些服务器的信息,例如端口、真实路径、访问协议等信息,通过request对象可以取得服务器的这些参数。

不多说直接上代码

 1 <%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>  
 2 <html>  
 3   <head>     
 4     <title>request主要方法调用示例</title>  
 5   </head>   
 6   <body>  
 7   <font size="2">  
 8   request主要方法调用示例:<br>  
 9   <%  
10      request.setAttribute("attr","Hello!");  
11      out.println("attr属性的值为:"+request.getAttribute("attr")+"<br>");  
12      out.println("上下文路径为:"+request.getContextPath()+"<br>");  
13      out.println("Cookies:"+request.getCookies()+"<br>");  
14      out.println("Host:"+request.getHeader("Host")+"<br>");  
15      out.println("ServerName:"+request.getServerName()+"<br>");  
16      out.println("ServerPort:"+request.getServerPort()+"<br>");  
17      out.println("RemoteAddr:"+request.getRemoteAddr()+"<br>");  
18      request.removeAttribute("attr");  
19      out.println("属性移除操作以后attr属性的值为:"+request.getAttribute("attr")+"<br>");  
20    %>  
21    </font>  
22   </body>  
23 </html>  

第10行代码设置了一个名为“attr”的属性值

第11~17行这段代码向客户端返回来request域的属性值

第18行代码删除了名为“attr”的属性

2.request对象使用示例

1、使用request对象取得表单数据

 1 <%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>  
 2 <html>  
 3   <head>     
 4     <title>request主要方法调用示例</title>  
 5   </head>   
 6   <body>  
 7   <font size="2">  
 8   request主要方法调用示例:<br>  
 9   <%  
10      request.setAttribute("attr","Hello!");  
11      out.println("attr属性的值为:"+request.getAttribute("attr")+"<br>");  
12      out.println("上下文路径为:"+request.getContextPath()+"<br>");  
13      out.println("Cookies:"+request.getCookies()+"<br>");  
14      out.println("Host:"+request.getHeader("Host")+"<br>");  
15      out.println("ServerName:"+request.getServerName()+"<br>");  
16      out.println("ServerPort:"+request.getServerPort()+"<br>");  
17      out.println("RemoteAddr:"+request.getRemoteAddr()+"<br>");  
18      request.removeAttribute("attr");  
19      out.println("属性移除操作以后attr属性的值为:"+request.getAttribute("attr")+"<br>");  
20    %>  
21    </font>  
22   </body>  
23 </html>  

解释:在上面这个程序当中,也可以把表单提交给其他页面,那样只需把接受参数的方法放在对应的页面即可.在这里只是为了方便展示问题才提交给页面自身。

2、使用request对象取得页面传递参数

 1 <%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>  
 2 <html>  
 3   <head>   
 4     <title>request对象取得页面传递参数示例</title>  
 5   </head>  
 6   <%  
 7        String param = request.getParameter("param");  
 8          
 9    %>  
10   <body>  
11       <font size="2">  
12       <a href="URL.jsp?param=Hello">请点击这个链接</a><br>  
13       你提交的参数为:<%=param%>  
14       </font>  
15   </body>  
16 </html>  

解释:在这个例子中,通过一个超链接完成了一次单参数的请求,并且在服务器端获取了这个参数。其中第8行代码在服务端获取客户提交的参数。第12行代码定义另一个带参数的超连接。

response对象

response对象是服务器端向客户端返回的数据,从这个对象中可以取出部分与服务器互动的数据和信息,只有接受这个对象的页面才可以访问这个对象。

1.response对象使用场合

既然用户可以对服务器发出请求,服务器就需要对用户的请求作出反应。这里服务器就可以使用response对象向用户发送数据,response是对应request的一个对象。

如果需要获取服务器返回的处理信息,就可以对response进行操作,同时当服务器需要对客户端进行某些操作的时候也需要response对象,例如服务器要在客户端生成Cookies,那么这时候response对象就是一个很好的选择。

2.response使用举例,采用response实现页面重定向。

 1 <%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>  
 2 <html>  
 3   <head>   
 4     <title>response对象页面重定向示例</title>  
 5   </head>  
 6   <body>  
 7       <%  
 8           response.sendRedirect("http://www.sohu.com");  
 9        %>  
10   </body>  
11 </html>  

上面这个页面运行的时候直接重定向到搜狐的首页。

 

session对象

session对象维护者客户端用户和服务器端状态,从这个对象中可以去除用户和服务器交互过程中的数据和信息。这个对象在用户关闭浏览器离开Web应用之前一直有效。

1.session对象使用场合

session对象中保存的内容是用户与服务器整个交互过程中的信息,如果是想在整个交互的过程中都可以访问到信息,就可以选择存放在session对象中。

例如在用户登录的过程中,可以在session中记录用户的登录状态,这样用户就不必在每个页面都重新登录,只要用户没有离开当前的Web应用系统,就可以一直保存登录的状态。

2.session对象使用示例

模拟一个简单的用户登录动作,在这个示例程序中不对提交的登录信息做具体的验证,只要用户名和密码都不为空就可以登录,这样处理知识为了方便展示session的使用方法,在具体的开发中必须要对登录信息进行验证。

 1 <%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>  
 2 <html>  
 3   <head>   
 4     <title>用户登录界面</title>  
 5   </head>  
 6   <body>  
 7       <font size="2">  
 8           <form action="LoginCheck.jsp" method="post">  
 9                用户名:<input type="text" name="userName" size="10"/>  
10                密  码:<input type="password" name="password" size="10"/>  
11              <input type="submit" value="提交">          
12           </form>  
13       </font>  
14   </body>  
15 </html>  

上面这个JSP页面想LoginCheck提交了一个登录表单,表单中有用户名和密码。下面是LoginCheck的内容。

 1 <%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>  
 2 <html>  
 3   <head>   
 4     <title>用户登录验证页面</title>  
 5   </head>  
 6   <%  
 7       String userName = request.getParameter("userName");  
 8       String password = request.getParameter("password");  
 9         
10       if(userName.length()>0&&password.length()>0)  
11       {  
12           session.setAttribute("status","Login");  
13           response.sendRedirect("Main.jsp");  
14       }else  
15           response.sendRedirect("Login.jsp");  
16     
17    %>  
18   <body>  
19   </body>  
20 </html>  

在上面这个页面中,从变淡中取出用户名和密码,如果用户名和密码都不为空就允许登录,否则就重定向到登录页面,让用户重新登录。如果用户登录成功,就在session中设置一个status属性,然后把用户重定向到系统的主页面,在主页面中可以访问session中的值。下面是Main页面的具体代码

 1 <%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>  
 2 <html>  
 3   <head>   
 4     <title>系统主界面</title>  
 5   </head>  
 6   <body>  
 7       <font size="2">  
 8           <%  
 9               Object status = session.getAttribute("status");  
10               if(session.getAttribute("status")!=null)  
11                   out.print("用户已经登录!");  
12               else  
13                   response.sendRedirect("Login.jsp");  
14            %>  
15       </font>  
16   </body>  
17 </html>  

在上面这个页面中,对用户的状态进行判断,如果从session中可以取出对应的属性值,说明用户已经登录,如果没有渠道指定属性值,说明用户没有登录,这时就重定向到登录页面,让用户重新登录。其中session的值在用户离开系统之前的任何页面都可以访问。

 
 

 

相关文章: