1.首先创建一个maven项目,因为我不习惯webapp目录,所以修改了该目录由WebContent代替。
2.配置pom.xml
<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>
<groupId>com.student.system</groupId>
<artifactId>ThesisManage</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>ThesisManage Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- Spring web dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-support</artifactId>
<version>2.0.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
<!-- sturts -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.24</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.3.24</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.3.24</version>
</dependency>
<!-- Mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.29</version>
</dependency>
<!-- oracle -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
<!-- Hibernate4 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.6.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>4.3.6.Final</version>
</dependency>
<dependency>
<groupId>antlr</groupId>
<artifactId>antlr</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- commons -->
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.4</version>
</dependency>
<!-- c3p0连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2.1</version>
</dependency>
<!-- logging -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<build>
<finalName>ThesisManage</finalName>
<!-- 自定义maven结构目录 -->
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
<plugins>
<!-- 定义编译版本为1.7,字符编码为utf8 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 修改webapp目录为WebContent -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<!-- 设置WebContent目录为Web目录 -->
<webappDirectory>WebContent</webappDirectory>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
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"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>ThesisManage</display-name>
<!-- 定义全局变量 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 启动tomcat时加载Spring监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--设置字符集 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 视图层打开session -->
<filter>
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<!-- 配置struts前端控制器 -->
<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>*.do</url-pattern>
</filter-mapping>
<!-- 防止Spring内存溢出 -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- session超时定义,单位为分钟 -->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
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>
<include file="struts-default.xml"> </include>
<package name="basePackage" extends="struts-default"></package>
<constant name="struts.objectFactory" value="spring"></constant>
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<constant name="struts.locale" value="zh_CN"></constant>
<constant name="struts.convention.action.suffix" value="Action"> </constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.convention.result.path" value="/WEB-INF/jsp/"> </constant>
<constant name="struts.convention.action.name.lowercase" value="true"> </constant>
<constant name="struts.convention.exclude.packages" value="org.apache.struts.*,org.apache.struts2.*,org.springframework.web.struts.*,org.springframework.web.struts2.*,org.hibernate.*"> </constant>
<constant name="struts.convention.action.mapAllMatches" value="true"> </constant>
<constant name="struts.action.extension" value="htm,do"> </constant>
<constant name="struts.convention.default.parent.package" value="default"></constant>
<constant name="struts.convention.action.disableScanning" value="false"></constant>
<constant name="struts.multipart.maxSize" value="4194304"></constant>
<constant name="struts.multipart.saveDir" value="/tmp"></constant>
<package name="default" extends="struts-default,json-default"></package>
</struts>
hibernate.properties配置
# jdbc.X
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/thesis?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=yuanshu
# config.x
config.initialPoolSize=10
config.minPoolSize=20
config.maxPoolSize=200
config.maxIdleTime=70
config.acquireIncrement=5
config.acquireRetryAttempts=5
# hibernate.X
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.use_sql_comments=false
hibernate.generate_statistics=true
hibernate.use_second_level_cache=false
hibernate.connection.release_mode=auto
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:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<!-- 引入属性文件 -->
<context:property-placeholder location="classpath:hibernate.properties" />
<!-- 开启Spring自动注解扫描 -->
<context:component-scan base-package="com.student.system.*"/>
<!-- 开启MVC注解 -->
<mvc:annotation-driven/>
<!-- 数据源配置 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass">
<value>${jdbc.driver}</value>
</property>
<property name="jdbcUrl">
<value>${jdbc.url}</value>
</property>
<property name="user">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
<property name="initialPoolSize">
<value>${config.initialPoolSize}</value>
</property>
<property name="minPoolSize">
<value>${config.minPoolSize}</value>
</property>
<property name="maxPoolSize">
<value>${config.maxPoolSize}</value>
</property>
<property name="maxIdleTime">
<value>${config.maxIdleTime}</value>
</property>
<property name="acquireRetryAttempts">
<value>${config.acquireRetryAttempts}</value>
</property>
<property name="acquireIncrement">
<value>${config.acquireIncrement}</value>
</property>
</bean>
<!-- sessionFactory 配置 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.use_sql_comments">${hibernate.use_sql_comments}</prop>
<prop key="hibernate.cache.use_second_level_cache">${hibernate.use_second_level_cache}</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
</props>
</property>
<property name="packagesToScan" value="com.student.system"/>
</bean>
<!-- jdbc配置 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 声明事物管理组件 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 开启事物注解扫描 -->
<!--
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
-->
<!-- 配置事物传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="find*" read-only="true"/>
<tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice>
<!-- 配置AOP -->
<aop:config proxy-target-class="true">
<aop:advisor advice-ref="txAdvice" pointcut="within(com.student.system.service..*)"/>
</aop:config>
</beans>
实体类
package com.student.system.entity.user;
// Generated 2015-11-1 20:46:31 by Hibernate Tools 3.4.0.CR1
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
/**
* TUser generated by hbm2java
*/
@Entity(name = "t_user")
public class TUser implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String id;
private String userName;
private String userPassword;
private Integer userAge;
private char userGender;
private String userPhone;
private String userAddress;
public TUser() {
}
public TUser(String id, String userName, String userPassword,
char userGender) {
this.id = id;
this.userName = userName;
this.userPassword = userPassword;
this.userGender = userGender;
}
public TUser(String id, String userName, String userPassword,
Integer userAge, char userGender, String userPhone,
String userAddress) {
this.id = id;
this.userName = userName;
this.userPassword = userPassword;
this.userAge = userAge;
this.userGender = userGender;
this.userPhone = userPhone;
this.userAddress = userAddress;
}
@Id
@Column(name = "id", unique = true, nullable = false, length = 32)
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
@Column(name = "user_name", nullable = false, length = 20)
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Column(name = "user_password", nullable = false, length = 20)
public String getUserPassword() {
return this.userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
@Column(name = "user_age")
public Integer getUserAge() {
return this.userAge;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
@Column(name = "user_gender", nullable = false, length = 1)
public char getUserGender() {
return this.userGender;
}
public void setUserGender(char userGender) {
this.userGender = userGender;
}
@Column(name = "user_phone", length = 11)
public String getUserPhone() {
return this.userPhone;
}
public void setUserPhone(String userPhone) {
this.userPhone = userPhone;
}
@Column(name = "user_address", length = 200)
public String getUserAddress() {
return this.userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "TUser [id=" + id + ", userName=" + userName + ", userPassword="
+ userPassword + ", userAge=" + userAge + ", userGender="
+ userGender + ", userPhone=" + userPhone + ", userAddress="
+ userAddress + "]";
}
}
dao层
/**
*
*/
package com.student.system.dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import com.student.system.entity.user.TUser;
/**
* @author a
*
*/
@Repository
public class UserDao extends HibernateDaoSupport{
@Autowired
public void setSuperSessionFactory(SessionFactory sessionFactory){
super.setSessionFactory(sessionFactory);
}
public TUser findUserById(String id){
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
TUser user = (TUser)session.get(TUser.class, id);
return user;
}
}
package com.student.system.service;
import com.student.system.entity.user.TUser;
/**
* @author a
*
*/
public interface UserService {
TUser findUserById(String id);
}
service实现类
/**
*
*/
package com.student.system.service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.student.system.dao.UserDao;
import com.student.system.entity.user.TUser;
import com.student.system.service.UserService;
/**
* @author a
*
*/
@Service
public class UserServiceImpl implements UserService{
@Resource
private UserDao userDao;
@Override
public TUser findUserById(String id) {
TUser user = userDao.findUserById(id);
return user;
}
}
测试类
package com.student.system.service;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.student.system.entity.user.TUser;
/**
* @author a
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class TestUserService{
@Resource
private UserService userService;
@Test
public void findUserById() {
TUser user = userService.findUserById("123");
System.out.println(user.toString());
}
}
action层
package com.student.system.action;
import javax.annotation.Resource;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.context.annotation.Scope;
import com.opensymphony.xwork2.ActionSupport;
import com.student.system.dto.UserDto;
import com.student.system.entity.user.TUser;
import com.student.system.service.UserService;
/**
* @author a
*
*/
@Namespace(value="/user")
@Scope("prototype")
@Action(value="userCtrl",results={
@Result(name="page",location="/WEB-INF/jsp/user/user.jsp"),
@Result(name="json",type="json",params={"root","dto.user"})
})
public class UserAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
@Resource
private UserService userService;
private UserDto dto;
/**
* @return the dto
*/
public UserDto getDto() {
return dto;
}
/**
* @param dto the dto to set
*/
public void setDto(UserDto dto) {
this.dto = dto;
}
public String toPage(){
return "page";
}
public String findUserById(){
String id = dto.getUser().getId();
TUser user = userService.findUserById(id);
dto.setUser(user);
return "json";
}
}
视图层
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
<script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-1.11.1.js"></script>
<script type="text/javascript">
$(function(){
$.ajax({
type:"post",
url:"userCtrl!findUserById.do",
data:{"dto.user.id":"123"},
dataType:"json",
success:function(data){
$("#userName").val(data.userName);
$("#userAge").val(data.userAge);
}
});
})
</script>
</head>
<body>
<form action="">
姓名:<input type="text" id="userName" name="dto.user.userName">
年龄:<input type="text" id="userAge" name="dto.user.userAge">
</form>
</body>
</html>
效果图:
至此,一个maven ssh框架就搭成了,虽然其中还有很多地方不够人性话,但我也是初次自己搭建,所以希望各位看官能留下你们宝贵的意见供我改进。
如果在这过程中有你不能理解的地方,那么可以去我的maven、struts、hibernate、spring,框架搭建这几个文件夹中查找,那里有我更深一步的理解。