Java 杂谈善倾的知识体系构建之路

JSP 中的 response 内置对象

2018-09-02  本文已影响1人  善倾

response 对象是由 Tomcat 创建的,代表服务器对客户端的响应。它的继承体系和 request 对象是完全对应的,这里就不再总结了。当一次 HTTP 请求结束的时候,response 对象就会返回响应报文给客户端浏览器,浏览器收到响应报文后,就会按照响应报文的要求执行相关命令。response 对象仅仅是设定了返回报文的控制信息而已,只有响应报文送到浏览器,由浏览器解析执行后才会真正有用。理解这一点至关重要!

通过 response 对象设定请求头信息

HttpServletResponse 对象提供了void setHeader(String name,String value)方法来设置响应头信息。有以下两种典型使用方式:

这两个方法都只是设定了响应报文的控制信息,并不会立即起作用,因为这需要浏览器来执行,所以只有请求结束后,浏览器才会接受响应报文,并作出相关响应。

利用 response 对象实现请求重定向

redirect 表示重新指向的意思,也就是告诉客户端要重新发送一次请求,这属于客户端跳转,会产生新的 reqeust 和 response 对象。response 对象实现请求重定向是利用了 HttpServletResponse 接口提供的void sendRedirect(String location)方法实现的。具体使用方式如下:

response.sendRedirect("responseDemo04.jsp?id=ZTE")

此方法设定响应报文的控制信息,一旦请求结束后,response 才会返回响应报文给浏览器,浏览器再按照对应的要求执行相关指令。

请求重定向本质上就是上面setHeader("refesh","0")方法的变形,真正跳转的功能是浏览器完成的,response 仅仅值设定了返回报文的控制信息而已。

response 设定 Cookie 信息

「英文时间」:Cookie n. 饼干;小甜点

Cookie 是由服务端设置的,保存在浏览器中的数据。一般用来存放用户的账户名和密码,以及用户的个人喜好等信息,方便服务端给用户提供更多个性化友好的服务。

Cookie 的设定和读取方式一般如下:

//创建 Cookie 对象
Cookie c1 = new Cookie("username","keqi");
Cookie c2 = new Cookie("password","admin");
//设定 Cookie 对象在浏览器中的生存时间
c1.setMaxAge(60);//设定生存时间为 60 秒
c2.setMaxAge(60);
//添加进 response 对象中去
response.addCookie(c1);
response.addCokie(c2);
//通过 request 对象进行 Cookie 信息的获取
Cookie[] cookies = request.getCookies();
for(Cookie c : cookies){
    out.print(c.getName() + ":" + c.getValue());
    out.print("<br>");
}

查看 javax.servlet.http.Cookie 类的源码可以发现,这个类的内部维护了两个私有属性final String nameString value。这说明 Cookie 对象的构造函数Cookie(String name,String value)内部简单的给这两个属性进行赋值操作而已。 Cookie 对象只是采用了这两个属性作为存储数据源,并不是表面上给人感觉它好像是一个 Map 结构。所以,想要存放多个信息,就必须创建多个 Cookie 对象。

如果创建 Cookie 对象时,没有显示指明 Cookie 对象的生存周期的话,它就只放在浏览器的从操作系统那里拿到的内存中,浏览器一旦关闭,内存空间被释放,Cookie 对象就会消失。所以,为了要让 Cookie 对象能够真正在硬盘中进行保存的话,一定要调用 Cookie 对象的setMaxAge(int expiry)设定 Cookie 对象的生存时间。

Cookie 信息可以分为用户 Cookie 和 系统 Cookie ,前者是程序员编写的在服务端运行的程序,所人为创建的,后者则是由 Tomcat 自动创建的。系统 Cookie 信息的 name 是JSESSIONID,value 值则是一个 16 个字节的标识客户端此次会话的唯一表示的 Session ID 字符串,点此处查看 session 对象笔记

浏览器在发送请求时,不仅仅会返回表单参数,同时还会把该服务器对应的 Cookie 信息一起发送过去,然后 Tomcat 会对这些信息进行解析,全部放到这次请求的 reqeust 对象中去。所以 reqeust 对象可以通过getCookies()方法得到一个 Cookie 数组对象。如果客户端没有任何 Cookie 信息发送过来,那么这里返回的 Cookie 数组对象是 null ,直接使用它就会产生空指针异常,这里要千万小心了。

上一篇下一篇

猜你喜欢

热点阅读