javaweb基础——RequestDispatcher接口

Posted 名字真的很急用

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaweb基础——RequestDispatcher接口相关的知识,希望对你有一定的参考价值。

在开发中访问到一个web资源后,需要服务器跳转到另一个资源去处理请求,可以通过sendRedirect重定向方法来实现,也可以通过RequestDispatcher转发对象的forWord方法来实现

得到转发的对象:RequestDispatcher forWords = request.getRequestDispatcher(“另一个资源的路径”);

常用方法:
实现请求转发:forWords.forword(request,response);
实现请求包含:forWords.include(request,response);

请求转发

@WebServlet("/tom")
public class requestforword extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        req.setAttribute("name","tom");
        RequestDispatcher dispatcher = req.getRequestDispatcher("receive");
        dispatcher.forward(req,resp);
    }
}
@WebServlet("/receive")
public class requestReceive extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        Object name = req.getAttribute("name");
        /*String names = (String)name;
        resp.getWriter().write(names);*/
        resp.getWriter().write(name.toString());
    }
}

重定向

<body>
<form action="/login">
<h2>密码或者用户名错误!请重新输入......</h2>
    用户名:<input type="text" name="name">
<br>
    密码:<input type="password" name="pass">

    <br>
    <input type="submit" value="提交">

</form>
</body>
@WebServlet("/login")
public class logins extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String name = req.getParameter("name");
        String pass = req.getParameter("pass");

        if("admin".equals(name) && "12345".equals(pass)){
            resp.sendRedirect("/success.html");
        }
        else {
            resp.sendRedirect("/login.html");
        }
    }
}

请求转发:
特点:发送了一次请求,响应了一次,和request域对象配合使用,可以实现值的传递,
转发路径:转发动作是在服务器内部实现的,所以转发路径不要携带项目名称。
请求重定向:
特点:发送了二次请求,响应了二次,不能和request域对象配合使用,
重定向路径:重定向动作是在浏览器执行的,所以路径需要携带项目名称

请求包含:
特点:发送一次请求,请求包含是由服务器完成的
请求包含的路径:是在服务器内部完成的,不需要携带项目名称。

@WebServlet("/including")
public class including extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        //获取转发对象
        RequestDispatcher inclued = req.getRequestDispatcher("inclued?p=abc");
        //请求包含动作
        PrintWriter writer = resp.getWriter();
        writer.write("including   before"+"<br/>");

        //区包含被包含对象
        inclued.include(req,resp);

        writer.write("including   after");
    }
}
@WebServlet("/inclued")
public class inclued extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //获取输出字符流
        PrintWriter writer = resp.getWriter();
        //输出一段中文
        writer.write("文华东方"+"<br/>");

        writer.write("request uri:"+req.getRequestURI()+"<br/>");

        writer.write("request :"+req.getServletPath()+"<br/>");

        writer.write("getparameter:"+req.getParameter("p")+"<br/>");

    }
}

以上是关于javaweb基础——RequestDispatcher接口的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb开发基础

JavaWeb_JavaScript基础篇

JavaWeb_JavaScript基础篇

JavaWeb1.3.3基础加强:注解案例(注解+反射重构"JavaWeb-1.2.3基础加强:案例(反射+配置文件))

JavaWeb------servlet基础

JavaWeb学习总结 JavaWeb基础与Tomcat服务器