Request&Response
request是请求对象,获取请求数据;response是响应对象,设置响应数据。
request获取请求数据
获取请求方式:request.getMethod();
获取访问路径:request.getContextPath();
获取URL(统一资源定位符):request.getRequestURL();
获取URI(统一资源标识符):request.getRequestURI();
获取请求参数:request.getQueryString()
获取请求头数据(key:value):request.getHeader();
获取字节输输入流:request.getInputStream(),如果前端发送的是文件数据
获取字符输入流:request.getReader(),如果前端发送的是纯文本数据
获取请求体内容的方式,只有post请求才有请求体
<form action="/request-demo/req1" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit">
</form>
@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException {
//在此处获取请求体中的数据
//1. 获取字符输入流
BufferedReader br = req.getReader();
//2. 读取数据
String line = br.readLine();
System.out.println(line);
}
}
请求参数的获取:get请求:request.getQueryString()
post请求:request.getReader()
根据名称获取参数值(数组):request.getParameterValues()
根据名称获取参数值(单个):request.getParameter()
Request请求转发
请求转发是一种服务器内部的资源跳转方式。
请求转发的实现方式:req.getRequestDispatcher("/路径").forward(req,resp);
请求转发资源间共享数据,也就是request对象。
请求转发的特点:
- 浏览器地址栏路径不会发生变化;
- 只能转发当前服务器内部资源。
- 只发一次请求,可以在转发资源间共享request对象。
- 请求转发是服务器完成的。
将数据存储到request域:req.setAttributes("data","hello");
根据key获取值:req.getSttribute("data");
根据key删除键值对:req.removeAttribute("data");
Response
获取字符输出流:resp.getWriter().write()
获取字节输出流:resp.getOutputStream()
Response请求重定向
请求重定向也是一种资源跳转方式。
重定向的实现:resp.sendRedirect("/路径");
重定向的特点:
- 浏览器地址栏路径会发生变化
- 可以重定向到任意位置的资源,服务器内部、外部均可
- 重定向会发送两次请求,是两个不同的request对象,无法通过request对象进行数据共享。
- 重定向是浏览器完成的。
设置响应格式及编码:
req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");
请求参数中文乱码问题
post请求中文乱码:将页面的编码格式设置为utf-8
request.setCharacterEncoding("utf-8");
get请求中文乱码:
URL编码:
String encode = URLEncoder.encode(username, "utf-8");
System.out.println(encode); //打印:%E5%BC%A0%E4%B8%89
URL解码:
String decode = URLDecoder.decode(encode, "ISO-8859-1");//打印:`å¼ ä¸ `
System.out.println(decode);
tomcat8之后,已将get请求乱码问题解决。