在上一篇文章中也提到了,struts2不需要依赖Servelet API,也不用像struts1一样需要继承HttpServlet,因此耦合度低,这也是我们在平时项目中之所以使用框架的原因。
今天要讲的action的流程:
1,流程
1)拦截器拦截请求,创建代理Action对象,执行方法,返回结果,界面跳转。
2)拦截器解析请求路径,获取Action的名称,到配置文件中查找action的完整类名,利用反射创建对象。
2、方法特点
public类型,无入参,返回值类型String 。
3、Action类和ActionProxy,ActionInvocation类的关系
ActionProxy是Action的代理类,通过解析配置文件获取Action类中名称和完整路径,利用反射机制创建的。
ActionInvocation是Action类的调用者,反射创建的ActionProxy类就存在ActionInvocaiton类中。
4、流程解析
1)http://127.0.0.1:8080/SSHDemo/list.action 客户端发出请求,struts2的过滤器拦截请求。并且创建action代理,然后根据配置文件mapper去匹配到对应的空间对应的action类中。
2)struts2配置文件对应的空间中该action映射的action类。action中没有指定执行方法默认为execute方法。
<action name="list" class="listAction">
<result name="success" >/WEB-INF/jsp/list.jsp</result>
</action>
3) action类中默认的执行方法,返回String类型的结果字符串。
public String execute() {
Map request = (Map) ActionContext.getContext().get("request");
request.put("list",service.selectList());
return "success";
}