Ruquest

基本概念

request对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求中的所有信息都封装在这个对象中

方法

获取请求行

方法

说明

getMethod()

获取请求方式的类型

getRequestURL()

获取客户端发出请求完整URL

getRequestURI()

获取请求行中的资源名部分

getContextPath()

获取当前项目根路径

getRemoteAddr()

获取客户机IP地址

getHeader(String name)

根据请求头名称获取一个值

//获取请求类型
System.out.println(request.getMethod());
//获取完整url
System.out.println(request.getRequestURL());
//获取uri(请求行资源名部分)
System.out.println(request.getRequestURI());
//获取当前项目根路径
System.out.println(request.getContextPath());
//获取客户端ip
System.out.println(request.getRemoteAddr());
//根据请求头名称获取一个值
System.out.println(request.getHeader("Connection"));

设置response里的输出流 response(ru)_设置response里的输出流

获取请求参数相关方法

方法

说明

getParameter(String name)

根据名称获取数据

getParameterValues(String name)

根据名称获取所有数据

getParameterMap()

获取所有参数的键值对

//url=http://localhost:8080/Day_06/ServletRequest?name=杨晨&age=18&hobby=ThePantom&hobby=drink
 		//根据名称获取数值
        System.out.println(request.getParameter("name"));
        //根据名称获取所有数值
        String[] hobbies = request.getParameterValues("hobby");
        System.out.println(Arrays.toString(hobbies));
        //获取参数键值对
        Map<String, String[]> parameterMap = request.getParameterMap();
        Set<String> strings = parameterMap.keySet();
        for (String string : strings) {
            String[] strings1 = parameterMap.get(string);
            System.out.println(Arrays.toString(strings1));
        }

设置response里的输出流 response(ru)_客户端_02

解决post乱码
request.setCharacterEncoding("utf-8");
流对象获取请求信息

request获取流对象(只能读post请求,读取的是请求体)

方法

说明

getReader()

获取字符输入流

getInputStream()

获取字节输入流

请求转发
  1. 请求转发:客户端的一次请求到达ServletA后,该ServletA可以转发到其他地址(多半为servlet)。
  2. 特点:
    浏览器地址栏不变
    域对象中的数据不丢失
    负责转发的 Servlet 转发前后的响应正文会丢失
    由转发的目的地来响应客户端

方法

说明

getRequestDispatcher()

获取请求调度对象(转发给谁)

forward(request,response)

实现转发

setAttribute()

向请求域对象中存储数据

getAttribute()

接收request域中存放数据

removeAttribute()

移除request域中数据

//url=http://localhost:8080/Day_06_war_exploded/Servlet_01?name=杨晨&age=18
@WebServlet("/Servlet_01")
public class Servlet_01 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //处理乱码
        request.setCharacterEncoding("utf-8");
        //添加数据
        request.setAttribute("hobby","drink");
        //转发请求
        request.getRequestDispatcher("Servlet_02").forward(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}
@WebServlet("/Servlet_02")
public class Servlet_02 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");

        request.getAttribute("hobby");
        //转发
        request.getRequestDispatcher("index.jsp").forward(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  姓名:${param.name}<br>
  年龄:${param.age}<br>
  爱好:${requestScope.hobby}
  </body>
</html>

设置response里的输出流 response(ru)_设置response里的输出流_03

Response

方法

字符流响应消息

方法

说明

getWriter()

获取响应字符输出流对象

setContextType(“text/html;charset=utf-8”)

解决中文乱码

重定向
  1. 原理
//设置状态码为302,表示将要进行重定向
response.setStatus(302);
//设置重定向的目标位置
response.setHeader("location","index.jsp");

特点:

浏览器地址栏变成最后重定向的地址
域对象中的数据丢失(因为存在多个request对象)
由重定向的目的地来响应客户端
  1. 方法
.setHeader("location","demo09return.jsp");
@WebServlet("/ServletResponse")
public class ServletResponse extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().write("<font color='blue'>杨晨</font>");
        response.sendRedirect("ServletResponse_02");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}
@WebServlet("/ServletResponse_02")
public class ServletResponse_02 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().write("<font color='blue'>杨晨</font>");
        response.sendRedirect("index.jsp");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}
设置响应头
//设置响应头,设置成下载方式(由于下载的文件是jpg,所以头是image/jpeg)
response.setContentType(getServletContext().getMimeType(file.getName()));
//设置下载头
response.setHeader("Content-Disposition","attachment;filename="+file.getName());