在eclipse 环境下集成Struts 2.1.6 和 Spring 2.5.5
在使用Struts+spring框架以来,一直头疼于复杂的配置,spring用了注解以后减少好多配置,Struts2.1.6以后可以使用类似于spring注解的形式来减少配置文件,下面就具体搭建步骤做个详细的说明。
一:struts的搭建
1, 新建web 项目
我们起名sspring 运行环境选择tomcat 6
2,添加sturts jar包:将Struts2.1.6的下载包解压后得到的lib目录,在lib目录下,找到以面的jar包:
xwork-2.1.2.jar
struts2-core-2.1.6.jar
struts2-convention-plugin-2.1.6.jar
ognl-2.6.11.jar
freemarker-2.3.13.jar
commons-loggin-1.0.4.jar
commons-fileupload-1.2.1.jar
把这些包放进项目的lib目录下,同时,建议也把JSTL的核心jar包也放到lib目录,这些JSTL的包主要有:
jstl.jar
standard.jar
3, 改配置文件web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
http://java.sun.com/jstl/core_rt"
id="WebApp_ID" version="2.5">
<display-name>sspring</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
注意红色字段 是用来配置jstl的需要添加
4, 在WEB-INF下建立content目录并且新建new.jsp
5, 在src下建立com.struts目录
在该目录下建立FirstAction 类
生成的类如下
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.ActionSupport;
@Results({
@Result(name="suc",location="new.jsp",type="dispatcher"),
})
public class FirstAction extends ActionSupport {
@Override
public String execute() throws Exception{
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("list","测试");
return "suc";
}
}
//
@Results({
@Result(name="suc",location="new.jsp",type="dispatcher")
})
相当于structs.xml 下的
<action name="first" class="com.structs.FirstAction">
<result name="suc " >
/new.jsp
</result>
</action>
改new.jsp页面
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>测试</title>
</head>
<body>
${list}
</body>
</html>
6, 右击项目run as
在ie中输入http://localhost:8080/sspring/first生成页面如下:
证明stucts正常工作
Ps
1.在struts2.1.6+版本后,加入struts2-convention-plugin-2.1.6.jar以后不使用struts.xml来配置文件转向,而通过类似于注解的形式来进行转向如
@Results({
@Result(name="suc",location="new.jsp",type="dispatcher"),
@Result(name="err",location="err.jsp",type="dispatcher")
})
2.采用零配置,系统默认location="new.jsp"会找到WEB-INF/content文件下的new.jsp文件 所以需要在WEB-INF目录下新建content文件夹。具体使用说明可参见http://developer.51cto.com/art/200907/137821.htm
二,集成spring
在这里我们要做连接数据库测,除了添加spring的jar包外还要增加连接数据库的jar:
其中struts2-spring-plugin-2.1.6.jar 使用多次一直有问题 就换成了2.1.2版本。
1, 修改web-xml 添加
<context-param>
<param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext*.xml,classpath*:applicationContext*.xml</param-value>
</context-param>
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
注意要在原来<filter> <filter-name>struts2</filter-name>上添加,否则肯呢高spring的xml检测不到。
2, 添加applicationContext.xml
在WEB-INF文件夹下添加applicationContext.xml文件,如图
具体内容如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
default-lazy-init="true">
<context:annotation-config />
<!-- 扫描注解类.符合如下条件的类都将被spring初始化,扫描的目录限于base-package的定义 -->
<context:component-scan base-package="/">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
</context:component-scan>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.microsoft.jdbc.sqlserver.SQLServerDriver">
</property>
<property name="url"
value="jdbc:microsoft:sqlserver://10.57.17.142:1433;databaseName=CMCC_CRM">
</property>
<property name="username" value="sa"></property>
<property name="password" value="sa"></property>
<!-- 连接池启动时的初始值,一般两三条就够了-->
<property name="initialSize" value="2"></property>
<!-- 连接池的最大值 -->
<property name="maxActive" value="20"></property>
<!-- 最大空闲值,当经过一个高峰时间后,连接池可以慢慢将用不到的连接释放一部分,一直减少到maxIdle为止 -->
<property name="maxIdle" value="5"></property>
<!-- 最小空闲值,当空闲的连接数小于阀值时,连接池就会预申请一些连接,以免峰值到时来不及申请-->
<property name="minIdle" value="2"></property>
</bean>
</beans>
3, 由于我们是采用低配置,高注解的方式,我们没有配置struts.xml文件 我们不用把struts让spring托管。
4, 新建文件夹和相关类,如下图:
其中dao文件夹下的是具体的实现类 Idao是相关接口;service是业务类,Iservice是业务类的接口。
5, 具体实现过程
新建LoginAction
import com.opensymphony.xwork2.ActionSupport;
@Results({
@Result(name="suc",location="jsp/suc.jsp",type="dispatcher"),
@Result(name="err",location="jsp/err.jsp",type="dispatcher")
})
public class LoginAction extends ActionSupport {
@Override
public String execute() throws Exception{
HttpServletRequest request=ServletActionContext.getRequest();
System.out.println(request.getParameter("username")+"========");
request.setAttribute("list","测试");
return "suc";
}
}
新建suc.jsp err.jsp
修改new.jsp
<form action=login method="post">
<input type=text id=username name=username >
<input type=password id=pass name=pass>
<input type=submit value="提交">
</form>
对ISSDao修改,添加
boolean isUser(String username,String password);
SSDao修改
@Repository
public class SSDao extends JdbcDaoSupportimplements ISSDao {
@Autowired
public SSDao(@Qualifier("dataSource")DataSource dataSource) {
setDataSource(dataSource);
}
@Override
public boolean isUser(String username,String password){
int recordcount=0;
String sql = "select * from [user] where username='"+username+"' and password='"+password+"'";
recordcount=this.getJdbcTemplate().queryForList(sql).size();
if(recordcount>0){
return true;
}else
return false;
}
}
@Repository必须添加 被spring初始化
@Autowired
public SSDao(@Qualifier("dataSource")DataSource dataSource) {
setDataSource(dataSource);
}
这是调用spring配置的连接池
对ISSService修改
public boolean isUser(String username, String password);
对SSSerivice修改
@Service
public class SSService implements ISSService{
@Autowired
private ISSDao issDao;
public boolean isUser(String username,String password){
return issDao.isUser(username, password);
}
}
@ Service必须添加 被spring初始化
修改action
@Results({
@Result(name="suc",location="jsp/suc.jsp",type="dispatcher"),
@Result(name="err",location="jsp/err.jsp",type="dispatcher")
})
public class LoginAction extends ActionSupport {
@Autowired
private ISSService issService;
@Override
public String execute() throws Exception{
HttpServletRequest request=ServletActionContext.getRequest();
String username=request.getParameter("username").trim();
String password=request.getParameter("pass").trim();
if(issService.isUser(username, password)==true){
return "suc";
}else
return "err";
}
}
Ok,基本操作已经完成,我们测试一下是否可以运行
输入http://localhost:8080/sspring/first
输入正确用户名密码
输入不正确
测试结果证实ss构架已经可以正常运行