struts2+spring2.6+hibernate3.4

     最近自己华了几天的时间,搭了一个ssh的架构,现在写出来。

版本:struts2.0,spring2.6,hibernate3.4

数据库:oracle

 

1web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>rachel</display-name>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/config/spring/applicationContext-persistence.xml
			/WEB-INF/config/spring/applicationContext-business.xml
		</param-value>
	</context-param>

	<context-param>
		<param-name>webAppRootKey</param-name>
		<param-value>rachel.root</param-value>
	</context-param>

	<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>/WEB-INF/config/log4j.properties</param-value>
	</context-param>
	<listener>
		<listener-class>
			org.springframework.web.context.request.RequestContextListener
		</listener-class>
	</listener>
	<listener>
		<listener-class>
			org.springframework.web.util.Log4jConfigListener
		</listener-class>
	</listener>
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.FilterDispatcher
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<filter>
		<filter-name>Encoding</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>
	</filter>

	<filter-mapping>
		<filter-name>Encoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


	<session-config>
		<session-timeout>30</session-timeout>
	</session-config>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

</web-app>

 2 jdbc.properties

jdbc.jdbcUrl=jdbc:oracle:thin:@172.16.4.37:1521:xe
jdbc.user=exchange_user
jdbc.password=exchange_user
jdbc.driverClass=oracle.jdbc.driver.OracleDriver

jdbc.initialPoolSize=5
jdbc.maxPoolSize=5

 3 log4j.properties

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file log ###
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${capaa2.3.root}/WEB-INF/log/rachel.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=info,stdout

 spring配置文件

 

<?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:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop"
		xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee"
		xmlns:tx="http://www.springframework.org/schema/tx"
		xsi:schemaLocation="
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
			http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<context:annotation-config/>
	<tx:annotation-driven transaction-manager="transactionManager"/>
	
	<context:component-scan base-package="com.mchz.common.business" />
    

			
</beans>
 
<?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:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
			http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

	<import resource="applicationContext-propertyConfigurer.xml" />

	<!-- c3p0 datasource  -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close" p:driverClass="${jdbc.driverClass}" p:jdbcUrl="${jdbc.jdbcUrl}"
		p:user="${jdbc.user}" p:password="${jdbc.password}">
		<property name="initialPoolSize" value="${jdbc.initialPoolSize}" />
		<property name="maxPoolSize" value="${jdbc.maxPoolSize}" />
	</bean>

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<!--
					<prop
					key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop>
					<prop key="hibernate.cache.use_second_level_cache">true</prop>
					<prop key="hibernate.cache.use_query_cache">true</prop> <prop
					key="hibernate.cache.use_structured_entries">true</prop> <prop
					key="hibernate.connection.release_mode">auto</prop>
				-->
			</props>
		</property>
		<property name="packagesToScan" value="com.mchz.common.domain.persistence" />
	</bean>

	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>

</beans>
 
<?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:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
			http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">


	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="ignoreResourceNotFound" value="true"/>
		<property name="locations">
			<list>
				<value>/WEB-INF/config/jdbc.properties</value>
			</list>
		</property>
	</bean>
	<!--
		bean id="propertyConfigurer"
		class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">
		<constructor-arg ref="configurationEncryptor" /> <property
		name="locations"> <list>
		<value>/WEB-INF/config/system.properties</value>
		<value>/WEB-INF/config/jdbc.properties</value> </list> </property>

		</bean
	-->

</beans>			

 struts配置文件

<?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>
	<include file="struts-default.xml" />
	<constant name="struts.enable.DynamicMethodInvocation" value="true" />
	<include file="struts-default.xml" />
	<package name="default" extends="struts-default">
		<interceptors>
			<interceptor-stack name="s2Stack">
				<interceptor-ref name="model-driven" />
				<interceptor-ref name="params" />
			</interceptor-stack>
		</interceptors>
		<action name="user_login"
			class="com.mchz.common.web.controller.LoginAction">

			<result name="input">index.jsp</result>
			<result name="sucess">sucess.jsp</result>
			<result name="error">error.jsp</result>
			<interceptor-ref name="s2Stack" />
		</action>
		
		<action name="user_reg"
			class="com.mchz.common.web.controller.LoginAction"
			method="userReg">
			<result name="input">index.jsp</result>
			<result name="sucess">sucess.jsp</result>
			<result name="error">error.jsp</result>
		</action>
	</package>
	
</struts>

 struts.properties

struts.devMode=false
struts.xml.reload=true
struts.objectFactory = spring
struts.objectFactory.spring.autoWire = type

 index.jsp

<%@ page language="java" contentType="text/html; charset=GB2312"
	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=ISO-8859-1">
<title>这是一个登录页面</title>
</head>
<body>
<table border="1" align="center" >

	<s:form validate="true" name="form1" method="post"
		action="user_login.action">
		<tr>
			<td>用户名</td>
			<td><s:textfield name="user.userName"></s:textfield></td>
		</tr>
		<tr>
			<td>密码</td>
			<td><s:password name="user.passWord"></s:password></td>
		</tr>
		<tr>
			<td>修改</td>
			<td><a
				href="<s:url action="Login_login.reg"><s:param name="##" value="123"></s:param></s:url>">
			超链接</a></td>
		</tr>
		<tr>
			<td colspan="2"><s:submit>提交</s:submit></td>

		</tr>
	</s:form>
	<hr></hr>

</table>
</body>
</html>

 struts的action

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.springframework.beans.factory.annotation.Autowired;

import com.mchz.common.dao.Page;
import com.mchz.common.business.UserDaoManager;
import com.mchz.common.util.CommonInterf;
import com.mchz.common.domain.persistence.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class LoginAction extends ActionSupport implements ModelDriven<User>,
		ServletRequestAware, CommonInterf {
	private static final long serialVersionUID = 1L;

	User user;
	@Autowired
	private UserDaoManager userDaoManager;

	private HttpServletRequest request;

	@Override
	public User getModel() {
		return user;
	}

	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}

	@SuppressWarnings("unchecked")
	@Override
	public String execute() throws Exception {
		System.out.println("这里执行的是方法一");
		List userList = this.userDaoManager.checkLogin(user.getUserName(), user
				.getPassWord());
		if (userList != null) {
			if (userList.size() == 1) {
				ActionContext.getContext().getSession().put("userObject",
						userList);
				return SUCESS;
			} else {
				return ERRORS;
			}
		}
		return ERRORS;
	}
 
public String userReg() throws Exception {

		System.out.println(user.getUserName());
		this.userDaoManager.save(user);
		return SUCESS;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	@Override
	public void validate() {

		if (user.getUserName() == null || user.getUserName().trim().equals("")) {
			this.addFieldError("username", "用户名必须输入");
		}
		if (user.getPassWord() == null || user.getPassWord().trim().equals("")) {
			this.addFieldError("password", "密码必须输入");
		}

	}
 
import java.util.List;

import com.mchz.common.dao.Page;
import com.mchz.common.domain.persistence.User;
public interface UserDaoManager {
	public List checkLogin(String username, String password);

	public void save(User user);

	public void deleteById(Integer id);

	public void update(User user);
	
	public Page queryByPage(Page page);

}
 
import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.mchz.common.business.UserDaoManager;
import com.mchz.common.dao.BaseDaoManager;
import com.mchz.common.dao.Page;
import com.mchz.common.domain.persistence.User;

@Service
@Transactional
public class UserDaoManagerImpl extends BaseDaoManager implements
		UserDaoManager {

	@SuppressWarnings("unchecked")
	@Override
	public List checkLogin(String username, String password) {
		List list = getHibernateTemplate().find(
				"from User where username=? and password=?",
				new Object[] { username, password });// 这里只是测试代码,会有sql注入问题
		return list;
	}

	@Override
	public void deleteById(Integer id) {

	}

	@Override
	public void save(User user) {
		this.getHibernateTemplate().save(user);// 数据库的默认的时间没有被加上
	}

	@Override
	public void update(User user) {

	}
 
public Page queryByPage(Page page) {

		page.setTotalCount(getTotalCount(page));
		Session session = this.getSession();
		Query qlist = session.createQuery("from User");
		qlist.setFirstResult(page.getStartNumber());
		qlist.setMaxResults(page.getEndNumber());
		List list = qlist.list();
		page.setItems(list);
		for (int i = 0; i < list.size(); i++) {
			User user = (User) list.get(0);
			System.out.println(user.getUserName());
		}
		return page;
	}

	public Integer getTotalCount(Page page) {
		Session session = this.getSession();
		Query q = session.createQuery("select count(*) from User");
		Integer totalCount = ((Number) (q.uniqueResult())).intValue();
		return totalCount;
	}

 Page.java

package com.mchz.common.dao;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class Page {

	public static final int DEFAULT_PAGE_SIZE = 10;// 默认每页大小
	private Collection<Object> items = new ArrayList<Object>();
	private int currentPage = 1;
	private int totalCount; // 总记录数
	private String orderField; // 排序字段
	private boolean ascend; // 是否升序
	private Map<Object, Object> searchParameters = new HashMap<Object, Object>();
	private int pageSize = DEFAULT_PAGE_SIZE; // 每页大小
	private boolean paged = true;
	private int totalPage;

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public Collection<Object> getItems() {
		return items;
	}

	public void setItems(Collection<Object> items) {
		this.items = items;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	// 设置当前页
	public void setCurrentPage(String currentPage) {
		int tempCurrentPage;
		if (currentPage == null || "".equals(currentPage)
				|| currentPage.equals("1")) {
			tempCurrentPage = 1;
			this.setCurrentPage(tempCurrentPage);

		} else {
			try {
				this.setCurrentPage(Integer.parseInt(currentPage));
			} catch (NumberFormatException e) {
				e.printStackTrace();
			}
		}
	}

	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int count) {
		this.totalCount = count;
	}

	public String getOrderField() {
		return orderField;
	}

	public void setOrderField(String orderField) {
		this.orderField = orderField;
	}

	public boolean isAscend() {
		return ascend;
	}

	public void setAscend(boolean ascend) {
		this.ascend = ascend;
	}

	public Map<Object, Object> getSearchParameters() {
		return searchParameters;
	}

	public void setSearchParameters(Map<Object, Object> searchParameters) {
		this.searchParameters = searchParameters;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	/*---------- 计算开始和结束位置---------------------------------*/
	public int getStartNumber() {
		return (this.currentPage - 1) * pageSize + 1;
	}

	public int getEndNumber() {
		if (this.currentPage * pageSize > this.totalCount) {
			return getStartNumber() + this.totalCount % pageSize - 1;
		} else {
			return getStartNumber() + pageSize - 1;
		}
	}

	/*--------------/trustuser/precreate.do------------------------------*/

	public int getTotalPage() {
		int totalPage = (totalCount / pageSize);
		if (totalCount % pageSize != 0) {
			totalPage++;
		}
		return totalPage;
	}

	/** --------------计算总页数------------------- */
	public int getPreviewPage() {
		if (this.currentPage == 1) {
			return this.currentPage;
		} else {
			return currentPage - 1;
		}
	}

	public int getNextPage() {
		if (this.currentPage == getTotalPage()) {
			return this.currentPage;
		} else {
			return currentPage + 1;
		}
	}

	public void addSearchParameter(Object key, Object value) {
		if (value instanceof String) {
			String stringValue = (String) value;
			value = stringValue.trim();
		}
		this.searchParameters.put(key, value);
	}

	public boolean isPaged() {
		return paged;
	}

	public void setPaged(boolean paged) {
		this.paged = paged;
	}
}
 
public class BaseDaoManager extends HibernateDaoSupport {
	
	@Autowired
	public void setMySessionFactory(SessionFactory sessionFactory) {
		setSessionFactory(sessionFactory);
	}
	
}
 
@Entity
@Table(name = "mc$exchange_user")
public class User {
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_usermanager")
	@SequenceGenerator(name = "seq_usermanager", sequenceName = "seq_usermanager")
	private Integer id;

	private String userName;

	private String passWord;

	private Integer roleId;

	private Date regTime;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	
	public Integer getRoleId() {
		return roleId;
	}

	public void setRoleId(Integer roleId) {
		this.roleId = roleId;
	}

	public Date getRegTime() {
		return regTime;
	}

	public void setRegTime(Date regTime) {
		this.regTime = regTime;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassWord() {
		return passWord;
	}

	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
 
public interface CommonInterf {
	
	public static final String ERRORS="error";
	public static final String SUCESS="sucess";
	public static final String NONE="none";
	
	public String execute()throws Exception;

}

你可能感兴趣的:(spring,AOP,log4j,Hibernate,struts)