HttpServletRequset&Response
1 HttpServletRequest类
1.1 HttpServletRequest类有什么作用
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGET和doPOST方法)中给我们使用。我们可以通过HttpServletRequest对象,获取到所有请求的信息
1.2 HttpServletRequest类常用方法
1. getRequestURI()·····································获取请求的资源路径
2. getRequestURL()·····································获取请求的统一资源定位符(绝对路径)
3. getRemoteHost()·····································获取客户端的IP地址
4. getHeader()············································获取请求头
5. getParameter()········································获取请求的参数
6. getParameterValues()································获取请求的参数(多个值时使用)
7. getMethod()············································获取请求的方式
8. setAttribute(key,value)·······························设置域对象
9. getAttribute(key)······································获取域对象
10. getRequestDispatcher()·····························获取请求转发对象
1.3 请求的中文乱码问题
如果不对请求进行处理,获取的表单数据中的中文在控制台上输出,就会乱码
-
方法1
//先获取请求参数,将参数以iso8859-1进行编码,再以utf-8进行解码 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取请求参数 String username = req.getParameter("username"); //1、先用iso8859-1进行编码 //2、再用utf-8进行解码 String name = new String(username.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); }
-
方法2
//直接设置请求体的字符集为utf-8 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); }
1.4 请求的转发
-
什么是请求转发
服务器收到请求后,从一个资源跳到另一个资源的操作
-
请求转发的特点
1. 浏览器地址栏没有变化 2. 它们是一次请求 3. 共享Request域中的数据 4. 可以转发到WEB-INF目录下 5. 不可以访问工程以外的资源
-
编码
req.getRequestDispatcher("/test5").forward(req,resp);
1.5 请求的重定向
-
什么是请求的重定向
客户端给服务器发送请求,服务器给了客户端一个新地址,然后客户端去访问新地址
-
请求重定向的特点
1. 浏览器地址栏变化 2. 是两次请求 3. 不能共享Request域中数据 4. 不能访问WEB-INF下的资源 5. 可以访问工程外的资源
-
编码
-
方法1
//设置响应状态码,表示重定向 resp.setStatus(302); //设置响应头,说明新的地址在哪里 resp.setHeader("Location","http://localhost:8080");
-
方法2
resp.sendRedirect("http://localhost:8080");
-
2 HttpServletResponse类
2.1 HttpServletResponse有什么作用
每次请求进入,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用,表示所有响应的信息,我们需要设置返回客户端的信息,可以通过这个类的对象来设置
2.2 两个输出流的说明
字节流 | getOutputStream | 常用于下载(传递二进制数据) |
---|---|---|
字符流 | getWriter | 常用于回传字符串 |
注意: 两个流不能同时使用
2.3 往客户端回传数据
-
显式的往客户端回传数据
//先获取输出流对象,利用输出流对象将数据传回客户端 resp.getWriter().println(req.getAttribute("key1"));
-
out.writer和out.print的区别
1. out.writer 只能输出字符串 2. out.print 可以输出对象
2.4 响应的中文乱码问题
-
方法1
//设置响应体字符集为UTF-8,通过响应头,设置浏览器也使用UTF-8字符集 resp.setCharacterEncoding("UTF-8"); resp.setHeader("Content-Type", "text/html; charset=UTF-8");
-
方法2
//同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头.此方法在获取流对象之前调用才有效 resp.setContentType("text/html; charset=UTF-8");