JavaWeb(五)—— HTTPServletRequest & HttpServletResponse

一、HTTPServletRequest类

  1. HTTPServletRequest有什么作用

每次只要有请求进入到Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。
然后传递到service方法(doGet和doPost)中给我们使用。我们可以通过HTTPServletRequest对象,获取到所有请求的信息。

  1. HTTPServletRequest类的常用方法
    public class RequestAPIServlet extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
            /*getRequestURI()       获取请求的资源路径*/
            System.out.println("URI:    " + request.getRequestURI());//URI:    /web_02/RequestAPIServlet
    
            /*getRequestURL()       获取绝对路径*/
            System.out.println("URL:    " + request.getRequestURL());//URL:    http://192.168.0.7:8080/web_02/RequestAPIServlet
    
            /*getRemoteHost()       获取客户端IP地址*/
            /*
             *通过localhost访问得到的IP:     0:0:0:0:0:0:0:1
             *通过127.0.0.1访问得到的IP:     127.0.0.1
             *通过真实IP访问得到的IP:        真实IP
             */
            System.out.println("IP:     " + request.getRemoteHost());//IP:     192.168.0.7
    
            /*getHeader():      根据参数名获取请求头参数*/
            System.out.println("获取请求头参数Connection:    " + request.getHeader("Connection"));//获取请求头参数Connection:    keep-alive
    
            /*getMethod():      获取请求方式*/
            System.out.println("请求方法:   " + request.getMethod());//请求方法:   GET
    
            //设置编码格式,解决POST请求中的参数中文乱码
            //在获取请求参数之前调用
            request.setCharacterEncoding("UTF-8");
            /*获取请求参数*/
            //getParameter():           获取单值参数
            System.out.println(request.getParameter("userName"));
            System.out.println(request.getParameter("pwd"));
            //getParameterValues():         获取多值参数
            System.out.println(Arrays.toString(request.getParameterValues("hobby")));
        }
    }
    
  2. 请求转发
    1. 什么叫请求转发?
      请求转发是指服务器接收到请求后,从一个资源跳转到另一个资源的操作叫做请求转发。
      JavaWeb(五)—— HTTPServletRequest & HttpServletResponse_第1张图片
    2. 通过request的getRequestDispatcher(“转发地址”)获取转发器对象,再调用其forward(request,response)的方法并传入request对象和response对象。
    public class Servlet_01 extends HttpServlet {
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("servlet1参数      " + request.getParameter("user"));
            request.setAttribute("key","123123");
            //妆发到servlet_02
            /*请求转发必须要以斜杠开头,/代表当web项目的地址,即:http:/host:port/工程名*/
            request.getRequestDispatcher("/servlet_02").forward(request,response);
        }
    }
    
    public class Servlet_02 extends HttpServlet {
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("servlet02参数         " + request.getParameter("user"));
            System.out.println(request.getAttribute("key"));
    
        }
    }
    

HttpServletResponse类

  1. HttpServletResponse类的作用
    HttpServletResponse类和HttpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HTTPServletResponse表示所有响应额信息。
    我们如果需要设置返回给客户端的信息,都可以通过HTTPServletResponse对象来进行设置。
  2. 两个输出流的说明
    1. 字节流 :getOutPutStream(); 常用于下载
    2. 字符流 :getWriter(); 常用于回传字符串
      两个流只能使用一个。
    3. 解决乱码问题
    public class ResponseIOServlet extends HttpServlet {
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //解决中文乱码问题
            //方式一
            /*//设置服务器字符集
            response.setCharacterEncoding("UTF-8");
            //通过响应头设置浏览器字符集
            response.setHeader("Content-Type", "text/html;charset=UTF-8");*/
            //方式二
            //同时设置服务器和客户端都使用UTF-8字符集,此方法要在获取流之前调用才有效
            response.setContentType("text/html;charset=UTF-8");
            response.getWriter().write("哈哈哈哈哈");
        }
    }
    
  3. 请求重定向
    1. 概念
      请求重定向,是指客户端给服务器发送请求,然后服务器告诉客户端,去访问另外一个地址。
      JavaWeb(五)—— HTTPServletRequest & HttpServletResponse_第2张图片
    2. 实现方式
    public class Response1 extends HttpServlet {
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("老地址");
            //重定向
            /*//方案一:
                //设置状态码
            response.setStatus(302);
                //设置响应头
            response.setHeader("Location","http://localhost:8080/web_02/response2");*/
            //方案二(推荐使用):
            response.sendRedirect("http://localhost:8080/web_02/response2");
        }
    }
    

你可能感兴趣的:(JavaWeb)