一、 引入pom 依赖节点 :
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.struts</groupId> <artifactId>struts2-parent</artifactId> <version>2.3.4.1</version> </parent> <groupId>org.apache.struts.xwork</groupId> <artifactId>xwork-core</artifactId> <packaging>jar</packaging> <name>XWork: Core</name> <scm> <connection>scm:svn:http://svn.apache.org/repos/asf/struts/struts2/tags/STRUTS_2_3_4_1/xwork-core</connection> <developerConnection>scm:svn:https://svn.apache.org/repos/asf/struts/struts2/tags/STRUTS_2_3_4_1/xwork-core</developerConnection> <url>http://svn.apache.org/repos/asf/struts/struts2/tags/STRUTS_2_3_4_1/xwork-core</url> </scm> <properties> <currentVersion>${project.version}</currentVersion> </properties> <profiles> <profile> <!-- Run the translator for Java 1.4 compatiblity OS/X Sample: $ cd xwork/ $ mvn clean install -Pj4 -Djava14.jar=$JAVA_HOME/../Classes/classes.jar --> <id>j4</id> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>retrotranslator-maven-plugin</artifactId> <version>1.0-alpha-4</version> <executions> <execution> <phase>package</phase> <goals> <goal>translate-project</goal> </goals> <configuration> <verify>false</verify> <failonwarning>true</failonwarning> <lazy>true</lazy> <advanced>true</advanced> <verbose>false</verbose> </configuration> </execution> </executions> </plugin> </plugins> </build> <!-- <dependencies> <dependency> <groupId>sun.jdk</groupId> <artifactId>rt</artifactId> <version>1.4.0</version> <scope>system</scope> <systemPath>${java14.jar}</systemPath> </dependency> <dependency> <groupId>net.sf.retrotranslator</groupId> <artifactId>retrotranslator-runtime</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>net.sf.retrotranslator</groupId> <artifactId>retrotranslator-transformer</artifactId> <version>1.2.1</version> </dependency> </dependencies> --> </profile> </profiles> <build> <sourceDirectory>${basedir}/src/main/java</sourceDirectory> <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory> <resources> <resource> <directory>${basedir}/src/main/resources</directory> </resource> </resources> <testResources> <testResource> <directory>${basedir}/src/test/resources</directory> </testResource> </testResources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.6</version> <configuration> <properties> <property> <name>maven.testng.output.dir</name> <value>${project.basedir}/target/surefire-reports</value> </property> </properties> <useSystemClassLoader>false</useSystemClassLoader> <additionalClasspathElements> <element>${project.build.testOutputDirectory}/xwork-jar.jar</element> <element>${project.build.testOutputDirectory}/xwork-zip.zip</element> <element>${project.build.testOutputDirectory}/xwork - jar.jar</element> <element>${project.build.testOutputDirectory}/xwork - zip.zip</element> </additionalClasspathElements> <includes> <include>**/*Test.java</include> </includes> <excludes> <exclude>**/XWorkTestCase.java</exclude> <exclude>**/TestBean.java</exclude> <exclude>**/TestBean2.java</exclude> <exclude>**/TestInterceptor.java</exclude> <exclude>**/AnnotatedTestBean.java</exclude> <exclude>**/ContainerImplTest.java</exclude> <exclude>**/URLUtilTest.java</exclude> </excludes> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>2.4</version> <executions> <execution> <goals> <goal>clean</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <configuration> <instructions> <Export-Package>com.opensymphony.xwork2.*</Export-Package> </instructions> </configuration> <executions> <execution> <id>bundle-manifest</id> <phase>process-classes</phase> <goals> <goal>manifest</goal> </goals> </execution> </executions> </plugin> </plugins> <defaultGoal>install</defaultGoal> </build> <dependencies> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>ognl</groupId> <artifactId>ognl</artifactId> </dependency> <dependency> <groupId>asm</groupId> <artifactId>asm</artifactId> </dependency> <dependency> <groupId>asm</groupId> <artifactId>asm-commons</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib-nodep</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <optional>true</optional> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>mockobjects</groupId> <artifactId>mockobjects-core</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.easymock</groupId> <artifactId>easymock</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
二 、 在web.xml中 添加 核心过滤器 以及 监听器 :
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <!--有点东西--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <filter> <filter-name>struts</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--1.监听器--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
三 、 构建 分层 : 1. 首先创建 dao 层 (这里只做添加操作)
package cn.happy.dao; import cn.happy.bean.Dept; /** * Created by Happy on 2017-10-11. */ public interface IDeptDAO { // 添加部门方法 public void addDept(Dept dept); }
其次 ,dao层 实现类:
package cn.happy.dao; import cn.happy.bean.Dept; import org.hibernate.Session; import org.hibernate.SessionFactory; /** * */ public class DeptDAOImpl implements IDeptDAO { private SessionFactory sessionFactory; public void addDept(Dept dept) { Session session = sessionFactory.getCurrentSession(); session.save(dept); } public SessionFactory getSessionFactory() { return sessionFactory; } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } }
2. 接下来是实体层 bean 以及关联配置文件 :
package cn.happy.bean; /** * */ public class Dept { private Integer deptno; private String deptname; public Integer getDeptno() { return deptno; } public void setDeptno(Integer deptno) { this.deptno = deptno; } public String getDeptname() { return deptname; } public void setDeptname(String deptname) { this.deptname = deptname; } }
配置文件 :
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.happy.bean"> <class name="Dept" table="Dept" schema="huohuo01"> <id name="deptno" column="deptno"> <generator class="native"></generator> </id> <property name="deptname" /> </class> </hibernate-mapping>
3. service 层 以及实现类 :
package cn.happy.service; import cn.happy.bean.Dept; /** * */ public interface IDeptService { public void addDept(Dept dept); }
实现类:
package cn.happy.service; import cn.happy.bean.Dept; import cn.happy.dao.IDeptDAO; import org.springframework.transaction.annotation.Transactional; /** * */ public class DeptServiceImpl implements IDeptService { private IDeptDAO dao; @Transactional public void addDept(Dept dept) { dao.addDept(dept); } public IDeptDAO getDao() { return dao; } public void setDao(IDeptDAO dao) { this.dao = dao; } }
4 . 搭建主要的action 层 :
package cn.happy.action; import cn.happy.bean.Dept; import cn.happy.service.IDeptService; import com.opensymphony.xwork2.ActionSupport; /** * Created by lenovo on 2017/10/29. */ public class DeptAction extends ActionSupport { private Dept dept; private IDeptService service; public String add() { System.out.println(dept); service.addDept(dept); return SUCCESS; } public Dept getDept() { return dept; } public void setDept(Dept dept) { this.dept = dept; } public IDeptService getService() { return service; } public void setService(IDeptService service) { this.service = service; } }
四 、 jsp 页面的大致 布局 :
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>添加部门</title> </head> <body> <form method="post" action="/add"> 部门名称: <input name="dept.deptname"/> <input type="submit" value="添加"/> </form> </body> </html>
-------------
<%@page language="java" pageEncoding="utf-8" isELIgnored="false" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <body> <h2>Add ok!</h2> </body> </html>
五 、 编写applicationContext.xml 配置文件 :
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.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.配置数据源c3p0--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driverClassName}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="jdbcUrl" value="${jdbc.url}"/> </bean> <!--jdbc.properties--> <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder> <!--2.SessionFactory 类:Local--> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="hibernateProperties"> <props> <!--hibernate.xxxxxx必须以hibernate--> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.dialect"> org.hibernate.dialect.Oracle10gDialect</prop> <!--with current thread bind session和线程绑定的session--> <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext</prop> </props> </property> <!--扫描小配置文件 所有的hbm文件--> <property name="mappingDirectoryLocations" value="classpath:cn/happy/bean"></property> </bean> <!--3.dao--> <bean id="deptDAO" class="cn.happy.dao.DeptDAOImpl"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!--4.service--> <bean id="deptService" class="cn.happy.service.DeptServiceImpl"> <property name="dao" ref="deptDAO"></property> </bean> <!--要用Spring去创建Action对象 Struts2的Action是多例的--> <bean id="deptAction" class="cn.happy.action.DeptAction" scope="prototype"> <property name="service" ref="deptService"></property> </bean> <!-- 6.事务管理器--> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!--7.事务--> <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven> <!-- <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" isolation="DEFAULT" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <aop:config> <!–配置了切点Pointcut–> <aop:pointcut id="mypoint" expression="execution(* *..service.*.*(..))"/> <!– 顾问–> <aop:advisor advice-ref="txAdvice" pointcut-ref="mypoint"></aop:advisor> </aop:config>--> </beans>
六 、 struts.xml :
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.devMode" value="true"></constant> <!--将对象工厂的生成权设置成spring--> <!-- <constant name="struts.objectFactory" value="spring"></constant>--> <package name="default" namespace="/" extends="struts-default"> <action name="add" class="deptAction" method="add"> <result>/jsp/index.jsp</result> </action> </package> </struts>
--------------------------------- 全剧终 、