JavaWeb:Request和Response(4)
JavaWeb

解决方案
设置输入流编码
request.setCharacterEncoding("UTF-8");
重新发送POST请求,就会在控制台看到正常展示的中文结果。
6、Request请求转发
请求转发(forward):一种在服务器内部的资源跳转方式。

浏览器发送请求给服务器,服务器中对应的资源A接收到请求,资源A处理完请求后将请求发给资源B,资源B处理完后将结果响应给浏览器,请求从资源A到资源B的过程就叫请求转发
实现方式
request.getRequestDispatcher("资源B路径").forward(request,response)
代码演示
1.创建一个Aservlet类,接收/a的请求,在doGet方法中打印a请求,同时进行请求转发
@WebServlet(value = "/a")
public class AServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("a 请求");
// 请求转发
request.getRequestDispatcher("b").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
}
}
2.创建一个Bservlet类,接收/b的请求,在doGet方法中打印b请求
@WebServlet(value = "/b")
public class BServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("b 请求");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
}
}
3、启动tomcat访问a资源

请求转发资源间共享数据:使用Request对象
需要使用request对象提供的三个方法:
- 存储数据到request域[范围,数据是存储在request对象]中
void setAttribute(String name,Object o);
- 根据key获取值
Object getAttribute(String name);
- 根据key删除该键值对
void removeAttribute(String name);
接着上个需求来:
1、在a请求转发前保存资源
@WebServlet(value = "/a")
public class AServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("a 请求");
// 保存数据到request中,要在请求转发之前
request.setAttribute("name","张三");
// 请求转发
request.getRequestDispatcher("b").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
}
}
2、在b资源获取数据
@WebServlet(value = "/req03")
public class request02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1、获取map集合
Map<String, String[]> parameterMap = request.getParameterMap();
parameterMap.forEach((key,values)->{
System.out.println(key+"::"+ Arrays.toString(values));
});
// 2、根据参数名称获取参数值
String username = request.getParameter("username");
System.out.println(username);
// 3、根据参数名称获取参数数组
String[] hobbies = request.getParameterValues("hobby");
System.out.println(Arrays.toString(hobbies));
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
doGet(request,response);
}
}
请求转发的特点
- 浏览器地址栏路径不发生变化
- 只能转发到当前服务器的内部资源,不能从一个服务器通过转发访问另一台服务器
- 一次请求,可以在转发资源间使用request共享数据
7、Response的响应状态码和响应头
HTTP响应数据总共分为三部分内容,分别是响应行、响应头、响应体,对于这三部分内容的数据,respone对象都提供了哪些方法来进行设置?
响应行
相关阅读
-
dns服务器未响应怎么修复 分享dns未响应最简单的修复办法
今天为大家介绍dns服务器未响应怎么修复和分享dns未响应最简单的修复办法的教程内容,继续往下看吧! 很多人在浏览网页时,经常会遇到DNS服务器未响应的情况,那么什么是DNS服务器?DNS未
-
个人网站备案流程 工信部个人网站备案过程讲解
您可能不了解个人网站备案流程和工信部个人网站备案过程讲解的IT小经验,继续往下看吧! 嗨,大家好,我是希留。 前面文章介绍了下使用https访问网站的相关配置,然后发现访问https时灵时
-
HTTP状态码深入解析:401 Unauthorized
为大家介绍HTTP状态码深入解析的教程内容,接下来一起来看看吧。 在互联网通信中,HTTP状态码是用来表示服务器响应的一种方式。 当我们在浏览器中访问网页时,服务器会返回一个状态码,
-
什么是跨站脚本 XSS攻击?
为网友解答什么是跨站脚本的相关话题,下面为详细的介绍。 跨站脚本(Cross-Site Scripting,XSS)是一种常见的网络安全漏洞,攻击者利用该漏洞在受害者的网页中插入恶意脚本,从而能够获取


