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/>");

    }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值