读书人

tomcat源码redirect跟forward的实现

发布时间: 2012-09-19 13:43:54 作者: rapoo

tomcat源码—redirect和forward的实现

全文转载:http://luckaway.iteye.com/blog/557980

作者:luckaway [from javaeye]

?

网上已经有很多关于redirect和forward区别的文章,更多的都是只是一些概念上的描述,虽然在大多情况下,知道这些就已经足够了。但也有例外:forward not working for struts2,why?我也是在工作中碰到了这个问题,才特意看了下tomcat有关这部分的源代码。深刻的了解下也无妨。
redirect和forward都是属于servlet规范的,不同的servlet容器的实现可能会有一些区别,但原理都是类似的。

redirect和forward的定义:
1. redirect(重定向):服务端发送给客户端一个重定向的临时响应头,这个响应头包含重定向之后的URL,客户端用新的URL重新向服务器发送一个请求。
2. forward(请求转向):服务器程序内部请求转向,这个特性允许前一个程序用于处理请求,而后一个程序用来返回响应。

Redirect的原理比较简单,它的定义也已经描述的很清楚了,我也不想多讲什么,就贴一段简单的代码吧!

org.apache.catalina.connector.Response#sendRedirect(String):?
??



org.apache.catalina.connector.RequestFacade和类org.apache.catalina.connector.Request都是实现了javax.servlet.http.HttpServletRequest接口,而RequestFacade内部有包装了个Request,对Request的访问做了些控制,应该是代理模式

org.apache.catalina.connector.Request#getRequestDispatcher(String) ?

org.apache.catalina.core.ApplicationDispatcher#doForward(ServletRequest,ServletResponse):
<filter-mapping>           <filter-name>struts2</filter-name>           <url-pattern>/*</url-pattern>           <dispatcher>REQUEST</dispatcher>           <dispatcher>FORWARD</dispatcher>   </filter-mapping>  
?

读书人网 >软件架构设计

热点推荐