JSP学习笔记三之response对象和request对象

接着上一篇,我们接着讲JSP中的内置隐式对象。这篇博客介绍的是request和response对象。

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

<body>
    <h1>用户注册</h1><br/>
    <hr>
        <form action="03/request.jsp" name="regForm" method="post">
    	<table>
    		<tr>
    		    <td>用户名:</td>
    		    <td><input type="text" name="username" /></td>
    		</tr>
    		<tr>
    			<td>爱好:</td>
    			<td>
    				<input type="checkbox" name="favorite" value="read"/>读书
    				<input type="checkbox" name="favorite" value="movie"/>电影
    				<input type="checkbox" name="favorite" value="internet"/>上网
    				<input type="checkbox" name="favorite" value="football"/>足球
    			</td>
    		</tr>
    		<tr>
    			<td colspan="2"><input type="submit" value="登陆" /></td>
    		</tr>
    	</table>
    </form>
  </body>

request.jsp

 <body>
    <h1>request的内置对象</h1><br/>
    <hr>
    <% 
    //设置默认的字符
    request.setCharacterEncoding("utf-8");
    %>
             用户名:<%=request.getParameter("username") %><br>
             爱好:<%
             if(request.getParameterValues("favorite")!=null){
            	 String[] favorite=request.getParameterValues("favorite");
                 for(String f:favorite){
                	 out.println(f);
                	 }
             }
            
             %>
  </body>

结果显示:

JSP学习笔记三之response对象和request对象_第1张图片

JSP学习笔记三之response对象和request对象_第2张图片

             <%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

<body>
    <h1>用户注册</h1><br/>
    <hr>
    <form action="03/response.jsp" name="regForm" method="post">
    	<table>
    		<tr>
    		    <td>用户名:</td>
    		    <td><input type="text" name="username" /></td>
    		</tr>
    		<tr>
    			<td>爱好:</td>
    			<td>
    				<input type="checkbox" name="favorite" value="read"/>读书
    				<input type="checkbox" name="favorite" value="movie"/>电影
    				<input type="checkbox" name="favorite" value="internet"/>上网
    				<input type="checkbox" name="favorite" value="football"/>足球
    			</td>
    		</tr>
    		<tr>
    			<td colspan="2"><input type="submit" value="登陆" /></td>
    		</tr>
    	</table>
    </form>
  </body>

response.jsp

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

request.jsp

<body>
    <h1>request的内置对象</h1><br/>
    <hr>
    <% 
    //设置默认的字符
    request.setCharacterEncoding("utf-8");
    %>
             用户名:<%=request.getParameter("username") %><br>
             爱好:<%
             if(request.getParameterValues("favorite")!=null){
            	 String[] favorite=request.getParameterValues("favorite");
                 for(String f:favorite){
                	 out.println(f);
                	 }
             }
            
             %>
  </body>

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

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

JSP学习笔记三之response对象和request对象_第3张图片

JSP学习笔记三之response对象和request对象_第4张图片


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

JSP学习笔记三之response对象和request对象_第5张图片

JSP学习笔记三之response对象和request对象_第6张图片


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

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




你可能感兴趣的:(java,jsp)