接下来介绍Servlet中另外重要知识点——请求转发、包含。
请求转发:Servlet(源组件)先对客户请求做一些预处理操作(数据处理),然后把请求转发给其他Web组件(目标组件,可以是Servlet、Jsp、Html等)来完成包括生成响应结果在内的后续操作。
请求转发:Servlet(源组件)先对客户请求做一些预处理操作(数据处理),然后把请求转发给其他Web组件(目标组件,可以是Servlet、Jsp、Html等)来完成包括生成响应结果在内的后续操作。
示意图:
两者的共同点:
(1)、源组件和目标组件处理的都是同一客户请求,源组件和目标组件共享同一个ServletRequest和ServletResponse对象;
(2)、目标组件可以为Servlet、JSP或者html文档;
(3)、都依赖于javax.servlet.RequestDispatcher接口
这边提到一个接口javax.servlet.RequestDispatcher,先来看它的定义:
Javax.servlet. RequestDispatcher接口表示请求分发器,它有两个方法:
(1)、forword():把请求转发给目标组件:
Public void forward(ServletRequest req,ServletResponse res)throws ServletException,java.io.IOException
(2)、include():包含目标组件的响应结果:
Public void forward(ServletRequest req,ServletResponse res)throws ServletException,java.io.IOException
结合实例来解释,定义一个ForwardServlet,具体代码如下:
package com.java.web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ForwardServlet extends HttpServlet{
private static final long serialVersionUID = 674344393733876756L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置编码
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
//获取参数值
String username = req.getParameter("username");
//将username存储到request(请求)范围内