Response内置对象和Cookie机制

Response内置对象

该内置对象主要用来处理用户的请求,如果要处理对用户的响应,需要使用到另外一个内置对象
该内置对象的类型是javax.servlet.http.HttpServletResponse,对象名就是response,这个内置对象是在调用service方法的时候容器会传递过来
我们直接在方法中使用即可

public void addCookie(Cookie cookie)
向客户端添加一个cookie信息到客户端浏览器,还可以为cookie设置生命时间

public void sendRedirect(java.lang.String location)
该方法可以实现客户端跳转,客户端跳转的方式有很多种,特征是:
1.浏览器地址栏信息改变
2.重新向服务器端发送了一个新的请求

public void setStatus(int sc)
可以设置响应的状态码

public java.io.PrintWriter getWriter()
取得一个向客户端输出的打印流对象,可以使用该对象实现信息的输出

public void setContentType(java.lang.String type)
可以设置响应的MIME类型和字符编码

向客户端输出信息:

package com.xie;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@SuppressWarnings("serial")
public class EmpServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//使用response内置对象取得输出流对象
		PrintWriter out = resp.getWriter();
		//向客户端输出信息
		out.print("这是服务端返回的数据");
		out.close();
	}	
}

Response内置对象和Cookie机制
此时访问成功,也取得了输出的信息,但是出现了中文乱码现象,原因是输出的字符串的编码和浏览器的解析编码不一样导致的,此时可以设置为"UTF-8"

设置响应的字符编码

@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//设置响应的编码
		resp.setContentType("text/html;charset=utf-8");
		//使用response内置对象取得输出流对象
		PrintWriter out = resp.getWriter();
		//向客户端输出信息
		out.print("这是服务端返回的数据");
		out.close();
	}	

Response内置对象和Cookie机制
MIME 是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问时,浏览器会自动指定应用程序来打开,常见的MIME有:

超文本标记语言文本:text/html
普通文本:.txt text/plain
RTF文本:.rtf application/rtf
GIF图形:.gif image/gif
JPEG图形:.jpeg,.jpg image/jpeg
GZIP文件:.gz application/x-gzip
TAR文件:.tar application/x-tar

观察服务端默认的cookie信息

一般情况默认第一次访问服务器的时候会默认添加有个cookie信息到浏览器,这个cookie信息就是客户端和服务端互相辨认的一个唯一标识,在客户第一次访问服务器的时候,服务器会创建一个标记,这个标记早容器(服务器端)中保存一份,之后再将这个标识做一个副本保存到浏览器端,第二次客户再次访问的时候会带上cookie信息,之后服务器取得就可以验证了
Response内置对象和Cookie机制
这个cookie是服务器自动创建并且保存到浏览器的,我们也可以创建自己的cookie保存到浏览器

创建自己的cookie

package com.xie;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@SuppressWarnings("serial")
public class EmpServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//创建cookie信息
		Cookie c1 = new Cookie("c1", "1234");
		Cookie c2 = new Cookie("c2", "abcd");
		//把cookie保存到浏览器
		resp.addCookie(c1);
		resp.addCookie(c2);
	}	
}

Response内置对象和Cookie机制
此时cookie以及添加到了浏览器中,我们证明浏览器再次访问服务器端的时候会带上cookie信息
如果添加的cookie的名称相同则后面的cookie覆盖前面的cookie

在服务器端取得cookie信息

package com.xie;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@SuppressWarnings("serial")
public class EmpServlet extends HttpServlet{
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//取得cookie信息
		Cookie [] cs = req.getCookies();
		for (Cookie cookie : cs) {
			System.out.println(cookie.getName()+"="+cookie.getValue());
		}
	}
}

Response内置对象和Cookie机制
cookie可以保存到浏览器端,但是保存的时间是多长呢?默认是浏览器关闭就没了。也可以自己设置

设置cookie存活时间

package com.xie;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@SuppressWarnings("serial")
public class EmpServlet extends HttpServlet{
	public void addCookie(HttpServletRequest req, HttpServletResponse resp) {
		//创建cookie对象
		Cookie c1 = new Cookie("c1", "aaaaaaaaaa");
		//设置存活时间,以秒为单位
		c1.setMaxAge(60*60*24);
		Cookie c2 = new Cookie("c1", "bbbbbbbbbb");
		//添加到浏览器Duang
		resp.addCookie(c1);
		resp.addCookie(c2);
	}
}