@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置请求和响应的字符集
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
System.out.println("AServlet ----> BServlet");
// 请求转发
req.getRequestDispatcher("response.html").forward(req, resp);
}
- 请求转发的特点
从一个Servlet跳转到另一个Servlet/JSP/HTML;
浏览器地址栏不会发生改变,只发一次请求;
请求转发是服务器内部行为;
请求转发使用的是同一个请求和响应对象(设置共享资源,涉及到域对象);
- 请求转发到html文件会出现乱码,问题不在浏览器和服务器编码/解码
- 解决方法: 需配置web.xml
<jsp-config>
<jsp-property-group>
<url-pattern>*.html</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
请求重定向
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置请求和响应的字符集
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
System.out.println("RedirectAServlet ----> RedirectBServlet");
// 重定向到BServlet
resp.sendRedirect("bb");
}
- 重定向特点
转发和重定向的区别一个资源跳转到另一个资源,会发送新的请求;
一个Servlet跳转到另一个Servlet/JSP/HTML;
浏览器地址栏会发生改变,发送多个请求;
重定向是客户端(浏览器)的行为;
重定向使用的不是同一个请求对象和响应对象;
每次发送请求都会创建新的请求和响应对象;