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找到对应的返回类型和数据。  

发表评论

电子邮件地址不会被公开。 必填项已用*标注

昵称 *