JSP —— 内置对象 Request 与 Response 与重定向

时间:2022-06-11 21:07:21

JSP 有9个内置对象:Request、Response、Session、Out、PageContext、Application、Config、Page、Exception。


简单介绍:

Request:即 javax.servlet.http.HttpServletRequest 对象,对应于一个HTTP 请求。作用范围:一次HTTP 请求(跳转的情况根据后面引用的文章应该是:forward跳转时,request作用范围为几个servlet或页面内都有效;sendRedirect跳转时,第一次request的servlet或页面内有效,因为实际上是两次独立的HTTP 请求)。

Response:即 javax.servlet.http.HttpServletResponse 对象,对应于一个HTTP响应。作用范围:一次HTTP 响应。

Session:即 javax.servlet.http.HttpSession 对象,会话信息。作用范围:一次用户会话时间段。

pageContext:与Application对象类似,只是作用范围限制于本网页内。

Application:为ServletContext类的对象,服务器启动后,该网站即对应一个Application对象,具有单例特性。作用范围:服务器启动期间。


Out:即 javax.jsp.JspWrite  对象,是一个输出流,用来向客户端输出数据。该对象用于各种对象的输出。
Exception:异常处理对象。

Page:表示从页面产生的一个Servlet实例,相当于这个JSP 产生Servlet类的this,可以通过Page对象访问实例的属性和函数。
Config:表示一个javax.servlet.ServletConfig对象。该对象用于存取Servlet实例的初始化参数。

注:

JSP 的范围(Scope,用于JavaBean)分别为page(注意不是Page对象)、request、session、application。这4个范围分别由pageContext、Request、Session、Application4个内置对象对应来保存对象(即保存对应的JavaBean),方法名都是setAttribute和getAttribute。更多查看JavaBean。

使用时首字母是小写的!


一、Request

常用方法:

1、Object getAttribute(String name):返回name指定的属性值,属性不存在时返回null。

2、void setAttribute(String name,Object value):在属性列表中添加/删除指定的属性。

3、String getParameter(String name):获取客户端发送给服务器的参数值。

4、String[] getParameterValues(String name):获得请求中指定参数的所有值。

5、String getProtocol():返回请求使用的协议,http1.0或http1.1.

6、String RequestURL():返回发出请求的客户端地址,但是不包括请求的参数字符串。

7、String getRemoteAddr():获取发出请求的客户端的IP 地址。

8、HTTPSession getSession():获取Session。

9、String getServletPath():获取客户端请求页面的路径。

10、getContentLength():获取HTTP请求信息体的长度。

11、getHeads(String s):获取请求头相应信息。s可取的参数有:accept、referer、accept-language、content-type、accept-encoding、user-agent(客户端浏览器内核等信息)、host、content-length、connection、cookie等。所以其它许多方法只是比较常用所以单独拿出来,如getCookies(String name)。


注意事项:

1、获取HTTP 请求头中的表单参数时,应该先判断获取到的值是否为null,因为用户可能还未填写,否则会报空指针错误。如:

String userAge=request.getParameter("age");
//下面一条可能报空指针错误
int age=Interger.parseInt("userAge");

2、获取输入的中文信息时,为避免乱码,先转换编码再显示:

String originalStr=request.getParameter("someText");
//转换编码再显示
byte[] b=originaStr.getBytes("ISO-8859-1");
String newStr=new String(b);


二、Response

所有方法:

Method Summary
 void addCookie(Cookie cookie)
          Adds the specified cookie to the response.
 void addDateHeader(String name,
long date)

          Adds a response header with the given name and date-value.
 void addHeader(String name,String value)
          Adds a response header with the given name and value.
 void addIntHeader(String name,
int value)

          Adds a response header with the given name and integer value.
 boolean containsHeader(String name)
          Returns a boolean indicating whether the named response header has already been set.
 String encodeRedirectUrl(String url)
          Deprecated. As of version 2.1, use encodeRedirectURL(String url) instead
 String encodeRedirectURL(String url)
          Encodes the specified URL for use in the sendRedirect method or, if encoding is not needed, returns the URL unchanged.
 String encodeUrl(String url)
          Deprecated. As of version 2.1, use encodeURL(String url) instead
 String encodeURL(String url)
          Encodes the specified URL by including the session ID in it, or, if encoding is not needed, returns the URL unchanged.
 void sendError(int sc)
          Sends an error response to the client using the specified status code and clearing the buffer.
 void sendError(int sc,String msg)
          Sends an error response to the client using the specified status.
 void sendRedirect(String location)
          Sends a temporary redirect response to the client using the specified redirect location URL.
 void setDateHeader(String name,
long date)

          Sets a response header with the given name and date-value.
 void setHeader(String name,String value)
          Sets a response header with the given name and value.
 void setIntHeader(String name,
int value)

          Sets a response header with the given name and integer value.
 void setStatus(int sc)
          Sets the status code for this response.
 void setStatus(int sc,String sm)
          Deprecated. As of version 2.1, due to ambiguous meaning of the message parameter. To set a status code usesetStatus(int), to send an error with a description usesendError(int, String). Sets the status code and message for this response.

重定向:

实现页面跳转的方式很多,如:设置响应头的refresh属性、html中设置http-equive的meta元数据(感觉和第一条实现原理一样)、通过js设置window.location="newUrl"、sendRedirect方法、使用<jsp:forward  page="url">标签。如果在servlet中跳转,则使用DispatcherServlet 接口的实例(通过request.getRequestDispatcher("xxx.jsp")获得,该接口有forward与include两个方法)。

区别forward标签与sendRedirect方法:
参考:浅谈JSP的Forward及sendRedirect区别

部分原文内容:

使用forward时,由于只是发送一次request请求,request设置的属性(setAttribute)依然能保留在下一个页面。

使用sendRedirect时,由于发送两次request请求,所以在下一个不能获取request属性。但可以通过重写URL的方式将内容传递过去。


这是个好网站:* HTTP header 参数列表