struts2+spring+hibernate+maven搭建简单web项目

来源:互联网 发布:网络美工岗位要求 编辑:程序博客网 时间:2024/05/16 07:28

今天我们来整合struts2,spring,hibernate三大框架,来把之前的框架简单入门的知识串联起来。

一:spring整合struts2

首先我们还是建立一个ssh的maven项目
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.julyday</groupId><artifactId>ssh</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>ssh Maven Webapp</name><url>http://maven.apache.org</url><properties><commons-lang.version>2.6</commons-lang.version><slf4j.version>1.7.6</slf4j.version><spring.version>4.3.3.RELEASE</spring.version><jackson.version>2.5.4</jackson.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-framework-bom</artifactId><version>${spring.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><!-- struts2 --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.5.1</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-convention-plugin</artifactId><version>2.5.1</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-spring-plugin</artifactId><version>2.5.1</version></dependency><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId></dependency><!-- spring hibernate --><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId></dependency><!-- spring --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.0.1.Final</version></dependency><!-- mysql连接 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.34</version></dependency><!-- 数据源 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.12</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version><exclusions><exclusion><artifactId>slf4j-api</artifactId><groupId>org.slf4j</groupId></exclusion></exclusions></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency></dependencies><build><finalName>ssh</finalName></build></project>
这里说明下,之前我们的struts用的是2.3的版本,后面出了一个很大的漏洞,这次我们直接把struts的版本更新到2.5,当然2.5版本和之前有了不少的区别,这里大家注意下。
首先我们还是配置web.xml
<?xml version="1.0" encoding="utf-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0" metadata-complete="true"><display-name>ssh</display-name><!-- spring上下文 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- Struts2配置 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class><init-param><param-name>actionPackages</param-name><param-value>com.julyday.action</param-value></init-param></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>
这里我们需要注意的是struts2的filter-class,已经改成了org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter,对struts熟悉的同学会发现少了一个ng。
接着我们把domain,dao,service.action建立起来。
public class User {private int id;private String name;private String password;//getter setter}
public class UserDaoImpl implements UserDao {@Overridepublic void save(User user) {System.out.println("UserDaoImpl save...");}}
public class UserServiceImpl implements UserService {private UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic void save(User user) {userDao.save(user);System.out.println("UserServiceImpl save...");}}
public class UserAction extends ActionSupport{private UserService userService;public void setUserService(UserService userService) {this.userService = userService;}public String save(){System.out.println("UserAction save...");HttpServletRequest request = ServletActionContext.getRequest();String name = request.getParameter("name");String password = request.getParameter("password");User u = new User();u.setName(name);u.setPassword(password);userService.save(u);request.setAttribute("name", name);return SUCCESS;}}
当然有些朋友还不习惯注解方式的,这里我们先用xml方式的,后面再用注解,大家也可以看看我之前写的文章。
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:mvc="http://www.springframework.org/schema/mvc"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/mvc        http://www.springframework.org/schema/mvc/spring-mvc.xsd"><bean name="userDao" class="com.julyday.dao.impl.UserDaoImpl"></bean><bean name="userService" class="com.julyday.service.impl.UserServiceImpl"><property name="userDao" ref="userDao"/></bean> </beans>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd"><struts><package name="user" extends="struts-default" namespace="/"><action name="index"><result>/jsp/index.jsp</result></action><action name="save" method="save" class="com.julyday.action.UserAction"><result>/jsp/success.jsp</result></action></package></struts>
当然我们也可以把action的创建交给spring
<!-- spring默认单例,而struts2默认一个action请求一个实例的 --><bean name="userAction" class="com.julyday.action.UserAction" scope="prototype"><property name="userService" ref="userService"/></bean>
<!-- action创建交给spring来创建 --><package name="user" extends="struts-default" namespace="/"><action name="index"><result>/jsp/index.jsp</result></action><action name="save" method="save" class="userAction"><result>/jsp/success.jsp</result></action></package>
ok,下面我们再用注解实现一遍。

@Repository("userDao2")public class UserDaoImpl2 implements UserDao {@Autowiredpublic void setSessionFactoryOverride(SessionFactory sessionFactory){super.setSessionFactory(sessionFactory);}@Overridepublic void save(User user) {System.out.println("UserDaoImpl2 save...");}}
@Service("userService2")public class UserServiceImpl2 implements UserService {@Autowiredprivate UserDao userDao2;@Overridepublic void save(User user) {userDao2.save(user);System.out.println("UserServiceImpl2 save...");}}
@Namespace("/user")@ParentPackage("struts-default") public class UserAction2 extends ActionSupport{@Autowiredprivate UserService userService2;@Action(value = "index", results = {@Result(name = "success", location = "/jsp/user/index.jsp")})public String index(){return SUCCESS;}@Action(value = "save", results = {@Result(name = "success", location = "/jsp/user/success.jsp")})public String save(){System.out.println("UserAction2 save...");HttpServletRequest request = ServletActionContext.getRequest();String name = request.getParameter("name");String password = request.getParameter("password");User u = new User();u.setName(name);u.setPassword(password);userService2.save(u);request.setAttribute("name", name);return SUCCESS;}}
struts.properties;
struts.objectFactory = spring#让struts2关闭动态方法调用struts.enable.DynamicMethodInvocation=true#所有匹配*.action,*.do的请求都由struts2处理#struts.action.extension=do,action#所有匹配的请求都由struts2处理#除了/ 和 /index.jspstruts.action.extension=struts.action.excludePattern=/,/index.jsp#是否启用开发模式 struts.devMode=false#设置浏览器是否缓存静态内容 struts.serve.static.browserCache=false#请求参数的编码方式 struts.i18n.encoding=utf-8#每次HTTP请求系统都重新加载资源文件,有助于开发 struts.i18n.reload=true# 文件上传最大值10m struts.multipart.maxSize=104857600#Action名称中是否还是用斜线 struts.enable.SlashesInActionNames=false#允许标签中使用表达式语法 struts.tag.altSyntax=true#对于WebLogic,Orion,OC4J此属性应该设置成true struts.dispatcher.parametersWorkaround=false
applicationContext.xml增加:
<!-- 自动扫描 -->  <context:component-scan base-package="com.julyday"/>
spring整合struts2就ok了。

二:spring整合hibernate

整合Hibernate就需要数据库。
jdbc.properties:
#mysql version database druid settingvalidationQuery=SELECT 1jdbc.url=jdbc:mysql://localhost:3306/ssh?useUnicode=true&characterEncoding=utf-8jdbc.username=rootjdbc.password=root
我们这里使用的数据源是阿里巴巴的Druid,他是可以更具你的数据库url自动找到相应的driverClass的。
<!-- 引入jdbc文件 --><context:property-placeholder location="classpath:jdbc.properties"/><!-- 配置数据源 使用的是Druid数据源 --><bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"init-method="init" destroy-method="close"><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><!-- 初始化连接大小 --><property name="initialSize" value="0" /><!-- 连接池最大使用连接数量 --><property name="maxActive" value="20" /><!-- 连接池最小空闲 --><property name="minIdle" value="0" /><!-- 获取连接最大等待时间 --><property name="maxWait" value="60000" /><property name="poolPreparedStatements" value="true" /><property name="maxPoolPreparedStatementPerConnectionSize"value="33" /><!-- 用来检测有效sql --><property name="validationQuery" value="${validationQuery}" /><property name="testOnBorrow" value="false" /><property name="testOnReturn" value="false" /><property name="testWhileIdle" value="true" /><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="60000" /><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name="minEvictableIdleTimeMillis" value="25200000" /><!-- 打开removeAbandoned功能 --><property name="removeAbandoned" value="true" /><!-- 1800秒,也就是30分钟 --><property name="removeAbandonedTimeout" value="1800" /><!-- 关闭abanded连接时输出错误日志 --><property name="logAbandoned" value="true" /><!-- 监控数据库 --><property name="filters" value="mergeStat" /></bean><!-- myBatis文件 --><bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!-- hibernate属性 --><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">true</prop><prop key="hibernate.hbm2ddl.auto">update</prop></props></property><!-- 映射文件 --><property name="mappingResources"><list><value>com/julyday/domain/user.hbm.xml</value></list></property><!--自动扫描实体 -->            <property name="packagesToScan"  value="com.julyday.domain" /><!-- hibernate.cfg.xml 也是可以的 --><!--  <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>--></bean>  <!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 注解方式配置事物 --><tx:annotation-driven transaction-manager="transactionManager" />
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {@Overridepublic void save(User user) {System.out.println("UserDaoImpl save...");getHibernateTemplate().save(user);}}
@Repository("userDao2")public class UserDaoImpl2 extends HibernateDaoSupport implements UserDao {@Autowiredpublic void setSessionFactoryOverride(SessionFactory sessionFactory){super.setSessionFactory(sessionFactory);}@Overridepublic void save(User user) {System.out.println("UserDaoImpl2 save...");getHibernateTemplate().save(user);}}
我们在dao层都是去继承HibernateDaoSupport,这样我们可以使用getHibernateTemplate()。
@Transactionalpublic class UserServiceImpl implements UserService {private UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic void save(User user) {userDao.save(user);System.out.println("UserServiceImpl save...");}}
<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%> <%@ taglib uri="/struts-tags"  prefix="s"%><!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>index.jsp</title></head><body><s:form action="save" method="post" namespace="/user"><div style="margin-left: 300px;margin-top: 200px"><s:textfield name="name" label="姓名:"></s:textfield><s:password name="password" label="密码:"></s:password><s:submit value="登录"></s:submit></div></s:form></body></html>
<%@ 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>success.jsp</title></head><body>欢迎您:${name}<br><br/></body></html>
这时候我们就整合完成了。
我们也可以使用Hibernate的注解:
package com.julyday.domain;import java.io.Serializable;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;@Entity@Table(name="admin")@SuppressWarnings("serial")public class Admin implements Serializable{private int id;private String name;private String password;@Id@GeneratedValue(strategy=GenerationType.IDENTITY)public int getId() {return id;}public void setId(int id) {this.id = id;}@Column(name="name",length = 20)public String getName() {return name;}public void setName(String name) {this.name = name;}@Column(name="password",length = 16)public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
最后我们还是放上全部的代码:代码下载


0 0
原创粉丝点击