Ruquest
基本概念
request对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求中的所有信息都封装在这个对象中
方法
获取请求行
方法 | 说明 |
---|
getMethod() | 获取请求方式的类型 |
getRequestURL() | 获取客户端发出请求完整URL |
getRequestURI() | 获取请求行中的资源名部分 |
getContextPath() | 获取当前项目根路径 |
getRemoteAddr() | 获取客户机IP地址 |
getHeader(String name) | 根据请求头名称获取一个值 |
System.out.println(request.getMethod());
System.out.println(request.getRequestURL());
System.out.println(request.getRequestURI());
System.out.println(request.getContextPath());
System.out.println(request.getRemoteAddr());
System.out.println(request.getHeader("Connection"));
获取请求参数相关方法
方法 | 说明 |
---|
getParameter(String name) | 根据名称获取数据 |
getParameterValues(String name) | 根据名称获取所有数据 |
getParameterMap() | 获取所有参数的键值对 |
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));
}
解决post乱码
request.setCharacterEncoding("utf-8");
流对象获取请求信息
request获取流对象(只能读post请求,读取的是请求体)
方法 | 说明 |
---|
getReader() | 获取字符输入流 |
getInputStream() | 获取字节输入流 |
请求转发
- 请求转发:客户端的一次请求到达ServletA后,该ServletA可以转发到其他地址(多半为servlet)。
- 特点:
浏览器地址栏不变
域对象中的数据不丢失
负责转发的 Servlet 转发前后的响应正文会丢失
由转发的目的地来响应客户端
方法 | 说明 |
---|
getRequestDispatcher() | 获取请求调度对象(转发给谁) |
forward(request,response) | 实现转发 |
setAttribute() | 向请求域对象中存储数据 |
getAttribute() | 接收request域中存放数据 |
removeAttribute() | 移除request域中数据 |
| |
@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
方法
字符流响应消息
方法 | 说明 |
---|
getWriter() | 获取响应字符输出流对象 |
setContextType(“text/html;charset=utf-8”) | 解决中文乱码 |
重定向
- 原理
response.setStatus(302);
response.setHeader("location","index.jsp");
特点:
浏览器地址栏变成最后重定向的地址
域对象中的数据丢失(因为存在多个request对象)
由重定向的目的地来响应客户端
- 方法
.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);
}
}
设置响应头
response.setContentType(getServletContext().getMimeType(file.getName()));
response.setHeader("Content-Disposition","attachment;filename="+file.getName());