美文网首页何甜甜的迷弟
Servlet之间的跳转方式

Servlet之间的跳转方式

作者: 何甜甜在吗 | 来源:发表于2017-12-26 21:20 被阅读0次

    因为在实现登陆验证的时候,需要进行跳转,所以对servlet的三种跳转方式又进行了学习

    跳转方式之一:forward跳转
    forward跳转需要有RequestDispatcher对象,RequestDispatcher对象可以通过HttpServletRequest对象获得
    通过RequestDispatcher对象,不仅可以跳转到jsp、另外一个servlet,还可以是其他文件,比如web.xml,不过这种方式好像使用场景比较少
    举个例子:ForwardServlet.java

    /**
     * @author hetiantian
     *
     * @author hetiantian
     * @version 2017/12/26.
     */
    public class ForwardServlet extends HttpServlet {
        private RequestDispatcher dispatcher = null;
        @Override
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String destination = request.getParameter("destination");
            //跳转到另外一个文件
            if ("file".equals(destination)) {
                dispatcher = request.getRequestDispatcher("/WEB-INF/web.xml");
                dispatcher.forward(request, response);
            } else if ("jsp".equals(destination)) {  //跳转到jsp页面
                //通过设置request的属性值,传递一个Date对象给jsp页面
                request.setAttribute("date", new Date());
    
                //调换到forward.jsp页面
                dispatcher = request.getRequestDispatcher("/forward.jsp");
                dispatcher.forward(request, response);
            } else if ("servlet".equals(destination)) {  //跳转到另外一个servlet文件中
                dispatcher = request.getRequestDispatcher("/login");
                dispatcher.forward(request, response);
            } else {
                response.setCharacterEncoding("gbk");
                response.getWriter().println("缺少参数。用法:" + request.getRequestURL() +
                        "?destination=jsp或者file或者servlet");
            }
        }
    }
    

    里面列举了三种跳转方式
    注:getRequestDispatcher()方法的参数必须以"/"开始
    跳转到其他servlet,getRequestDispatcher()参数为servlet的映射url,这里即为/login
    当使用forward形式跳转servlet时,地址栏会显示跳转前的servlet访问地址,因为该跳转是在服务器实现的,客户端不知道该跳转方式


    图1

    可以看到,地址栏跳转后没有发现变化,这个跳转对客户端是透明的,这也是forward跳转方式和其他跳转方式的不同点

    跳转方式之二:redirect
    通过HttpServletResponse的sendRedirection就能实现重定向
    前面我们实现的登陆验证就是通过这种方式实现的,这里就不在举例子了。
    说明一点:当使用redirect跳转方式时,跳转是在客户端实现的,地址栏会发生变化。并且客户端请求了两次服务器,第一次获得重定向状态码和重定向地址,第二次访问真实地址


    图2

    可以看到地址栏的地址已经发生了变化

    跳转方式之三:refresh
    自动刷新可以实现在一段时间之后跳转到另外一个页面,还可以实现一段时间之后自动刷新此页面。通过HttpServletResponse的setHeader方法实现
    举个例子:RefreshServlet.java

    /**
     * refresh跳转方式
     *
     * @author hetiantian
     * @version  2017/12/26.
     */
    public class RefreshServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setHeader("Refresh", "1000;URL=http://localhost:8080/login.html");
        }
    }
    

    目前还没有想到好的例子,试着写了一个例子然而出现一点bug,在思考一下,morethink


    ubhappy

    相关文章

      网友评论

        本文标题:Servlet之间的跳转方式

        本文链接:https://www.haomeiwen.com/subject/mgregxtx.html