request、response请求转发和重定向

Request&Response

request是请求对象,获取请求数据;response是响应对象,设置响应数据。

request获取请求数据

获取请求方式:request.getMethod();

获取访问路径:request.getContextPath();

获取URL(统一资源定位符):request.getRequestURL();

获取URI(统一资源标识符):request.getRequestURI();

获取请求参数:request.getQueryString()

获取请求头数据(key:value):request.getHeader();

浏览器在发送GET请求的时候是没有请求体的,所以需要把请求方式变更为POST,请求体中的数据格式如下:

获取字节输输入流: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对象。

请求转发的特点:

  1. 浏览器地址栏路径不会发生变化;
  2. 只能转发当前服务器内部资源。
  3. 只发一次请求,可以在转发资源间共享request对象。
  4. 请求转发是服务器完成的。

将数据存储到request域:req.setAttributes("data","hello");

根据key获取值:req.getSttribute("data");

根据key删除键值对:req.removeAttribute("data");

Response

获取字符输出流:resp.getWriter().write()

获取字节输出流:resp.getOutputStream()

Response请求重定向

请求重定向也是一种资源跳转方式。

重定向的实现:resp.sendRedirect("/路径");

重定向的特点:

  1. 浏览器地址栏路径会发生变化
  2. 可以重定向到任意位置的资源,服务器内部、外部均可
  3. 重定向会发送两次请求,是两个不同的request对象,无法通过request对象进行数据共享。
  4. 重定向是浏览器完成的。

设置响应格式及编码:

  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请求乱码问题解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值