Spring-Struts2-基本集成
步骤:
1,导入struts2的相关jar包(检查是否有冲突的包,即同一个包有不同的几个版本存在)

2,导入struts2和spring的整合包 struts2-spring-plugin-2.3.4.jar
3,配置struts.xml文件(打开struts2的用户向导帮助可以找到如何集成spring)
<!-- 表示action由Spring创建,可以直接使用spring的依赖注入来做 -->
<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />
4, 创建Action
/**
* 此时等于用Spring创建了userAction对象,在struts.xml配置文件中写action的class的时候
* 就不能写类,而应该写userAction这个对象
*/
@Controller("userAction")
5,重新配置struts.xml基于通配符的访问方式
<!-- 基于通配符的方式 ,由于整合了Spring,在class中不用使用完整的类,而应该使用spring所注入的对象,如userAction就应该使用userAction来创建 -->
<action name="*_*" class="{1}Action" method="{2}">
<result>/WEB-INF/{1}/{2}.jsp</result>
<result name="input">/WEB-INF/jsp/{1}/{2}Input.jsp</result>
<result type="redirect" name="redirect">/${url}</result>
</action>
6, 在web.xml中配置获取BeanFactory的操作
1)创建监听器获取Spring的工厂
<!-- 1,创建Spring的监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 2, Spring的监听器通过context-param获取beans.xml的位置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:beans.xml</param-value>
</context-param>
2)配置Struts2的过滤器
<!-- 3,配置struts2的过滤器-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
7,下面是一个完整过程的代码
1)beans.xml
<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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--1, 打开Spring的annotation -->
<context:annotation-config/>
<!-- 2, 设定Spring去那些包中找annotation -->
<context:component-scan base-package="com.yangw.spring" />
<!--
使用dbcp没有成功, 加的是commons-dbcp-1.4.jar
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
-->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--创建sessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >
<!-- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" -->
<property name="dataSource" ref="dataSource"/>
<!-- 基于XML配置文件的形式
<property name="mappingResources">
<list>
<value>product.hbm.xml</value>
</list>
</property>
-->
<!-- 自动去包中找hbm文件或者设置了annotation的类-->
<property name="packagesToScan" value="com.yangw.spring.model" />
<!-- 将hibernate配置文件放到单独的配置文件中的方式-->
<!--
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
-->
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=update
hibernate.format_sql=false
</value>
</property>
</bean>
<!-- 配置Spring事务处理 -->
<!-- 1,创建事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 2, 配置AOP,Spring是通过AOP进行事务管理的-->
<aop:config>
<!-- 设置PointCut表示哪些方法要加入事务-->
<aop:pointcut id="allMethods"
expression="execution(* com.yangw.spring.dao.*.*(..))"/>
<!-- 通过advisor来确定具体加入事务控制的方法 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="allMethods"/>
</aop:config>
<!--3, 配置哪些方法要加入事务 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="count*" read-only="true" />
<tx:method name="is*" read-only="true" />
<tx:method name="has*" read-only="true" />
<!-- 所有方法都加入事务 -->
<tx:method name="*" />
</tx:attributes>
</tx:advice>
</beans>
2) struts.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.action.extension" value="action,do" />
<constant name="struts.configuration.xml.reload" value="true" />
<constant name="struts.multipart.maxSize" value="10240000" />
<constant name="struts.custom.i18n.resources" value="Message" />
<!-- 表示action由Spring创建,可以直接使用spring的依赖注入来做 -->
<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />
<package name="default" extends="struts-default">
<!-- 基于通配符的方式 -->
<action name="*_*" class="{1}Action" method="{2}">
<result>/WEB-INF/jsp/{1}/{2}.jsp</result>
<result name="input">/WEB-INF/jsp/{1}/{2}Input.jsp</result>
<result type="redirect" name="redirect">/${url}</result>
</action>
</package>
</struts>
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" id="WebApp_ID" version="2.5">
<!-- 1,创建Spring的监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 2, Spring的监听器通过context-param获取beans.xml的位置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:beans.xml</param-value>
</context-param>
<!-- 3,配置struts2的过滤器-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
4)UserAction
package com.yangw.spring.action;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.yangw.spring.model.User;
import com.yangw.spring.service.IUserService;
/**
* 此时等于用Spring创建了userAction对象,在struts.xml配置文件中写action的class的时候
* 就不能写类,而应该写userAction这个对象
* @author Administrator
*
*/
@Controller("userAction")
@Scope("prototype")
public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user;
@Resource
private IUserService userService;
public User getModel() {
if(user==null) user=new User();
return user;
}
public String list(){
ActionContext.getContext().put("userList", userService.list());
return SUCCESS;
}
}
5) IUserService 和 UserService
package com.yangw.spring.service;
import java.util.List;
import com.yangw.spring.model.User;
public interface IUserService {
public void add(User user);
public void update(User user);
public void delete(int id) ;
public User load(int id);
public List<User> list();
}
package com.yangw.spring.service;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.yangw.spring.dao.IUserDao;
import com.yangw.spring.model.User;
@Service("userService")
public class UserService implements IUserService {
@Resource
private IUserDao userDao;
public void add(User user) {
userDao.add(user);
}
public void update(User user) {
userDao.update(user);
}
public void delete(int id) {
userDao.delete(id);
}
public User load(int id) {
return userDao.load(id);
}
public List<User> list() {
String hql="from User";
return userDao.list(hql);
}
}
6) IUserDao 和 UserDao
package com.yangw.spring.dao;
import com.yangw.spring.model.User;
public interface IUserDao extends IBaseDao<User>{
//此时的IUserDao只需要写特殊的一些方法,让子类去实现
//假设下面这个是IUserDao中的特殊方法
public void add(User user,int gid);
}
package com.yangw.spring.dao;
import org.springframework.stereotype.Repository;
import com.yangw.spring.model.User;
@Repository("userDao")
public class UserDao extends BaseDao<User> implements IUserDao {
public void add(User user, int gid) {
System.out.println("cccc");
}
}
7) IBaseDao 和 BaseDao
package com.yangw.spring.dao;
import java.util.List;
/**
* IBaseDao接口是所有Dao公共的操作
* @author Administrator
* @param <T>
*/
public interface IBaseDao<T> {
public void add(T t);
public void update(T t);
public void delete(int id);
public T load(int id);
public List<T> list(String hql,Object[] args);
public List<T> list(String hql);
public List<T> list(String hql,Object arg);
}
package com.yangw.spring.dao;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
*
* 把所有公共方法都写到BaseDao,所有Dao都继承 BaseDao即可,这样就实现了大量的基础方法
* 如果Dao中有特殊的方法,再次具体的Dao中进行实现
* @author Administrator
*
* @param <T>
*/
public class BaseDao<T> extends HibernateDaoSupport implements IBaseDao<T> {
//注入SessionFactory
@Resource(name="sessionFactory")
public void setSuperSessionFactory(SessionFactory sessionFactory){
super.setSessionFactory(sessionFactory);
}
private Class<T> entityClass;
/**
* 获取T对象的Class
* @return
*/
@SuppressWarnings({ "unused", "unchecked" })
private Class<T> getEntityClass(){
if(entityClass==null){
entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
return entityClass;
}
public void add(T t) {
super.getHibernateTemplate().save(t);
}
public void update(T t) {
super.getHibernateTemplate().update(t);
}
public void delete(int id) {
//先加载对象再删除
super.getHibernateTemplate().delete(this.load(id));
}
public T load(int id) {
return super.getHibernateTemplate().get(getEntityClass(), id);
}
@SuppressWarnings("unchecked")
public List<T> list(String hql, Object[] args) {
//select * 的处理,可以利用反射来做
Query query=this.getSession().createQuery(hql);
if(args!=null){
for(int i=0;i<args.length;i++){
query.setParameter(i, args[i]);
}
}
return query.list();
}
public List<T> list(String hql) {
return this.list(hql, null);
}
public List<T> list(String hql, Object arg) {
return this.list(hql, new Object[]{arg});
}
}
8) /WEB-INF/jsp/user/list.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<s:iterator value="#userList">
---${id}-----${name}----${age}---<br/>
</s:iterator>
</body>
</html>
Spring-Struts2-基本集成的更多相关文章
- 最新版ssh hibernate spring struts2环境搭建
最新版ssh hibernate spring struts2环境搭建 最新版spring Framework下载地址:spring4.0.0RELEASE环境搭建 http://repo.sprin ...
- 手动配置三大框架整合:Spring+Struts2+mybatis
如今主流的项目框架中,数据库持久层有可能不是hibernate,而是mybatis或者ibatis,事实上它们都是一样的,以下我来把环境搭建一下: [导入相关jar包]新建web项目projectms ...
- 在spring环境下集成ActiveMQ
1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spr ...
- 【原】Spring与MongoDB集成:配置
MongoDB的API提供了DBObject接口来实现BSONObject的操作方法,BasicDBObject是具体实现.但是并没有提供DBObject与BeanObject的转换.在还没有了解到与 ...
- Spring与Hibernate集成中的Session问题
主要讨论Spring与Hibernate集成中的session问题 1.通过getSession()方法获得session进行操作 public class Test extends Hibernat ...
- spring springMVC mybatis 集成
最近闲来无事,整理了一下spring springMVC mybatis 集成,关于这个话题在园子里已经有很多人写过了,我主要是想提供一个完整的demo,涵盖crud,事物控制等. 整个demo分三个 ...
- Struts2之—集成Json插件实现Ajax
上篇博客介绍了Struts2中自己定义结果集实现Ajax,也分析了它的缺点:这样自己定义的结果集,写死了,不能做到client须要什么数据就传什么数据:Struts2之-自己定义结果集实现aja ...
- spring+struts2+ibatis 框架整合以及解析
一. spring+struts2+ibatis 框架 搭建教程 参考:http://biancheng.dnbcw.net/linux/394565.html 二.分层 1.dao: 数据访问层(增 ...
- Quartz学习——Spring和Quartz集成详解(三)
Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度.下面就对Spring集成Quartz进行简单的介绍和示例讲解!和上一节 Quar ...
- 简单Spring+Struts2+Hibernate框架搭建
使用Maven+Spring+Struts2+Hibernate整合 pom文件 <project xmlns="http://maven.apache.org/POM/4.0.0&q ...
随机推荐
- HttpServlet源码分析
1.HttpServlet的用法 提供了创建Http Servlet的抽象类,通过实现此类定义自己的Servlet 2.HttpServlet是否是线程安全 先说结论:HttpServlet不是线程安 ...
- 一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx、supervisor、mysql环境搭建
作为.neter,看到.net core 2.0的正式发布,心里是有点小激动的,迫不及待的体验了一把,发现速度确实是快了很多,其中也遇到一些小问题,所以整理了一些学习笔记: 阅读目录 环境说明 安装C ...
- fiddler mock ==> AutoResponder
背景 做过测试的同学,肯定都听过fiddler的大名,抓包工具,app抓包 下载传送门(https://www.telerik.com/download/fiddler) 抓包使用这里就不复述了,这次 ...
- Windows桌面快捷图标上的小箭头的恢复
Windows桌面快捷图标上的小箭头的恢复.. 桌面快捷图标上的小箭头的恢复: cmd /k reg add "HKEY_CLASSES_ROOT\lnkfile" /v IsSh ...
- SpringMVC的@RequestParam的解释
自SpringMVC4.2之后,RequestParam内部有4个参数: 1.String name 2.String value 3.boolean required 4.String defaul ...
- 更改pip源至国内镜像,显著提升下载速度
经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样就能解决被墙导致的装不上库的 ...
- javaSE基础之 LinkedList的底层简单实现
这里贴上LinkedList底层的简单实现 package com.yck.mylinkedlist; public class Node { private Node previous; //上一结 ...
- 又想起Solaris
想起曾几何时,学习的第一个UNIX-like操作系统.只可惜,从来都是在此操作系统上用C语言编程,而没有用过Sun公司的java. 又几何时,Sun公司慢慢不行了.再后来过了几年,Sun公司把Ultr ...
- WebStorm ES6 语法支持设置&babel使用及自动编译
一.语法支持设置 Preferences > Languages & Frameworks > JavaScript 二.Babel安装 1.全局安装 npm install -g ...
- JS面向对象编程(进阶理解)
JS 面向对象编程 如何创建JS对象 JSON语法声明对象(直接量声明对象) var obj = {}; 使用 Object 创建对象 var obj = new Object(); JS对象可以后期 ...