jsp内置对象response和request

1、request对象

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

 1. setAttribute()在Request域中存储数据
 2. setCharacterEncoding()设置请求参数的编码方式,只对post请求有效
 3. getMethod()获取请求类型
 4. getParameter()获取指定请求参数值
 5. getParameterNames()获取所有请求参数,返回一个Enumeration枚举类
 6. getAttribute()获取域中存储的数据
 7. getAttributeNames()获取域中所有数据,返回一个Enumeration枚举类
 8. getContextPath()返回当前WEB项目相对路径
 9. getCookies()获取所有Cookie,返回一个Cookie数组
 10. getRequestDispatcher()获取转发器,参数路径以/打头,代表WebRoot(当前WEB项目根目录)
 11. getSession()获取Session对象

一、request.getParameter() 和request.getAttribute() 区别

  (1)request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据,request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。

  (2)request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()方法返回String类型的数据。

   request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部.还有一点就是,HttpServletRequest类有setAttribute()方法,而没有setParameter()方法。拿一个例子来说一下吧,假如两个WEB页面间为链接关系时,就是说要从1.JSP链接到2.JSP时,被链接的是2.JSP可以通过getParameter()方法来获得请求参数.

 

假如1.JSP里有

<form name="form1" method="post" action="2.jsp"> 
请输入用户姓名:<input type="text" name="username"> 
<input type="submit" name="Submit" value="提交"> 
form> 

在2.JSP中通过request.getParameter("username")方法来获得请求参数username:

< % String username=request.getParameter("username"); %>但是如果两个WEB间为转发关系时,转发目的WEB可以用getAttribute()方法来和转发源WEB共享request范围内的数据,也还是说一个例子吧。有1.JSP和2.JSP

1.JSP希望向2.JSP传递当前的用户名字,如何传递这一数据呢?

先在1.JSP中调用如下setAttribute()方法:

<%  
String username=request.getParameter("username");  
request.setAttribute("username",username);  
%> 
<jsp:forward page="2.jsp" /> 
在2.jsp中通过getAttribute()方法获得用户名字:  
<% String username=(String)request.getAttribute("username"); %> 

二、request.getAttribute()与request.setAttribute()

      request.getAttribute("nameOfObj")可得到JSP页面一表单中控件的Value。其实表单控件中的Object的 name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出对应它的value。

      而不同页面间传值使用request.setAttribute(position, nameOfObj)时,只会从a.JSP到b.JSP一次传递,之后这个request就会失去它的作用范围,再传就要再设一个 request.setAttribute()。而使用session.setAttribute()会在一个过程中始终保有这个值。

P.S.:JavaScript与JSP中不能相互传值,因为JavaScript运行在客户端,而JSP运行在服务器端。若想使它们之间可以相互传递参数,可以在JSP中设置一个hidden控件,用它的value结合上面所说的用法来传递所需的数值。

2、response对象

     2.1、  基本概念:

     包含了响应客户请求的有关信息。它是HttpServletResponse类的实例。

     response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其它页面的response对象对当前页面无效。

方法说明:

 1. setContentType()告知浏览器数据类型
 2. setCharacterEncoding设置Response的编码方式
 3. setHeader()设置消息头
 4. setStatus()设置状态吗
 5. addCookie()添加Cookie
 6. sendRedirect()重定向
 7. getOutputStream()获取通向浏览器的字节流(同一次请求处理中,字节流和字符流不能同时存在)
 8. getWriter()获取通向浏览器的字符流(同一次请求处理中,字节流和字符流不能同时存在)

sendRedirect与转发的异同:

转发是在服务器发挥作用,forward方法将提交信息在页面间传递,request不会丢失,地址栏不会变

重定向是客服端发挥作用,通过请求新的地址实现页面的转向,request会丢失,地址栏会变

编码设置的比较:

request.setCharacterEncoding():是设置从request中取得的值或从数据库中取出的值

response.setContentType("text/html;charset=gb2312") 指定响应页面的编码

前者是设置动态文字(参数,数据库),后者设置页面静态文字 

     2.2、 response常见用法:

1、重定向网页

        重定向操作支持将地址重定向到不同的主机上,这一点与转发不同。在客户机浏览器上将会得到跳转的地址,并重新发送请求链接。进行重定向后,request中的属性全部失效,并开始一个新的request对象。

<%@ page language="java" import="java.util.*"
	contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
	<%response.sendRedirect("deal.jsp"); %>

2、处理HTTP文件头

(1)、禁用缓存

默认情况浏览器会对网页进行缓存,可以提高网页显示速度,但是对于一些安全性要求比较高的网站,通常需要禁用缓存

<% response.setHeader("Cache-Control", "no-store");

response.setDateHeader("Expires", 0);%>

(2)、自动刷新

<!-- 每隔10秒自动刷新一次 -->
	<% response.setHeader("refresh", "10");%>

(3)定时跳转到网页

     5秒后自动跳转到指定网页:

<!-- 五秒后跳到制定网页 -->
<% response.setHeader("refresh", "5;URL=deal.jsp");%>

三、设置输出缓冲

满足下面3种情况之一,就会把缓冲区的内容写到客户端。

(1)JSP页面的输出信息已经全部写入到了缓冲区

(2)缓冲区已满

(3)调用了response的flushBuffer或者out的flush方法

这篇文章摘抄多篇博客。

http://developer.51cto.com/art/200906/132743.htm

https://blog.csdn.net/lulei1217/article/details/50755364

发布了14 篇原创文章 · 获赞 1 · 访问量 5531

猜你喜欢

转载自blog.csdn.net/Vpn_zc/article/details/81266908