请求转发特点
下面看示例代码,首先看servlet03示例代码
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 请求转发跳转
* 可以让请求从服务端跳转到客户端(或跳转到指定Servlet)
* request.getRequestDispatcher(url).forward(request,response);
* 特点:
* 1.服务端行为(即所有的操作都是由服务器控制的)
* 2.地址栏不发生改变
* 3.从始至终只有一个请求
* 4.request数据可以共享
*/
@WebServlet("/s03")
public class servlet03 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接受客户端给的参数
String uname = request.getParameter("uname");
System.out.println("servlet03uname="+uname);
//请求转发跳转到Servlet04
request.getRequestDispatcher("s04").forward(request,response);
}
}
上述servlet03代码中的request.getRequestDispatcher("s04").forward(request,response);
相当于是将servlet03的request对象和response对象转发给"s04"这个资源,"此时相当于把s03的request对象和response对象的属性值传递给了s04",此时s04就会有s03的属性(相当于用的是同一次请求)。下面为servlet04代码以及结果展示。
servlet04代码
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/s04")
public class servlet04 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String uname = request.getParameter("uname");
System.out.println("servlet04uname="+uname);
}
}
结果演示
控制台同时拿到了"zhangsan",此时我们把s03换成s04,并且不给uname赋值
此时的s04的uname为null,那么就成功验证了请求转发特点
当然也可以跳转jsp和html页面,只需request.getRequestDispatcher(url).forward(request,response);
当中的url改成对应的地址即可。