关于struts的初步学习
注意以下问题:
result标签中文本内容(跳转的jsp的路径)要以"/"打头
<action name="main">
<!--注意:"/"开头-->
<result>/views/interceptor/welcome.jsp</result>
</action>
拦截器配置需要注意:
<struts>
<package name="interceptorPkg" extends="struts-default" namespace="/interceptor">
<!--注册拦截器-->
<interceptors>
<interceptor name="checkLogin" class="com.mxl.s05.CheckLoginInterceptor"></interceptor>
<!--拦截器栈:多个拦截器的集合-->
<interceptor-stack name="myStack">
<interceptor-ref name="checkLogin"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--设置当前package默认引用拦截器(当前包中所有action默认都这样拦截)-->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<!--全局结果视图(放在拦截器后面)-->
<global-results>
<result name="login" type="redirect">/views/interceptor/login.jsp</result>
</global-results>
<action name="login" class="com.mxl.s05.LoginAction">
<!--login不需要checkLogin,所以要把自己默认的这个拦截器弄进来-->
<interceptor-ref name="defaultStack"></interceptor-ref>
<result type="redirectAction">main</result>
</action>
<action name="main">
<!--注意:"/"开头-->
<result>/views/interceptor/welcome.jsp</result>
</action>
</package>
</struts>
还有写action类需要怎么做,拦截器类要怎么做:(初步)
public class LoginAction extends ActionSupport {
private String username;
private String passsword;
public void setUsername(String username) {
this.username = username;
}
public void setPasssword(String passsword) {
this.passsword = passsword;
}
@Override
public String execute() throws Exception {
System.out.println("登陆判断 ");
System.out.println(username);
ActionContext.getContext().getSession().put("USER_IN_SESSION",username);
return SUCCESS;
}
}
-------------------------------------------分隔符------------------------------------
//拦截器
public class CheckLoginInterceptor extends AbstractInterceptor {
/**
* 执行拦截操作
*/
public String intercept(ActionInvocation actionInvocation) throws Exception {
System.out.println("我是拦截器");
Map<String, Object> sessionMap = actionInvocation.getInvocationContext().getSession();
Object user = sessionMap.get("USER_IN_SESSION");
if (user==null){
return "login";
}
return actionInvocation.invoke();//放行
}
}
下面附上面试常见问题之
Struts2的请求的执行步骤:
①.客户端发送请求;
②.该请求经过一系列的过滤器(Filter):其中可选过滤器ActionContextCleanUp,帮助Struts2和其他框架集成。例如:SiteMesh Plugin。
③.接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper,来决定该请求是否需要调用某个Action。
④.若ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。
⑤.ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类。
⑥.ActionProxy创建一个ActionInvocation的实例。
⑦.ActionInvocation实例调用Action的前后,涉及到相关拦截器(Intercepter)的调用。
⑧.一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果是一个JSP或其他页面(也可以是其他的Action链)。 JSP页面展现可使用Struts2框架中的标签(该过程会涉及ActionMapper)。
在上述过程中所有的对象(Action、Interceptors、Results等)都由xwork容器中的ObjectFactory创建。