Request和Response使用辨析

Request

//1.获取请求参数
String value = getParameter(String name);//一个参数对应单个值
String[] values = getParameterValues(String name);//一个参数对应多个值
//2.获取头信息
String agent = request.getHeader(“User-Agent”);//可以判断浏览器类型
//3.获取客户端相关信息
String contextPath = request.getContextPath();//获取发布的工程名=projecta
//获取统一资源标识符=/projecta/index.html
String uri = request.getRequestURI();
//获取统一资源定位符=http://localhost:8080/projecta/index.html
String url = request.getRequestURL();

//4.获取其余两个域对象
HttpSession session = request.getSession();
ServletContext servletContext = request.getServletContext();
//5.本身作为域对象使用
request.setAttribute(“key”,“value”);
Object object = request.getAttribute(“key”);
request.removeAttribute(“key”);

Response

//1.设置响应头
response.setHeader(String name,String value);//一个key对应一个value
response.addHeader(Srting name,String value);//一个key对应多个value
//2.设置响应体(向页面展示的数据,或者ajax请求返回的数据)
response.getWriter().print(“hello”);
response.getOutputStream().write(“hello”.getBytes());
//上述两个输出流互斥,不能同时使用,response获取的输出流无需关闭

乱码问题

1.请求参数乱码

//1.1post请求乱码
//在接受参数之前设置编码,这里编码格式是页面的编码格式
request.setCharacterEncoding(“UTF-8”);
//1.2get请求乱码
//超链接提交方式默认get请求方式采用ISO-8859-1编码,所以需要重新编码
String value = new String(request.getParamter(“name”).getBytes(“ISO-8859-1”),“UTF-8”)
//1.2也可以在tomcat的server.xml中设置

<Connector port="8000" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="utf-8"/>

2.响应数据乱码

//2.1字节流
//设置浏览器默认打开编码
response.setHeader(“Content-Type”, “text/html;charset=UTF-8”);
//设置服务器向浏览器传输数据的编码,getBytes是以操作系统编码方式gbk进行编码
response.getOutputStream().write(“中文/英文”.getBytes(“UTF-8”));
//2.2字符流
//设置浏览器默认打开的编码
response.setHeader(“Content-Type”, “text/html;charset=UTF-8”);
//设置response的缓冲区的编码(默认是ISO-8859-1)
response.setCharacterEncoding(“UTF-8”);

//总结(无论字节流还是字符流都可以解决乱码问题)
response.setContentType(“text/html;charset=UTF-8”)

转发与重定向

// 转发与重定向的区别
1.转发一次请求一次响应,地址栏地址不变;重定向两次请求两次响应,地址栏地址发生变化
2.转发只能在服务器内部进行转发,重定向可以跳转到任意网站
3. 重定向路径需要加工程名,转发的路径不需要加工程名
//1.转发
request.getRequestDispatcher("/index.html").forward(request, response);
//2.重定向
response.sendRedirect("/web01/index.html");
//和下面两行代码一样的效果
response.setStatus(302); //设置行
response.setHeader(“Location”, “/web01/index.html”); //设置头

猜你喜欢

转载自blog.csdn.net/tt_fan/article/details/82828521