struts2 在web容器中表现为一个过滤器, 最近想到最后的视图资源怎么返回的,查了很多资料
都说filter不能直接响应只能修改响应,那么struts2最后response.sendredirect()或者转发什么的在什么地方呢?
还是说 filter配合servlet用的时候"标准"用法是修改,但其实是可以直接响应(因为它确实有ServletResponse这个参数...)而struts2没有按照“标准”来???求大神指点
单从理解上讲(事实比这复杂),你可以把struts2分为两个部分,一个是他的filter,一个是封装的servlet,前端的请求会首先被filter拦截,主要有这么几件事(帮你封装数据、校验数据、控制请求跳转),控制请求跳转可这样理解:默认的filter肯定是不会拦截你的请求,他只会帮你封装,然后放行;如果是你自己写的filter,可能会因为数据不合法或者其他原因直接拒绝掉,从而同意的转向你配置的界面,如果合法,你的filter肯定也是会放行的。当所有的filter都放心以后进入action,其实就是已经封装好的servlet,这其中本身就有request和response,之前怎么做现在还可以怎么做,一般的返回都是返回String,通过你的配置文件找到相应的jsp,还是通过底层将jsp翻译为servlet转发给浏览器的。
filter只能是逐级过滤,你可以设置条件来修改它的内容,但是无法阻碍它向下个filte的传播,直至到servlet,这个是最终的处理,它里面的response就有响应的response.sendredirect()的转发功能。
Struts2,是对Servlet做了一个封装,你只需要按照它约定的配置,每个Action后返回一个字符串即可跳转到对应的Jsp页面,默认
String SUCCESS = "success"; //默认是 SUCCESS 类型
String NONE = "none";
String ERROR = "error";
String INPUT = "input";
String LOGIN = "login