Structs个人适用知识整理
structs主要模块由过滤器,拦截器,structs核心模块以及用户功能模块组成。
1. 一个客户端向服务器发送httpservletRequst请求时,例如发送http://localhost:8080/login.action请求,提交到服务器
2. 请求通过一系列的过滤器,例如ActionContextCleanUp–>OtherFilter–> DispatcherFilter,且用户可以根据需求自定义自己的filter,
例如在web.xml中
….
<filter>
<filter-name>checkLogin</filter-name>
<filter-class>com.myproject.checkLogin</filter-class>
</filter>
<filter-mapping>
<filter-name>checkLogin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
……
checkLogin.java
public class checkLogin implements Filter(){
public void init(){
}
public void destroy{
}
public void doFilter(HttpServletRequest request,HttpServletResponse response, FilterChain filterChain) throws Exception {
Session session = request.getSession();
String userName = session.getAttribute(“userName”);
if (userName == null || userName.equals(“”)){
response.sendRedirect(“login.action”);
}else{
filterChain.doFilter(request,response);
}
}
}
3. FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个HttpServletRequst,如果ActionMapper决定调用某个Action,FilterDispacther交给ActionProxy来处理。
4. ActionProxy通过Configuration manager 查询配置文件,找到需要调用的Action类
5. ActionProxy实例化ActionInvocation,同时,ActionInvocation通过代理调用Action,并在调用action之前,会调用所有interceptors,只有在调用action的时候才会加载interceptor,否则例如访问localhost:8080/null.action,而structs.xml中并没有null的action,页面跳出404,而interceptor也不会被加载,所以,想对无效url进行更正只能在filter中
Inteceptor可用于数据正确性验证,例如在structs.xml中写入
<package name=”structs2″ namespace=”/” extension=”default-structs” >
<interceptors>
<!– 拦截postData.action –>
<interceptor name=”postData” class=”com.myproject.checkData”></interceptor>
<interceptor-stack name=”myStack” >
<interceptor-ref name=”defaultStack” />
<interceptor-ref name=”postData” />
</interceptor-stack>
</interceptors>
<default interceptor-ref name=”myStack” />
<global-results>
<result name=”result” type=”redirect” >/loginSuccess.jsp</result>
<result name=”fail” type=”redirect”> /loginFail.jsp</result>
</global-results>
</package>
com.myproject.checkData.java
public class dataCheck extends AbstractInterceptor{
public String Interceptor(ActionInvocation arg0){
return “result”;
}
}
6. Action执行完毕,则返回result, ActionInvocation根据result在structs.xml找到对应的返回类型和数据。