Struts2 简单了解 2019-06-30 程序之旅 暂无评论 796 次阅读 ## Struts2 简单了解 #### 重点说说struts2的用法。 #### 拦截器 Struts2以Filter为核心,在配置文件`web.xml`中会有配置一个拦截器`StrutsPrepareAndExecuteFilter`。配置如下 ```xml struts2 org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter struts2 /* ``` #### 控制器 上边已经设置核心拦截器,负责拦截和处理用户请求,之后需要定义Action控制器,负责调用model进行业务处理并放回结果。定义controller的方法有很多,其中包括自定义class类,类中包含execute()无参方法;实现或继承Action类。 本次使用的spring注入的方式,struts2与spring结合。 ```java import com.felton.model.user; import com.felton.service.UserService; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import javax.annotation.Resource; import static com.opensymphony.xwork2.Action.SUCCESS; // 依赖注入 @Controller("userAction") // 单例模式 @Scope("prototype") public class UserAction { private com.felton.model.user user; @Resource private UserService userService; public com.felton.model.user getUser(){ return user; }; public String m1(){ user = userService.getUser(1); System.out.println(user.getName()); return SUCCESS; } public String saveUser(){ com.felton.model.user user = new user(); user.setName("事物已提交"); userService.saveUser(user); return "success"; } public void testUserPartInfo(){ userService.test(); } } ``` > 这里需要注意的是,在struts2中一个request请求对应一个action对象,所以相比springmvc来说,struts2的执行消耗内存较大,这里使用spring来进行单例模式控制,但是这里又会出现一个问题,如果是多个请求同时来进行访问,可能会出现请求阻塞的问题,如果哪位大神有好的解决方案欢迎留言 :) 编辑struts.xml文件,拦截器`StrutsPrepareAndExecuteFilter`会根据配置文件struts.xml文件来创建合适的Action实例类,来处理model业务。 ```xml /index.jsp m1,saveUser,testUserPartInfo ``` 这里有个问题,项目是如何找到对应的struts.xml文件的,我们来跟踪代码看看 1. 在启动tomcat时,会加载`web.xml`文件 2. 初始化`org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter` ![1561870255656]( https://mufeng-blog.oss-cn-beijing.aliyuncs.com/usr/uploads/2019/06/1561870255656.png) 3. 初始化类中调用initDispatcher,方法中的init()方法,进入方法里边看看 ![1561870395710]( https://mufeng-blog.oss-cn-beijing.aliyuncs.com/usr/uploads/2019/06/1561870395710.png) 4. 其方法会调用一个`init_TraditionalXmlConfigurations`,该方法实现的功能就是读取`struts.xml`文件配置。 ![1561870462304]( https://mufeng-blog.oss-cn-beijing.aliyuncs.com/usr/uploads/2019/06/1561870462304.png) ![1561870574528]( https://mufeng-blog.oss-cn-beijing.aliyuncs.com/usr/uploads/2019/06/1561870574528.png) 所以tomcat在初始化的时候会读取classpath中的三个名称为`struts-default.xml,struts-plugin.xml,struts.xml`文件,对struts2初始化。从而在开发中需要注意的是action的配置文件名称必须为`struts.xml`。 > controller有五种返回状态,success、error、input、login和none。可以直接使用字符或struts中接口自定义成员变量。 ![1561870952522]( https://mufeng-blog.oss-cn-beijing.aliyuncs.com/usr/uploads/2019/06/1561870952522.png) #### 小结 进过刚刚的配置,大概知道其与spring mvc的一些不同 - 拦截不同。struts2进行类级别拦截,spring mvc使用方法级别拦截 - 内存消耗。struts2需要对每一个request进行封装,所以先比来说内存消耗较大。 - ajax的支持。在spring mvc中有异步处理的机制,并且放回数据可以通过一个@responseBody就能实现文本响应。 ![1561871476529]( https://mufeng-blog.oss-cn-beijing.aliyuncs.com/usr/uploads/2019/06/1561871476529.png) - 开发效率。在controller配置中,spring几乎是零配置。 打赏: 微信, 支付宝 标签: spring mvc, struts2 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。