这两天都是一直在鼓捣Struts2.3如何整合Spring3.2以及dao层到底选用什么以及如何整合。下面就把自己这两天的一些小成果分享出来也以便自己以后在实际项目中快速搭建。
首先是Struts2.3整合Spring3.2
1、新建一个web工程(这个就不说了)
2、添加Struts2.3
把Struts开发所需的jar复制到工程的lib文件中。开发struts必须包如下:
3、创建action类
声明:整个示例只有一个简单的用户登录。
本例中的action类名为 LoginAction,该类中的代码如下:
package com.riyun.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private String userName;
private String passWord;
public String getUserName() {
return userName;
}
public String getPassWord() {
return passWord;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String execute() throws Exception{
if(userName.equals("riyun")&&passWord.equals("123")){
return SUCCESS;
}else{
return ERROR;
}
}
}
至于该类为什么继承ActionSupport,相信网上讲述Struts1.X与Struts2.X的文章已经很多了,这里就不罗嗦了。
4、修改项目中的index.jsp代码,修改后的index.jsp代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
My JSP 'index.jsp' starting page
新建两个success.jsp、error.jsp页面。后面action处理结果跳转有用,如果登陆成功则跳转到success.jsp,反之则跳转到error.jsp!
5、 新建一个以struts.xml为名的xml文件
文件中的代码如下:
/success.jsp
/error.jsp
6、在web.xml中添加struts拦截器。
Web.xml的代码如下:
struts2
org.apache.struts2.dispatcher.FilterDispatcher
struts2
/*
index.jsp
至此Struts2.3整合成功,接下来继续整合Spring3.2。
7、导入所需spring的jar包如下;
对于Spring的jar包没有研究过,所以我这里把spring所有的jar都复制到了lib目录中去了。另外还需要导入struts2-spring-plugin-2.3.4.1.jar包。
8、在web-inf目录中新建一个applicationContext.xml为名的xml文件(该文件与web.xml是在同一级目录)
该applicationContext.xml文件中的代码如下:
9、修改struts.xml文件,修改后的struts.xml文件中的代码如下
/success.jsp
/error.jsp
10、修改web.xml文件,修改后的web.xml文件中的代码如下:
contextConfigLocation
/WEB-INF/applicationContext.xml
org.springframework.web.context.ContextLoaderListener
struts2
org.apache.struts2.dispatcher.FilterDispatcher
struts2
/*
index.jsp
ok,到此为此Struts2.3整合Spring3.2就可以了。那实际项目中不可能不跟数据库打交道。常见的dao层用的是hibernate。但其实还有一些跟hibernate功能相似而且相对于hibernate来说配置更简单的dao层应用可以供我们选择。这里我就选用了JDBC。利用JDBC作为dao层的应用,每个dao层都要继承JDBCSupport类。
11、添加dao层,添加UserDao接口、添加UserDaoImpl实现接口类
UserDao接口的代码如下:
package com.riyun.dao;
public interface UserDao {
/*用户登录
* pram:userName,passWord
* return:boolean
*/
public boolean login(String userName,String passWord);
}
UserDaoImpl实现接口类的代码如下:
package com.riyun.daoImpl;
import java.util.Map;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import com.riyun.dao.UserDao;
public class UserDaoImpl extends JdbcDaoSupport implements UserDao{
//用户登录
public boolean login(String userName, String passWord) {
// TODO Auto-generated method stub
String sql="select job,ename from emp where ename=?";
Map map=this.getJdbcTemplate().queryForMap(sql, new Object[] {userName});
try{
String pass=(String) map.get("job");
if(passWord.equals(pass)){
return true;
}else{
return false;
}
}catch(EmptyResultDataAccessException e){
e.printStackTrace();
return false;
}
}
}
12、修改LoginAction类的代码,修改后的代码如下:
package com.riyun.action;
import org.apache.log4j.Logger;
import com.opensymphony.xwork2.ActionSupport;
import com.riyun.dao.UserDao;
public class LoginAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private UserDao userDao;
private String userName;
private String passWord;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public String getUserName() {
return userName;
}
public String getPassWord() {
return passWord;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String execute() throws Exception{
if(userDao.login(userName, passWord)){
return SUCCESS;
}else{
return ERROR;
}
}
}
13、修改applicationContext.xml文件,修改后的文件代码如下:
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@localhost:1521:orcl
scott
123
PROPAGATION_REQUIRED,-DataAccessException
PROPAGATION_REQUIRED,-DataAccessException
PROPAGATION_REQUIRED,-DataAccessException
PROPAGATION_REQUIRED,-DataAccessException
PROPAGATION_REQUIRED,-DataAccessException
PROPAGATION_REQUIRED,-DataAccessException
PROPAGATION_REQUIRED,-DataAccessException
PROPAGATION_REQUIRED,readOnly
PROPAGATION_REQUIRED,readOnly,-DataAccessException
PROPAGATION_REQUIRED,readOnly
PROPAGATION_REQUIRED,readOnly
至此整个例子ok了。
在dao层连接数据库的时候还需要导入各个数据库所必须的jar包以及c3p0-0.9.1.2.jar这样的包。
总结:整合过程中 碰到许许多多的问题,相信大家看我这篇文章也会碰到许许多多不一样的问题,但是有问题不可怕,我们要做的就是分析问题的原因。我在整合过程碰到最多的问题就是classnotfound类的问题,其实这类的问题就是没有导入相关jar包导致的错误或者jar冲突导致的。