servlet请求转发的三种方式
servlet中的请求转发主要有三种方式:
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("gbk");response.setCharacterEncoding("gbk");response.setContentType("text/html;charset=gbk");String username = request.getParameter("username");String password = request.getParameter("password");PrintWriter pw = response.getWriter();pw.write("include包含。");if(username.equals("123")&&password.equals("123")){//include测试request.getRequestDispatcher("/success.html").include(request, response);}else{//在sendRedict中url前必须加上当前web程序的路径名.....response.sendRedirect(request.getContextPath()+"/fail.html");}}
?
?
运行后如果输入正确的用户名密码,则执行include方法,界面显示:include包含。 登录成功!并且地址栏地址未改变,若是输入错误登录名或者密码,界面显示:登录失败! 并且地址栏地址改变。其中要注意的是sendRedirect方法中在要跳转的页面url前必须加上当前web程序路径名,这个路径通过request.getContextPath()可以得到。
?
如果吧其中include方法改为forward方法:
?
if(username.equals("123")&&password.equals("123")){request.getRequestDispatcher("/success.html").forward(request, response);}else{//在sendRedict中url前必须加上当前web程序的路径名.....response.sendRedirect(request.getContextPath()+"/fail.html");}?
登录时输入正确信息,则跳转的页面地址不变,显示:登录成功!不包含url中的内容。
?
总结如下:
redirect与include、forward的区别在于是不是同一个Request,redirect会有两次交互。
include与forward的区别在于输出的内容,include包含本身servlet与跳转页面内容的结果,而forward不包含本身servlet的内容。