Jsp/Servlet读书笔记(二) -- HttpServletRequest和HttpServletResponse

HttpServletRequest: 请求的转发forward和包含include

很多时候Servlet对某个请求的处理结果并不是直接发还给客户端,而是转交给下一个Servlet做进一步处理。转发请求可以使用HttpServletRequest的getRequestDispatcher()方法取得RequestDispatcher对象,再转发给相应的Servlet:

RequestDispatcher rd = request.getRequestDispatcher("loginAction.do");

取得RequestDispatcher实例以后再调用forward()方法来将请求转发,转发时将HttpServletRequest和HttpServletResponse作为参数传入,因此在同一个请求周期中,后续处理请求的Servlet/Jsp可以继续使用ServletRequest和ServletResponse处理请求和回应:

rd.forward(request, response);

使用了forward方法表示当前的Servlet不会对请求做回应,而是将回应的职责交给下一个Servlet来处理。应此在执行forward之前,不能对客户端做http回应,否则发生IllegalStateException。forward()的Jsp/Servlet执行完毕,执行流程会回到原来的Jsp/Servlet,这是可以继续一些流程处理,但是无法再对浏览器做回应。

请求的转发是在容器中进行的,浏览器不会知道请求被转发,因此网址上不会有变化。


如果在目前的Servlet中,打算先进行一部分对客户端的回应,中间再将其他Servlet包括进来回应,则可以使用RequestDispatcher的include()方法:

request.getRequestDispatcher().include(request, response);

所包含的Servlet处理完毕之后,原Servlet还可以继续进行流程处理以及对客户端的回应。不过一般来说include方法会放在Jsp中,使用标签<jsp:include>


HttpServletResponse: sendRedirect()和sendError()方法

可以使用HttpServletResponse的sendRedirect()方法要求客户端浏览器重新请求另外一个url,这称为重定向(Redirect):

response.sendRedirect("http://www.xxx.de");

这个方法会在回应中设定HTTP状态码301以及Location标头,浏览器接收到这个标头,会重新使用Get()方法请求指定的url,因此网址列上会出现url的变更。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值