Step1. 当服务器启动时,服务器加载
核心控制器StrutsPrepareAndExecuteFilter,
该过滤器在初始化阶段依次加载如下配置文件:
a. struts-default.xml - struts2框架提供的默认配置文件,
基包struts-default位于该文件中。
b. struts-plugin.xml - Struts2插件配置文件
c. struts.xml - 与特定应用相关的配置文件
Step2.核心控制器默认接受.action请求后,
分析请求资源路径,
得到namespace和actionName:
如:
requestURI:/dang/user/login.action
namespace: /user
actionName: login
Step3.核心控制器查找配置文件,找到对应的Action类,
并创建Action类的实例:
如:/user ---> <package namespace="/user">
login ----> <action name="login" class="....">
String className="com.tarena.dang.user.action.LoginAction";
Class clz=Class.for(className);
LoginAction action=(LoginAction)clz.newInstance();
注意:每次请求Action时,都会创建
单独的Action类的实例
Step4.核心控制器将请求分发给对应的拦截器,
以附加额外的功能。
其中params拦截器将表单元素的值
获取后传递给Action实例对应的属性
(调用对应的setter方法)。
<form> LoginAction 类
<input name="userName"> ---params---> loginAction.setUserName(request.getParameter("userName"));
<input name="user.userName">
params拦截器:
User user=new User();
registerAction.setUser(user);
user.setUserName(
request.getParameter("user.userName"));
Step5. 请求最终交给了对应的Action实例,
并调用其默认的执行方法execute,
返回result的名称
(即视图资源对应的逻辑名称)
Step6.处理过程原路返回到核心控制器,
核心控制器根据execute 方法的返回值
跳转到对应的页面(默认的方式是请求转发)
Struts2应用程序的运行过程
猜你喜欢
转载自jacular.iteye.com/blog/1592534
今日推荐
周排行