一、介绍
请求包含指的是使用include()方法将Servlet请求转发给其它Web资源进行处理,与请求转发不同的是,在请求包含返回的响应消息中,既包含了当前Servlet的响应消息,也包含了其他Web资源所作出的响应消息。
二、案例
1.IncludingServlet
public class IncludingServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//request.setCharacterEncoding("utf-8");
RequestDispatcher rd = request.getRequestDispatcher("/IncludedServlet?p1=中国2");
out.println("before including" + "<br>");
rd.include(request, response);
out.println("after including" + "<br>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
2.IncludedServlet
public class IncludedServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置响应时使用的字符编码
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.println("中国" + "<br>");
out.println("URI:" + request.getRequestURI() + "<br>");
out.println("QueryString:" + request.getQueryString() + "<br>");
out.println("parameter p1:" + request.getParameter("p1") + "<br>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
3.运行
http://localhost:8080/chapter04/IncludingServlet
地址栏未发生变化
4.响应内容产生乱码
原因:
解决:对IncludingServlet中响应内容设置编码
response.setContentType("text/html;charset=utf-8");
5.请求参数产生乱码
IncludingServlet中添加request.setCharacterEncoding("utf-8");