今天学习了struts2,做一些笔记
Struts2整合到spring容器的步骤:
1、在pom.xml里加入依赖
<!-- struts2-core核心依赖 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.13</version>
</dependency>
<!-- struts2注解依赖 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.5.13</version>
</dependency>
<!-- srping-struts2整合 -->
<!-- struts2-spring-plugin -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.5.13</version>
</dependency>
2、web.xml
<!-- web监听 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 初始化Spring容器 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/configs/applicationContext.xml</param-value> </context-param> <!-- 配置struts过滤器,接管所有的请求 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3、初始化Spring容器,加载spring核心配置文件application.xml,导入负责处理业务bean和持久化bean的配置,需要额外添加对controller层的action bean管理的支持。(将action bean交给spring容器管理)
<!-- 打开组件扫描controller,将action对象管理起来 --> <context:component-scan base-package="com.entor.rams.actions"> <!-- 只对@Controller --> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan>
4、struts2核心配置:struts.xml,负责处理controller层的action bean以及前端控制功能,声明action对象的管理交给spring容器。
<!-- 常量配置 -->
<!-- 开发模式打开 -->
<constant name="struts.devMode" value="true" />
<!-- 声明action对象的管理交给spring容器 -->
<constant name="struts.objectFactory" value="spring" />
<!-- 通过Action的限制得到结果页面路径 -->
<constant name="struts.convention.result.path" value="/WEB-INF/jsps/" />
如果需要准确一点,那就具体的配置
<!-- action配置:包,命名空间,action,result等等 --> <package name="zidingyide" extends="struts-default" namespace="/"> <!-- name表示请求的url:/rams/user_* --> <!-- class表示请求的处理action对象 --> <!-- method表示处理请求的方法名,{1}与name中第一次出现的通配符关联 --> <action name="user_*" class="userAction" method="{1}"> <!-- result表示响应的结果,此处响应webapp根目录下面的index.jsp页面 --> <result name="success">/index.jsp</result> </action> </package>
5、做好所有的配置之后,那就做一些简单的测试
新建一个userAction的类
@Controller
public class UserAction extends ActionSupport implements ModelDriven<User>, Serializable {
private static final long serialVersionUID = 4831870202462134967L;
private User user;
public User getUser() {
return user;
}
/**
* 实现模型驱动获取请求参数
*/
@Override
public User getModel() {
if (user == null)
this.user = new User();
return user;
}
/**
* 处理请求地址为/rams/user_save
*
* @return
*/
public String save() {
System.out.println(user);
return SUCCESS;
}
/**
* 处理请求地址为/rams/user/user_login
*
* @return
*/
@Action(value = "login", className = "userAction", results = //
@Result(name = "success", location = "result.jsp"))
public String login() {
return SUCCESS;
}
}
jsp页面获得通过EI表达式获得参数,如果请求成功,则跳到结果页面
<a href="user_save?loginName=我信了你的邪&username=我是你大爷">点击请求action</a>