ssh(struts2.3.8+spring3.2+heibernate4.1+annotation零配置实例



ssh(struts2.3.8+spring3.2+heibernate4.1+annotation零配置实例讲解开发配置过程步骤,实例源码下载.

公司一直不是ssh零配置的框架,每次写action都要在applicationcontext和struts里面配置,好麻烦,最近有空,写了一个ssh零配置的框架

这里写了一个小的项目,以用户权限管理为例

先做准备工作:

1.struts2去官网下载最新版struts开发包http://struts.apache.org/download.cgi#struts216

2.hibernate4去官网下载最新版hibernate4开发包http://sourceforge.net/projects/hibernate/files/hibernate4/

3.spring3去官网下载最新版spring3开发包http://maven.springframework.org/release/org/springframework/spring/

一、先建立一个空的web的项目sshFrame,加载必须的包

1.添加struts2必备的包。我下载的是最近的struts2.3.8

asm-3.3.jar –ASM字节码库 ,使用“cglib”则必要

aopalliance-1.0.jar –这个包为AOP提供了最普通和通用的接口

commons-fileupload-1.2.2.jar –Struts2上传下载的jar

commons-io-2.0.1.jar –Struts2上传下载的jar

commons-logging-1.1.1.jar –Jakarta的通用日志记录包

freemarker-2.3.19.jar

ognl-3.0.6.jar –支持ognl表达式

struts2-core-2.3.8.jar –struts2的核心包

struts2-spring-plugin-2.3.8.jar –struts2与spring整合所需

struts2-convention-plugin-2.3.8.jar –struts2零配置注释用

xwork-core-2.3.8.jar

可以不加 struts2-config-browser-plugin-2.3.8.jar为struts协助开发需要的包:可以输入http://127.0.0.1:8686/config-browser/actionNames.action查看系统所有已经存在的action,配置不正确就可以在这里看出来;

2.添加Hibernate 所需要的包。hibernate-4.1.9.Final

把下载下来的hibernate\lib\required下的包全部拷贝进去,分别是

antlr-2.7.7.jar –语言转换工具,hibernate用他将hql语句转换为sql语句

dom4j-1.6.1.jar –解析xml文档的工具

hibernate-commons-annotations-4.0.1.Final.jar

hibernate-core-4.1.9.Final.jar –核心包

hibernate-jpa-2.0-api-1.0.1.Final.jar

javassist-3.17.1-GA.jar

jboss-logging-3.1.0.GA.jar

jboss-transaction-api_1.1_spec-1.0.0.Final.jar

还有加入hibernate\lib\optional\c3p0\c3p0-0.9.1.jar

hibernate-ehcache-4.1.9.Final.jar

ehcache-core-2.4.3.jar

slf4j-api-1.6.4.jar

slf4j-log4j12-1.6.4.jar

3添加spring3 所需要的包 spring-framework-3.2.0.RELEASE

spring-aop-3.2.0.RELEASE.jar

spring-aspects-3.2.0.RELEASE.jar

spring-beans-3.2.0.RELEASE.jar

spring-context-3.2.0.RELEASE.jar

spring-core-3.2.0.RELEASE.jar

spring-expression-3.2.0.RELEASE.jar

spring-instrument-3.2.0.RELEASE.jar

spring-jdbc-3.2.0.RELEASE.jar

spring-jms-3.2.0.RELEASE.jar

spring-orm-3.2.0.RELEASE.jar

spring-oxm-3.2.0.RELEASE.jar

spring-test-3.2.0.RELEASE.jar –测试时用

spring-tx-3.2.0.RELEASE.jar –事务处理所用

spring-web-3.2.0.RELEASE.jar

aspectjweaver-1.5.3.jar –spring所依赖的包

 

其他

asm-commons-3.3.jar

Commons—pool.jar ,commons-dbcp.jar ———-DBCP数据库连接池,Apache的jakarta组织开发 的,tomcat连接池也是dbcp(可选)

cglib.jar—————————-高效的代码生成工具, Hibernate用它在运行时扩展 Java类和实现 Java 接

jta.jar –标准的JTA API(JTA即java事物API,JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接),我暂时还没加,先备着

mysql-connector-java-5.1.18-bin.jar

log4j-1.2.16.jar

二、添加配置文件

在struts包下struts\src\apps\blank\src\main\resources提供了空白的struts.xml文件,把它复制到项目的src下

web.xml中

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
<!– spring 配置 –>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<description>Spring上下文</description>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
<!– hibernate 懒加载的问题过滤 ,可以不配置 –>
<filter>
<description>hibernate Session 过滤器</description>
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<!– struts配置 –>
<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>
<!– spring 配置 –>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<description>Spring上下文</description>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>

<!– hibernate 懒加载的问题过滤 ,可以不配置 –>
<filter>
<description>hibernate Session 过滤器</description>
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<!– struts配置 –>
<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>
struts.xml配置

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
<struts>
<!– 使用Spring –>
<constant name=”struts.objectFactory” value=”spring” />
<constant name=”struts.devMode” value=”true” />
<constant name=”struts.configuration.xml.reload” value=”true” />
<package name=”default” extends=”struts-default” namespace=”/”>
<interceptors>
<!– 使用权限拦截 –>
<interceptor name=”authority” class=”com.sshFrame.zero.interceptor.AuthorityInterceptor”/>
<!– 异常拦截 –>
<interceptor name=”exceptionInterceptor” class=”com.sshFrame.zero.interceptor.ExceptionInterceptor”/>
<!– 解决struts安全漏洞,拦截所有的带有#号的url –>
<interceptor-stack name=”baseStack”>
<interceptor-ref name=”authority”/>
<interceptor-ref name=”exceptionInterceptor”/>
<interceptor-ref name=”params”>
<param name=”excludeParams”>.*\\u0023.*</param>
</interceptor-ref>
<interceptor-ref name=”defaultStack”/>
</interceptor-stack>
</interceptors>
<!– 配置默认拦截器栈 –>
<default-interceptor-ref name=”baseStack”/>
<global-results>
<result name=”login”>/index.jsp</result>
<result name=”error”>/error.jsp</result>
</global-results>
</package>
</struts>
<struts>

<!– 使用Spring –>
<constant name=”struts.objectFactory” value=”spring” />
<constant name=”struts.devMode” value=”true” />
<constant name=”struts.configuration.xml.reload” value=”true” />

<package name=”default” extends=”struts-default” namespace=”/”>
<interceptors>
<!– 使用权限拦截 –>
<interceptor name=”authority”/>
<!– 异常拦截 –>
<interceptor name=”exceptionInterceptor”/>
<!– 解决struts安全漏洞,拦截所有的带有#号的url –>
<interceptor-stack name=”baseStack”>
<interceptor-ref name=”authority”/>
<interceptor-ref name=”exceptionInterceptor”/>
<interceptor-ref name=”params”>
<param name=”excludeParams”>.*\\u0023.*</param>
</interceptor-ref>
<interceptor-ref name=”defaultStack”/>
</interceptor-stack>
</interceptors>
<!– 配置默认拦截器栈 –>
<default-interceptor-ref name=”baseStack”/>
<global-results>
<result name=”login”>/index.jsp</result>
<result name=”error”>/error.jsp</result>
</global-results>
</package>

</struts>
applicationcontext.xml配置:

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
<?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:context=”http://www.springframework.org/schema/context”
xmlns:aop=”http://www.springframework.org/schema/aop”
xmlns:tx=”http://www.springframework.org/schema/tx”
xmlns:dwr=”http://www.directwebremoting.org/schema/spring-dwr”
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/aop

http://www.springframework.org/schema/aop/spring-aop-3.2.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-3.2.xsd”>
<bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource”>
<property name=”driverClassName” value=”com.mysql.jdbc.Driver”></property>
<property name=”url” value=”jdbc:mysql://127.0.0.1:3306/osdesignaid”></property>
<property name=”username” value=”root”></property>
<property name=”password” value=”root”></property>
</bean>
<bean id=”sessionFactory”
class=”org.springframework.orm.hibernate4.LocalSessionFactoryBean”>
<property name=”dataSource” ref=”dataSource” />
<property name=”hibernateProperties”>
<props>
<prop key=”hibernate.dialect”>org.hibernate.dialect.MySQLDialect</prop>
<prop key=”hibernate.current_session_context_class”>thread</prop>
<prop key=”hibernate.cache.region.factory_class”>org.hibernate.cache.EhCacheRegionFactory</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=”packagesToScan”>
<list>
<value>com.sshFrame.zero.pojo</value>
<value>com.sshFrame.test.pojo</value>
</list>
</property>
</bean>
<aop:aspectj-autoproxy /><!– 代理 –>
<!– 定义事务管理器 –>
<bean id=”txManager” class=”org.springframework.orm.hibernate4.HibernateTransactionManager”>
<property name=”sessionFactory” ref=”sessionFactory” />
</bean>
<!– 申明annotation 加载事务驱动 –>
<tx:annotation-driven transaction-manager=”txManager” proxy-target-class=”true”/>
<tx:advice id=”txAdvice” transaction-manager=”txManager”>
<tx:attributes>
<tx:method name=”save*” propagation=”REQUIRED” />
<tx:method name=”add*” propagation=”REQUIRED” />
<tx:method name=”create*” propagation=”REQUIRED” />
<tx:method name=”insert*” propagation=”REQUIRED” />
<tx:method name=”update*” propagation=”REQUIRED” />
<tx:method name=”merge*” propagation=”REQUIRED” />
<tx:method name=”del*” propagation=”REQUIRED” />
<tx:method name=”remove*” propagation=”REQUIRED” />
<tx:method name=”put*” propagation=”REQUIRED” />
<tx:method name=”use*” propagation=”REQUIRED”/>
<!–hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到–>
<tx:method name=”get*” propagation=”REQUIRED” read-only=”true” />
<tx:method name=”count*” propagation=”REQUIRED” read-only=”true” />
<tx:method name=”find*” propagation=”REQUIRED” read-only=”true” />
<tx:method name=”list*” propagation=”REQUIRED” read-only=”true” />
<tx:method name=”*” read-only=”true” />
</tx:attributes>
</tx:advice>
<aop:config expose-proxy=”true”>
<!– 只对业务逻辑层实施事务 –>
<aop:pointcut id=”txPointcut” expression=”execution(* cn.javass..service..*.*(..))” />
<aop:advisor advice-ref=”txAdvice” pointcut-ref=”txPointcut”/>
</aop:config>
<!– 自动扫描包 –>
<context:annotation-config />
<context:component-scan base-package=”com.sshFrame.zero.*,com.sshFrame.test.*” annotation-config=”true”/>
</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:context=”http://www.springframework.org/schema/context”
xmlns:aop=”http://www.springframework.org/schema/aop”
xmlns:tx=”http://www.springframework.org/schema/tx”
xmlns:dwr=”http://www.directwebremoting.org/schema/spring-dwr”
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/aop

http://www.springframework.org/schema/aop/spring-aop-3.2.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-3.2.xsd”>

<bean id=”dataSource”>
<property name=”driverClassName” value=”com.mysql.jdbc.Driver”></property>
<property name=”url” value=”jdbc:mysql://127.0.0.1:3306/osdesignaid”></property>
<property name=”username” value=”root”></property>
<property name=”password” value=”root”></property>
</bean>
<bean id=”sessionFactory”
class=”org.springframework.orm.hibernate4.LocalSessionFactoryBean”>
<property name=”dataSource” ref=”dataSource” />
<property name=”hibernateProperties”>
<props>
<prop key=”hibernate.dialect”>org.hibernate.dialect.MySQLDialect</prop>
<prop key=”hibernate.current_session_context_class”>thread</prop>
<prop key=”hibernate.cache.region.factory_class”>org.hibernate.cache.EhCacheRegionFactory</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=”packagesToScan”>
<list>
<value>com.sshFrame.zero.pojo</value>
<value>com.sshFrame.test.pojo</value>
</list>
</property>
</bean>
<aop:aspectj-autoproxy /><!– 代理 –>
<!– 定义事务管理器 –>
<bean id=”txManager” >
<property name=”sessionFactory” ref=”sessionFactory” />
</bean>
<!– 申明annotation 加载事务驱动 –>
<tx:annotation-driven transaction-manager=”txManager” proxy-target-class=”true”/>
<tx:advice id=”txAdvice” transaction-manager=”txManager”>
<tx:attributes>
<tx:method name=”save*” propagation=”REQUIRED” />
<tx:method name=”add*” propagation=”REQUIRED” />
<tx:method name=”create*” propagation=”REQUIRED” />
<tx:method name=”insert*” propagation=”REQUIRED” />
<tx:method name=”update*” propagation=”REQUIRED” />
<tx:method name=”merge*” propagation=”REQUIRED” />
<tx:method name=”del*” propagation=”REQUIRED” />
<tx:method name=”remove*” propagation=”REQUIRED” />
<tx:method name=”put*” propagation=”REQUIRED” />
<tx:method name=”use*” propagation=”REQUIRED”/>

<!–hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到–>
<tx:method name=”get*” propagation=”REQUIRED” read-only=”true” />
<tx:method name=”count*” propagation=”REQUIRED” read-only=”true” />

<tx:method name=”find*” propagation=”REQUIRED” read-only=”true” />
<tx:method name=”list*” propagation=”REQUIRED” read-only=”true” />

<tx:method name=”*” read-only=”true” />
</tx:attributes>
</tx:advice>
<aop:config expose-proxy=”true”>
<!– 只对业务逻辑层实施事务 –>
<aop:pointcut id=”txPointcut” expression=”execution(* cn.javass..service..*.*(..))” />
<aop:advisor advice-ref=”txAdvice” pointcut-ref=”txPointcut”/>
</aop:config>
<!– 自动扫描包 –>
<context:annotation-config />
<context:component-scan base-package=”com.sshFrame.zero.*,com.sshFrame.test.*” annotation-config=”true”/>
</beans>
三、写框架基类

改写基本的框架类了

Basedao

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
package com.sshFrame.zero.dao;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import javax.persistence.Id;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Example;
import org.springframework.beans.factory.annotation.Autowired;
/**
* 基于hibernate的BaseDao
* Spring3对Hibernate4已经没有了HibernateDaoSupport和HibernateTemplate的支持,使用了原生态的API
* @author 雪精灵
*
* @param <T>
*/
public class BaseDao<T extends Serializable> {
@Autowired
private SessionFactory sessionFactory;
//当前泛型类
@SuppressWarnings(“rawtypes”)
private Class entityClass;
//当前主键名称
private String pkname;
private final String HQL_LIST_ALL;
private final String HQL_COUNT_ALL;
@SuppressWarnings(“rawtypes”)
public Class getEntityClass() {
return entityClass;
}
@SuppressWarnings(“rawtypes”)
public void setEntityClass(Class entityClass) {
this.entityClass = entityClass;
}
@SuppressWarnings(“rawtypes”)
public BaseDao() {
//获取当前泛型类
Type type = this.getClass().getGenericSuperclass();
if (type.toString().indexOf(“BaseDao”) != -1) {
ParameterizedType type1 = (ParameterizedType) type;
Type[] types = type1.getActualTypeArguments();
setEntityClass((Class) types[0]);
}else{
type = ((Class)type).getGenericSuperclass();
ParameterizedType type1 = (ParameterizedType) type;
Type[] types = type1.getActualTypeArguments();
setEntityClass((Class) types[0]);
}
getPkname();
HQL_LIST_ALL=”from “+this.entityClass.getSimpleName()+” order by “+pkname+” desc”;
HQL_COUNT_ALL=”select count(*) from “+this.entityClass.getSimpleName();
}
/**
* 获取主键名称
* @return
*/
public String getPkname() {
Field[] fields = this.entityClass.getDeclaredFields();//反射类字段
for (Field field : fields) {
field.isAnnotationPresent(Id.class);
this.pkname=field.getName();
break;
}
return pkname;
}
/**
* 保存实例
*
* @param t
* @throws HibernateException
*/
public void save(T t) throws HibernateException{
Session session=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
session.save(t);
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
throw new HibernateException(e);
}finally{
session.close();
}
}
/**
* 修改实例
*
* @param t
* @throws HibernateException
*/
public void update(T t) throws HibernateException{
Session session=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
session.update(t);
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
throw new HibernateException(e);
}finally{
session.close();
}
}
/**
* 删除实例
*
* @param t
* @throws HibernateException
*/
public void delete(T t) throws HibernateException{
Session session=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
session.delete(t);
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
throw new HibernateException(e);
}finally{
session.close();
}
}
/**
* 获取实例
*
* @param id
* @throws HibernateException
*/
@SuppressWarnings(“unchecked”)
public T get(Serializable id) throws Exception{
Session session=null;
T t=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
t=(T) session.get(getEntityClass(), id);
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
throw new HibernateException(e);
}finally{
session.close();
}
return t;
}
/**
* 查询全部
*
* @throws HibernateException
*/
@SuppressWarnings(“unchecked”)
public List<T> findAll() throws Exception {
List<T> list=null;
Session session=null;
try {
session = sessionFactory.openSession();
session.beginTransaction();
Query query = session.createQuery(HQL_LIST_ALL);
list = query.list();
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
}finally{
session.close();
}
return list;
}
/**
* 查询总数
*
* @throws HibernateException
*/
public Integer findAllCount() throws Exception {
Session session=null;
Integer count=0;
try {
session = sessionFactory.openSession();
session.beginTransaction();
Query query = session.createQuery(HQL_COUNT_ALL);
List<?> list = query.list();
session.getTransaction().commit();
if(list!=null&&!list.isEmpty()){
count=((Integer) list.get(0)).intValue();
}
} catch (HibernateException e) {
e.printStackTrace();
}finally{
session.close();
}
return count;
}
/**
* QBC查询
*
* @param criteria
* @throws HibernateException
*/
@SuppressWarnings(“unchecked”)
public List<T> findByCriteria(Criteria criteria) throws Exception {
List<T> list=null;
Session session=null;
try {
session = sessionFactory.openSession();
session.beginTransaction();
Criteria criteria1 = session.createCriteria(getEntityClass());
criteria1=criteria;
list = criteria1.list();
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
}finally{
session.close();
}
return list;
}
/**
* QBE查询
*
* @param t
* @throws HibernateException
*/
@SuppressWarnings(“unchecked”)
public List<T> findByExample(T t) throws Exception {
List<T> list=null;
Session session=null;
Example example = Example.create(t);
try {
session = sessionFactory.openSession();
session.beginTransaction();
Criteria criteria = session.createCriteria(getEntityClass());
criteria.add(example);
list = criteria.list();
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
}finally{
session.close();
}
return list;
}
/**
* HQL查询
*
* @param hql
* @param objects
* @throws HibernateException
*/
@SuppressWarnings(“unchecked”)
public List<Object[]> findByHql(String hql,final Object…objects) throws Exception{
List<Object[]> list=null;
Session session=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
Query query = session.createQuery(hql);
for (int i = 0; i < objects.length; i++) {
query.setParameter(i, objects[i]);
}
list = query.list();
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
return list;
}
/**
* SQL查询
*
* @param hql
* @param objects
* @throws HibernateException
*/
@SuppressWarnings(“unchecked”)
public List<Object[]> findBySql(String sql,final Object…objects){
List<Object[]> list=null;
Session session=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
Query query = sessionFactory.getCurrentSession().createSQLQuery(sql);
for (int i = 0; i < objects.length; i++) {
query.setParameter(i, objects[i]);
}
list = query.list();
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
return list;
}
}
package com.sshFrame.zero.dao;


import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

import javax.persistence.Id;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Example;
import org.springframework.beans.factory.annotation.Autowired;

/**
* 基于hibernate的BaseDao
* Spring3对Hibernate4已经没有了HibernateDaoSupport和HibernateTemplate的支持,使用了原生态的API
* @author 雪精灵
*
* @param <T>
*/
public class BaseDao<T extends Serializable> {
@Autowired
private SessionFactory sessionFactory;
//当前泛型类
@SuppressWarnings(“rawtypes”)
private Class entityClass;
//当前主键名称
private String pkname;
private final String HQL_LIST_ALL;
private final String HQL_COUNT_ALL;
@SuppressWarnings(“rawtypes”)
public Class getEntityClass() {
return entityClass;
}
@SuppressWarnings(“rawtypes”)
public void setEntityClass(Class entityClass) {
this.entityClass = entityClass;
}

@SuppressWarnings(“rawtypes”)
public BaseDao() {
//获取当前泛型类
Type type = this.getClass().getGenericSuperclass();
if (type.toString().indexOf(“BaseDao”) != -1) {
ParameterizedType type1 = (ParameterizedType) type;
Type[] types = type1.getActualTypeArguments();
setEntityClass((Class) types[0]);
}else{
type = ((Class)type).getGenericSuperclass();
ParameterizedType type1 = (ParameterizedType) type;
Type[] types = type1.getActualTypeArguments();
setEntityClass((Class) types[0]);
}
getPkname();
HQL_LIST_ALL=”from “+this.entityClass.getSimpleName()+” order by “+pkname+” desc”;
HQL_COUNT_ALL=”select count(*) from “+this.entityClass.getSimpleName();
}
/**
* 获取主键名称
* @return
*/
public String getPkname() {
Field[] fields = this.entityClass.getDeclaredFields();//反射类字段
for (Field field : fields) {
field.isAnnotationPresent(Id.class);
this.pkname=field.getName();
break;
}
return pkname;
}
/**
* 保存实例
*
* @param t
* @throws HibernateException
*/
public void save(T t) throws HibernateException{
Session session=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
session.save(t);
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
throw new HibernateException(e);
}finally{
session.close();
}
}
/**
* 修改实例
*
* @param t
* @throws HibernateException
*/
public void update(T t) throws HibernateException{
Session session=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
session.update(t);
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
throw new HibernateException(e);
}finally{
session.close();
}
}

/**
* 删除实例
*
* @param t
* @throws HibernateException
*/
public void delete(T t) throws HibernateException{
Session session=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
session.delete(t);
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
throw new HibernateException(e);
}finally{
session.close();
}
}
/**
* 获取实例
*
* @param id
* @throws HibernateException
*/
@SuppressWarnings(“unchecked”)
public T get(Serializable id) throws Exception{
Session session=null;
T t=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
t=(T) session.get(getEntityClass(), id);
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
throw new HibernateException(e);
}finally{
session.close();
}
return t;
}
/**
* 查询全部
*
* @throws HibernateException
*/
@SuppressWarnings(“unchecked”)
public List<T> findAll() throws Exception {
List<T> list=null;
Session session=null;
try {
session = sessionFactory.openSession();
session.beginTransaction();
Query query = session.createQuery(HQL_LIST_ALL);
list = query.list();
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
}finally{
session.close();
}
return list;
}
/**
* 查询总数
*
* @throws HibernateException
*/
public Integer findAllCount() throws Exception {
Session session=null;
Integer count=0;
try {
session = sessionFactory.openSession();
session.beginTransaction();
Query query = session.createQuery(HQL_COUNT_ALL);
List<?> list = query.list();
session.getTransaction().commit();
if(list!=null&&!list.isEmpty()){
count=((Integer) list.get(0)).intValue();
}
} catch (HibernateException e) {
e.printStackTrace();
}finally{
session.close();
}
return count;
}
/**
* QBC查询
*
* @param criteria
* @throws HibernateException
*/
@SuppressWarnings(“unchecked”)
public List<T> findByCriteria(Criteria criteria) throws Exception {
List<T> list=null;
Session session=null;
try {
session = sessionFactory.openSession();
session.beginTransaction();
Criteria criteria1 = session.createCriteria(getEntityClass());
criteria1=criteria;
list = criteria1.list();
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
}finally{
session.close();
}
return list;
}

/**
* QBE查询
*
* @param t
* @throws HibernateException
*/
@SuppressWarnings(“unchecked”)
public List<T> findByExample(T t) throws Exception {
List<T> list=null;
Session session=null;
Example example = Example.create(t);
try {
session = sessionFactory.openSession();
session.beginTransaction();
Criteria criteria = session.createCriteria(getEntityClass());
criteria.add(example);
list = criteria.list();
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
}finally{
session.close();
}
return list;
}
/**
* HQL查询
*
* @param hql
* @param objects
* @throws HibernateException
*/
@SuppressWarnings(“unchecked”)
public List<Object[]> findByHql(String hql,final Object…objects) throws Exception{
List<Object[]> list=null;
Session session=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
Query query = session.createQuery(hql);
for (int i = 0; i < objects.length; i++) {
query.setParameter(i, objects[i]);
}
list = query.list();
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
return list;
}
/**
* SQL查询
*
* @param hql
* @param objects
* @throws HibernateException
*/
@SuppressWarnings(“unchecked”)
public List<Object[]> findBySql(String sql,final Object…objects){
List<Object[]> list=null;
Session session=null;
try {
session=sessionFactory.openSession();
session.beginTransaction();
Query query = sessionFactory.getCurrentSession().createSQLQuery(sql);
for (int i = 0; i < objects.length; i++) {
query.setParameter(i, objects[i]);
}
list = query.list();
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
return list;
}
}
BaseService

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
package com.sshFrame.zero.service;
import java.io.Serializable;
import java.util.List;
import com.sshFrame.zero.dao.BaseDao;
/**
* @author 雪精灵
*
* @param <t>
*/
public class BaseService<T extends Serializable> {
protected BaseDao<T> baseDao;
public void save(T t) throws Exception{
baseDao.save(t);
}
public void update(T t) throws Exception{
baseDao.update(t);
}
public void delete(T t) throws Exception{
baseDao.delete(t);
}
public T get(Serializable id) throws Exception{
return baseDao.get(id);
}
public List<T> findAll() throws Exception{
return baseDao.findAll();
}
public List<T> findByExample(T t) throws Exception{
return baseDao.findByExample(t);
}
public BaseDao<T> getBaseDao() {
return baseDao;
}
public void setBaseDao(BaseDao<T> baseDao) {
this.baseDao = baseDao;
}
}</t>
package com.sshFrame.zero.service;

import java.io.Serializable;
import java.util.List;

import com.sshFrame.zero.dao.BaseDao;
/**
* @author 雪精灵
*
* @param <t>
*/

public class BaseService<T extends Serializable> {

protected BaseDao<T> baseDao;

public void save(T t) throws Exception{
baseDao.save(t);
}
public void update(T t) throws Exception{
baseDao.update(t);
}
public void delete(T t) throws Exception{
baseDao.delete(t);
}
public T get(Serializable id) throws Exception{
return baseDao.get(id);
}
public List<T> findAll() throws Exception{
return baseDao.findAll();
}
public List<T> findByExample(T t) throws Exception{
return baseDao.findByExample(t);
}
public BaseDao<T> getBaseDao() {
return baseDao;
}
public void setBaseDao(BaseDao<T> baseDao) {
this.baseDao = baseDao;
}
}</t>

四、写7个pojo

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
package com.sshFrame.zero.pojo;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name=”userinfo”)
public class Userinfo implements Serializable{
private static final long serialVersionUID = 1L;
private String userid;
private String username;
private String password;
private String depid;
private String dutyid;
private Set<Userrole> userroles=new HashSet<Userrole>();
@GenericGenerator(name = “generator”, strategy = “uuid”)
@Id
@GeneratedValue(generator = “generator”)
@Column(name = “userid”, unique = true, nullable = false, length = 50)
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
@Column(name = “username”, nullable = false, length = 50)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(name = “password”, nullable = false, length = 50)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Column(name = “depid”, nullable = false, length = 50)
public String getDepid() {
return depid;
}
public void setDepid(String depid) {
this.depid = depid;
}
@Column(name = “dutyid”, nullable = false, length = 50)
public String getDutyid() {
return dutyid;
}
public void setDutyid(String dutyid) {
this.dutyid = dutyid;
}
@OneToMany(cascade=CascadeType.REMOVE,mappedBy=”userinfo”,fetch=FetchType.LAZY)
public Set<Userrole> getUserroles() {
return userroles;
}
public void setUserroles(Set<Userrole> userroles) {
this.userroles = userroles;
}
}
package com.sshFrame.zero.pojo;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name=”userinfo”)
public class Userinfo implements Serializable{
private static final long serialVersionUID = 1L;
private String userid;
private String username;
private String password;
private String depid;
private String dutyid;
private Set<Userrole> userroles=new HashSet<Userrole>();
@GenericGenerator(name = “generator”, strategy = “uuid”)
@Id
@GeneratedValue(generator = “generator”)
@Column(name = “userid”, unique = true, nullable = false, length = 50)
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
@Column(name = “username”, nullable = false, length = 50)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(name = “password”, nullable = false, length = 50)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Column(name = “depid”, nullable = false, length = 50)
public String getDepid() {
return depid;
}
public void setDepid(String depid) {
this.depid = depid;
}
@Column(name = “dutyid”, nullable = false, length = 50)
public String getDutyid() {
return dutyid;
}
public void setDutyid(String dutyid) {
this.dutyid = dutyid;
}
@OneToMany(cascade=CascadeType.REMOVE,mappedBy=”userinfo”,fetch=FetchType.LAZY)
public Set<Userrole> getUserroles() {
return userroles;
}
public void setUserroles(Set<Userrole> userroles) {
this.userroles = userroles;
}
}
[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
package com.sshFrame.zero.pojo;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name=”role”)
public class Role implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private String name;
private Set<Userrole> userroles=new HashSet<Userrole>();
private Set<Rolerights> rolerights=new HashSet<Rolerights>();
@GenericGenerator(name = “generator”, strategy = “uuid”)
@Id
@GeneratedValue(generator = “generator”)
@Column(name = “id”, unique = true, nullable = false, length = 50)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Column(name = “name”, nullable = false, length = 50)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(cascade=CascadeType.REMOVE,fetch=FetchType.LAZY,mappedBy=”role”)
public Set<Userrole> getUserroles() {
return userroles;
}
public void setUserroles(Set<Userrole> userroles) {
this.userroles = userroles;
}
@OneToMany(cascade=CascadeType.REMOVE,fetch=FetchType.LAZY,mappedBy=”role”)
public Set<Rolerights> getRolerights() {
return rolerights;
}
public void setRolerights(Set<Rolerights> rolerights) {
this.rolerights = rolerights;
}
}
package com.sshFrame.zero.pojo;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name=”role”)
public class Role implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private String name;
private Set<Userrole> userroles=new HashSet<Userrole>();
private Set<Rolerights> rolerights=new HashSet<Rolerights>();
@GenericGenerator(name = “generator”, strategy = “uuid”)
@Id
@GeneratedValue(generator = “generator”)
@Column(name = “id”, unique = true, nullable = false, length = 50)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Column(name = “name”, nullable = false, length = 50)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(cascade=CascadeType.REMOVE,fetch=FetchType.LAZY,mappedBy=”role”)
public Set<Userrole> getUserroles() {
return userroles;
}
public void setUserroles(Set<Userrole> userroles) {
this.userroles = userroles;
}
@OneToMany(cascade=CascadeType.REMOVE,fetch=FetchType.LAZY,mappedBy=”role”)
public Set<Rolerights> getRolerights() {
return rolerights;
}
public void setRolerights(Set<Rolerights> rolerights) {
this.rolerights = rolerights;
}
}

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
package com.sshFrame.zero.pojo;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name=”rights”)
public class Rights implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private String name;
private Set<Rolerights> rolerights=new HashSet<Rolerights>();
@GenericGenerator(name = “generator”, strategy = “uuid”)
@Id
@GeneratedValue(generator = “generator”)
@Column(name = “id”, unique = true, nullable = false, length = 50)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
@Column(name = “name”, nullable = false, length = 50)
public void setName(String name) {
this.name = name;
}
@OneToMany(cascade=CascadeType.REMOVE,fetch=FetchType.LAZY,mappedBy=”rights”)
public Set<Rolerights> getRolerights() {
return rolerights;
}
public void setRolerights(Set<Rolerights> rolerights) {
this.rolerights = rolerights;
}
}
package com.sshFrame.zero.pojo;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name=”rights”)
public class Rights implements Serializable{

private static final long serialVersionUID = 1L;
private String id;
private String name;
private Set<Rolerights> rolerights=new HashSet<Rolerights>();
@GenericGenerator(name = “generator”, strategy = “uuid”)
@Id
@GeneratedValue(generator = “generator”)
@Column(name = “id”, unique = true, nullable = false, length = 50)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
@Column(name = “name”, nullable = false, length = 50)
public void setName(String name) {
this.name = name;
}
@OneToMany(cascade=CascadeType.REMOVE,fetch=FetchType.LAZY,mappedBy=”rights”)
public Set<Rolerights> getRolerights() {
return rolerights;
}
public void setRolerights(Set<Rolerights> rolerights) {
this.rolerights = rolerights;
}
}

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
package com.sshFrame.zero.pojo;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name=”resources”)
public class Resources implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private String name;
private String url;
private Set<Rightsresources> rightsresourcs=new HashSet<Rightsresources>();
@GenericGenerator(name = “generator”, strategy = “uuid”)
@Id
@GeneratedValue(generator = “generator”)
@Column(name = “id”, unique = true, nullable = false, length = 50)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Column(name = “name”, nullable = false, length = 50)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = “url”, nullable = false, length = 100)
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
@OneToMany(cascade=CascadeType.REMOVE,fetch=FetchType.LAZY,mappedBy=”resources”)
public Set<Rightsresources> getRightsresourcs() {
return rightsresourcs;
}
public void setRightsresourcs(Set<Rightsresources> rightsresourcs) {
this.rightsresourcs = rightsresourcs;
}
}
package com.sshFrame.zero.pojo;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name=”resources”)
public class Resources implements Serializable{

private static final long serialVersionUID = 1L;
private String id;
private String name;
private String url;
private Set<Rightsresources> rightsresourcs=new HashSet<Rightsresources>();
@GenericGenerator(name = “generator”, strategy = “uuid”)
@Id
@GeneratedValue(generator = “generator”)
@Column(name = “id”, unique = true, nullable = false, length = 50)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Column(name = “name”, nullable = false, length = 50)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = “url”, nullable = false, length = 100)
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
@OneToMany(cascade=CascadeType.REMOVE,fetch=FetchType.LAZY,mappedBy=”resources”)
public Set<Rightsresources> getRightsresourcs() {
return rightsresourcs;
}
public void setRightsresourcs(Set<Rightsresources> rightsresourcs) {
this.rightsresourcs = rightsresourcs;
}

}

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
package com.sshFrame.zero.pojo;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name=”userrole”)
public class Userrole implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private Userinfo userinfo;
private Role role;
@GenericGenerator(name = “generator”, strategy = “uuid”)
@Id
@GeneratedValue(generator = “generator”)
@Column(name = “id”, unique = true, nullable = false, length = 50)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name=”userid”)
public Userinfo getUserinfo() {
return userinfo;
}
public void setUserinfo(Userinfo userinfo) {
this.userinfo = userinfo;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name=”roleid”)
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
}
package com.sshFrame.zero.pojo;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name=”userrole”)
public class Userrole implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private Userinfo userinfo;
private Role role;
@GenericGenerator(name = “generator”, strategy = “uuid”)
@Id
@GeneratedValue(generator = “generator”)
@Column(name = “id”, unique = true, nullable = false, length = 50)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name=”userid”)
public Userinfo getUserinfo() {
return userinfo;
}
public void setUserinfo(Userinfo userinfo) {
this.userinfo = userinfo;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name=”roleid”)
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
}

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
package com.sshFrame.zero.pojo;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name=”rolerights”)
public class Rolerights implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private Role role;
private Rights rights;
@GenericGenerator(name = “generator”, strategy = “uuid”)
@Id
@GeneratedValue(generator = “generator”)
@Column(name = “id”, unique = true, nullable = false, length = 50)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name=”roleid”)
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name=”rightsid”)
public Rights getRights() {
return rights;
}
public void setRights(Rights rights) {
this.rights = rights;
}
}
package com.sshFrame.zero.pojo;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name=”rolerights”)
public class Rolerights implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private Role role;
private Rights rights;
@GenericGenerator(name = “generator”, strategy = “uuid”)
@Id
@GeneratedValue(generator = “generator”)
@Column(name = “id”, unique = true, nullable = false, length = 50)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name=”roleid”)
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name=”rightsid”)
public Rights getRights() {
return rights;
}
public void setRights(Rights rights) {
this.rights = rights;
}
}

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
package com.sshFrame.zero.pojo;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name=”rightsresources”)
public class Rightsresources implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private Rights rights;
private Resources resources;
@GenericGenerator(name = “generator”, strategy = “uuid”)
@Id
@GeneratedValue(generator = “generator”)
@Column(name = “id”, unique = true, nullable = false, length = 50)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name=”rightsid”)
public Rights getRights() {
return rights;
}
public void setRights(Rights rights) {
this.rights = rights;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name=”resourcesid”)
public Resources getResources() {
return resources;
}
public void setResources(Resources resources) {
this.resources = resources;
}
}
package com.sshFrame.zero.pojo;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name=”rightsresources”)
public class Rightsresources implements Serializable{

private static final long serialVersionUID = 1L;
private String id;
private Rights rights;
private Resources resources;
@GenericGenerator(name = “generator”, strategy = “uuid”)
@Id
@GeneratedValue(generator = “generator”)
@Column(name = “id”, unique = true, nullable = false, length = 50)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name=”rightsid”)
public Rights getRights() {
return rights;
}
public void setRights(Rights rights) {
this.rights = rights;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name=”resourcesid”)
public Resources getResources() {
return resources;
}
public void setResources(Resources resources) {
this.resources = resources;
}

}
五、写各个Service和Action

UserinfoService 这个一定要注意,要在setUserinfoDao方法里把当前的dao给basedao,否则,basedao会报空指针

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
package com.sshFrame.zero.service.users;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.sshFrame.zero.dao.users.UserinfoDao;
import com.sshFrame.zero.pojo.Userinfo;
import com.sshFrame.zero.service.BaseService;
/**
* 用户管理
* @author 雪精灵
*
* @param <t>
*/
@Service
@Component(“userinfoService”)
public class UserinfoService extends BaseService<Userinfo>{
private UserinfoDao userinfoDao;
public UserinfoService() {
super();
}
public Userinfo findlogin(String username,String password) throws Exception{
Userinfo userinfo=new Userinfo();
userinfo.setUsername(username);
userinfo.setPassword(password);
List<Userinfo> userinfos = findByExample(userinfo);
if(userinfos!=null&&!userinfos.isEmpty()){
userinfo=userinfos.get(0);
}else{
userinfo=null;
}
return userinfo;
}
public List<?> used(String userid,String url) throws Exception {
String hql=”select ur.userinfo.userid,re.name,re.url from Userrole ur,Role r,Rolerights rr,Rights ri,Rightsresources rs,Resources re “+
“where ur.role.id=r.id and r.id=rr.role.id and rr.rights.id=ri.id and ri.id=rs.rights.id and rs.resources.id=re.id and “+
“ur.userinfo.userid=? and re.url=?”;
List<?> userResource = userinfoDao.findByHql(hql,userid,url);
return userResource;
}
public UserinfoDao getUserinfoDao() {
return userinfoDao;
}
/**
* 一定要用set方法注入,并赋值给baseDao,否则baseDao为null;
* 只适用于注入一个Dao
* @param userinfoDao
*/
@Autowired
public void setUserinfoDao(UserinfoDao userinfoDao) {
super.setBaseDao(userinfoDao);
this.userinfoDao = userinfoDao;
}
}
</t>
package com.sshFrame.zero.service.users;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import com.sshFrame.zero.dao.users.UserinfoDao;
import com.sshFrame.zero.pojo.Userinfo;
import com.sshFrame.zero.service.BaseService;
/**
* 用户管理
* @author 雪精灵
*
* @param <t>
*/

@Service
@Component(“userinfoService”)
public class UserinfoService extends BaseService<Userinfo>{
private UserinfoDao userinfoDao;
public UserinfoService() {
super();
}
public Userinfo findlogin(String username,String password) throws Exception{
Userinfo userinfo=new Userinfo();
userinfo.setUsername(username);
userinfo.setPassword(password);
List<Userinfo> userinfos = findByExample(userinfo);
if(userinfos!=null&&!userinfos.isEmpty()){
userinfo=userinfos.get(0);
}else{
userinfo=null;
}
return userinfo;
}
public List<?> used(String userid,String url) throws Exception {
String hql=”select ur.userinfo.userid,re.name,re.url from Userrole ur,Role r,Rolerights rr,Rights ri,Rightsresources rs,Resources re “+
“where ur.role.id=r.id and r.id=rr.role.id and rr.rights.id=ri.id and ri.id=rs.rights.id and rs.resources.id=re.id and “+
“ur.userinfo.userid=? and re.url=?”;
List<?> userResource = userinfoDao.findByHql(hql,userid,url);
return userResource;
}
public UserinfoDao getUserinfoDao() {
return userinfoDao;
}
/**
* 一定要用set方法注入,并赋值给baseDao,否则baseDao为null;
* 只适用于注入一个Dao
* @param userinfoDao
*/
@Autowired
public void setUserinfoDao(UserinfoDao userinfoDao) {
super.setBaseDao(userinfoDao);
this.userinfoDao = userinfoDao;
}
}
</t>
[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
package com.sshFrame.zero.action.users;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.opensymphony.xwork2.ActionSupport;
import com.sshFrame.zero.pojo.Userinfo;
import com.sshFrame.zero.service.users.UserinfoService;
/**
* @author 雪精灵
*
*
*/
@Namespace(“/”)
@Scope(“prototype”)
@Component(“userinfoAction”)
public class UserinfoAction extends ActionSupport implements ServletRequestAware,ServletResponseAware{
private static final long serialVersionUID = 1L;
private HttpServletRequest request;
private HttpServletResponse response;
@Autowired
private UserinfoService userinfoService;
@Action(value=”login”,results={
@Result(name=”success”,location=”init.jsp”),
@Result(name=”failure”,location=”/index.jsp”)
})
public String login(){
String username=request.getParameter(“username”);
String password=request.getParameter(“password”);
Userinfo userinfo=null;
try {
userinfo = userinfoService.findlogin(username, password);
} catch (Exception e) {
e.printStackTrace();
}
if(userinfo==null){
request.setAttribute(“msg”, “用户名或密码错误”);
return “failure”;
}else{
request.getSession().setAttribute(“userid”, userinfo.getUserid());
}
return “success”;
}
public boolean used(String userid,String url) {
List<?> list=null;
try {
list = userinfoService.used(userid, url);
} catch (Exception e) {
e.printStackTrace();
return false;
}
if(list!=null&&!list.isEmpty()){
return true;
}
return false;
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response=response;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
public UserinfoService getUserinfoService() {
return userinfoService;
}
public void setUserinfoService(UserinfoService userinfoService) {
this.userinfoService = userinfoService;
}
}
package com.sshFrame.zero.action.users;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import com.opensymphony.xwork2.ActionSupport;
import com.sshFrame.zero.pojo.Userinfo;
import com.sshFrame.zero.service.users.UserinfoService;
/**
* @author 雪精灵
*
*
*/
@Namespace(“/”)
@Scope(“prototype”)
@Component(“userinfoAction”)
public class UserinfoAction extends ActionSupport implements ServletRequestAware,ServletResponseAware{
private static final long serialVersionUID = 1L;
private HttpServletRequest request;
private HttpServletResponse response;
@Autowired
private UserinfoService userinfoService;
@Action(value=”login”,results={
@Result(name=”success”,location=”init.jsp”),
@Result(name=”failure”,location=”/index.jsp”)
})
public String login(){
String username=request.getParameter(“username”);
String password=request.getParameter(“password”);
Userinfo userinfo=null;
try {
userinfo = userinfoService.findlogin(username, password);
} catch (Exception e) {
e.printStackTrace();
}
if(userinfo==null){
request.setAttribute(“msg”, “用户名或密码错误”);
return “failure”;
}else{
request.getSession().setAttribute(“userid”, userinfo.getUserid());
}
return “success”;
}
public boolean used(String userid,String url) {
List<?> list=null;
try {
list = userinfoService.used(userid, url);
} catch (Exception e) {
e.printStackTrace();
return false;
}
if(list!=null&&!list.isEmpty()){
return true;
}
return false;
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response=response;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
public UserinfoService getUserinfoService() {
return userinfoService;
}
public void setUserinfoService(UserinfoService userinfoService) {
this.userinfoService = userinfoService;
}
}
[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
package com.sshFrame.zero.action.users;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import com.opensymphony.xwork2.ActionSupport;
import com.sshFrame.zero.service.users.UserinfoService;
/**
* @author 雪精灵
*
*
*/
@Namespace(“/admin”)
@ParentPackage(“default”)
@Scope(“prototype”)
public class AdminAction extends ActionSupport implements ServletRequestAware,ServletResponseAware{
private static final long serialVersionUID = 1L;
@Autowired
private UserinfoService userinfoService;
private HttpServletRequest request;
private HttpServletResponse response;
@Action(value=”init”,results={@Result(name=”success”,location=”main.jsp”),
@Result(name=”failure”,location=”/index.jsp”)})
public String init(){
String userid=(String) request.getSession().getAttribute(“userid”);
System.out.println(userid);
return SUCCESS;
}
public UserinfoService getUserinfoService() {
return userinfoService;
}
public void setUserinfoService(UserinfoService userinfoService) {
this.userinfoService = userinfoService;
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response=response;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
}
package com.sshFrame.zero.action.users;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;

import com.opensymphony.xwork2.ActionSupport;
import com.sshFrame.zero.service.users.UserinfoService;
/**
* @author 雪精灵
*
*
*/
@Namespace(“/admin”)
@ParentPackage(“default”)
@Scope(“prototype”)
public class AdminAction extends ActionSupport implements ServletRequestAware,ServletResponseAware{
private static final long serialVersionUID = 1L;
@Autowired
private UserinfoService userinfoService;
private HttpServletRequest request;
private HttpServletResponse response;
@Action(value=”init”,results={@Result(name=”success”,location=”main.jsp”),
@Result(name=”failure”,location=”/index.jsp”)})
public String init(){
String userid=(String) request.getSession().getAttribute(“userid”);
System.out.println(userid);
return SUCCESS;
}
public UserinfoService getUserinfoService() {
return userinfoService;
}
public void setUserinfoService(UserinfoService userinfoService) {
this.userinfoService = userinfoService;
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response=response;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
}
六、加入拦截器

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
package com.sshFrame.zero.interceptor;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.sshFrame.zero.action.users.UserinfoAction;
import com.sshFrame.zero.exception.AhCustomException;
import com.sshFrame.zero.exception.AhCustomException.ExcCode;
/**
* 用户权限拦截器,在struts.xml中配置
* @author 雪精灵
*/
public class AuthorityInterceptor extends AbstractInterceptor{
private static final long serialVersionUID = 2914081148619842225L;
private UserinfoAction userinfoAction;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
// String method = invocation.getProxy().getMethod();
// String actionName=invocation.getInvocationContext().getName();
String userid = (String) request.getSession().getAttribute(“userid”);
if(userid==null||”".equals(userid)){
request.setAttribute(“msg”,AhCustomException.getExcMessage(ExcCode.Unlogined));
return Action.ERROR;
}
//获取项目路径
String contextPath=request.getServletContext().getContextPath();
//获取当前路径
String uri = request.getRequestURI();
//当前相对项目的路径
String actionUrl=uri.replace(contextPath, “”);
boolean used = userinfoAction.used(userid, actionUrl);
if(used){
return invocation.invoke();
}else{
request.setAttribute(“msg”,AhCustomException.getExcMessage(ExcCode.InvalidRights));
return Action.ERROR;
}
}
public UserinfoAction getUserinfoAction() {
return userinfoAction;
}
public void setUserinfoAction(UserinfoAction userinfoAction) {
this.userinfoAction = userinfoAction;
}
}
package com.sshFrame.zero.interceptor;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.sshFrame.zero.action.users.UserinfoAction;
import com.sshFrame.zero.exception.AhCustomException;
import com.sshFrame.zero.exception.AhCustomException.ExcCode;

/**
* 用户权限拦截器,在struts.xml中配置
* @author 雪精灵
*/
public class AuthorityInterceptor extends AbstractInterceptor{

private static final long serialVersionUID = 2914081148619842225L;
private UserinfoAction userinfoAction;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
// String method = invocation.getProxy().getMethod();
// String actionName=invocation.getInvocationContext().getName();
String userid = (String) request.getSession().getAttribute(“userid”);
if(userid==null||”".equals(userid)){
request.setAttribute(“msg”,AhCustomException.getExcMessage(ExcCode.Unlogined));
return Action.ERROR;
}
//获取项目路径
String contextPath=request.getServletContext().getContextPath();
//获取当前路径
String uri = request.getRequestURI();
//当前相对项目的路径
String actionUrl=uri.replace(contextPath, “”);
boolean used = userinfoAction.used(userid, actionUrl);
if(used){
return invocation.invoke();
}else{
request.setAttribute(“msg”,AhCustomException.getExcMessage(ExcCode.InvalidRights));
return Action.ERROR;
}
}
public UserinfoAction getUserinfoAction() {
return userinfoAction;
}
public void setUserinfoAction(UserinfoAction userinfoAction) {
this.userinfoAction = userinfoAction;
}

}

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
package com.sshFrame.zero.interceptor;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.hibernate.HibernateException;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.sshFrame.zero.exception.AhCustomException;
import com.sshFrame.zero.exception.AhCustomException.ExcCode;
/**
* 错误权限拦截器,在struts.xml中配置
* @author 雪精灵
*/
public class ExceptionInterceptor extends AbstractInterceptor{
private Logger logger=Logger.getLogger(ExceptionInterceptor.class);
private static final long serialVersionUID = -3490533736557683231L;
private String excMessage=”";
@Override
public String intercept(ActionInvocation invocation) throws Exception {
String result;
HttpServletRequest request = ServletActionContext.getRequest();
String uri = request.getRequestURI();
try {
result = invocation.invoke();
} catch (HibernateException e) {
e.printStackTrace();
logger.error(“异常拦截器拦截到异常:”+”<br/>”+”uri为:”+uri+”<br/>”+e);
excMessage=AhCustomException.getExcMessage(ExcCode.DataProcessing);
request.setAttribute(“msg”, excMessage);
result=Action.ERROR;
}catch (NullPointerException e) {
e.printStackTrace();
logger.error(“异常拦截器拦截到异常:”+”<br/>”+”action的名称为:”+uri+”<br/>”+e);
excMessage=AhCustomException.getExcMessage(ExcCode.IllegalData);
request.setAttribute(“msg”, excMessage);
result=Action.ERROR;
}catch (AhCustomException e) {
e.printStackTrace();
logger.error(“异常拦截器拦截到异常:”+”<br/>”+”action的名称为:”+uri+”<br/>”+e);
excMessage=e.getExcMessage();
request.setAttribute(“msg”, excMessage);
result=Action.ERROR;
}catch (Exception e) {
e.printStackTrace();
logger.error(“异常拦截器拦截到异常:”+”<br/>”+”action的名称为:”+uri+”<br/>”+e);
excMessage=AhCustomException.getExcMessage(ExcCode.AppError);
request.setAttribute(“msg”, excMessage);
result=Action.ERROR;
}
return result;
}
}
package com.sshFrame.zero.interceptor;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.hibernate.HibernateException;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.sshFrame.zero.exception.AhCustomException;
import com.sshFrame.zero.exception.AhCustomException.ExcCode;

/**
* 错误权限拦截器,在struts.xml中配置
* @author 雪精灵
*/
public class ExceptionInterceptor extends AbstractInterceptor{
private Logger logger=Logger.getLogger(ExceptionInterceptor.class);
private static final long serialVersionUID = -3490533736557683231L;
private String excMessage=”";
@Override
public String intercept(ActionInvocation invocation) throws Exception {
String result;
HttpServletRequest request = ServletActionContext.getRequest();
String uri = request.getRequestURI();
try {
result = invocation.invoke();
} catch (HibernateException e) {
e.printStackTrace();
logger.error(“异常拦截器拦截到异常:”+”<br/>”+”uri为:”+uri+”<br/>”+e);
excMessage=AhCustomException.getExcMessage(ExcCode.DataProcessing);
request.setAttribute(“msg”, excMessage);
result=Action.ERROR;
}catch (NullPointerException e) {
e.printStackTrace();
logger.error(“异常拦截器拦截到异常:”+”<br/>”+”action的名称为:”+uri+”<br/>”+e);
excMessage=AhCustomException.getExcMessage(ExcCode.IllegalData);
request.setAttribute(“msg”, excMessage);
result=Action.ERROR;
}catch (AhCustomException e) {
e.printStackTrace();
logger.error(“异常拦截器拦截到异常:”+”<br/>”+”action的名称为:”+uri+”<br/>”+e);
excMessage=e.getExcMessage();
request.setAttribute(“msg”, excMessage);
result=Action.ERROR;
}catch (Exception e) {
e.printStackTrace();
logger.error(“异常拦截器拦截到异常:”+”<br/>”+”action的名称为:”+uri+”<br/>”+e);
excMessage=AhCustomException.getExcMessage(ExcCode.AppError);
request.setAttribute(“msg”, excMessage);
result=Action.ERROR;
}
return result;
}

}
七、自定义异常类

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
package com.sshFrame.zero.exception;
/**
* 自定义异常处理
* @author 雪精灵
*/
public class AhCustomException extends Exception{
private static final long serialVersionUID = 1L;
/**
* 错误类型标识
*/
private ExcCode excCode = null;
public enum ExcCode{
AppError,
InvalidRights,
IllegalData,
DataProcessing,
Unlogined
}
public static final String[] excMessage = {
“内部异常”,
“您没有执行本操作的权限”,
“提供的数据为空或不合法”,
“数据处理异常”,
“您可能还没有登录本系统,或者已经超时,您必须先登录本系统后才能使用该功能<p><a href=’../’ target=’_parent’>重新登录</a></p>”
};
public AhCustomException(){
super(getExcMessage(ExcCode.AppError));
excCode = ExcCode.AppError;
}
/**
* 构造函数
*
* @param arg0
* 错误类型标识
*/
public AhCustomException(ExcCode excCode) {
super(getExcMessage(excCode));
this.excCode = excCode;
}
/**
* 根据错误类型标识获取错误信息
*
* @param emFlag
* 错误类型标识
*
* @return 错误信息
*/
public static String getExcMessage(ExcCode excCode) {
return excMessage[excCode.ordinal()];
}
public String getExcMessage() {
return excMessage[excCode.ordinal()];
}
/**
* 构造函数
*
* @param arg0
* 错误类型标识
*
* @param arg1
* 被包含的异常对象
*/
public AhCustomException(ExcCode excCode, Throwable throwable) {
super(getExcMessage(excCode), throwable);
setStackTrace(throwable.getStackTrace());
this.excCode = excCode;
}
/**
* 构造函数
*
* @param arg0
* 被包含的异常对象
*/
public AhCustomException(Throwable throwable) {
super(getExcMessage(throwable.getClass() == AhCustomException.class ? ((AhCustomException) throwable).excCode : ExcCode.AppError), throwable);
setStackTrace(throwable.getStackTrace());
if (throwable.getClass() == AhCustomException.class)
excCode = ((AhCustomException) throwable).excCode;
else
excCode = excCode.AppError;
}
}
package com.sshFrame.zero.exception;
/**
* 自定义异常处理
* @author 雪精灵
*/
public class AhCustomException extends Exception{

private static final long serialVersionUID = 1L;
/**
* 错误类型标识
*/
private ExcCode excCode = null;
public enum ExcCode{
AppError,
InvalidRights,
IllegalData,
DataProcessing,
Unlogined
}
public static final String[] excMessage = {
“内部异常”,
“您没有执行本操作的权限”,
“提供的数据为空或不合法”,
“数据处理异常”,
“您可能还没有登录本系统,或者已经超时,您必须先登录本系统后才能使用该功能<p><a href=’../’ target=’_parent’>重新登录</a></p>”
};
public AhCustomException(){
super(getExcMessage(ExcCode.AppError));
excCode = ExcCode.AppError;
}

/**
* 构造函数
*
* @param arg0
* 错误类型标识
*/
public AhCustomException(ExcCode excCode) {
super(getExcMessage(excCode));
this.excCode = excCode;
}
/**
* 根据错误类型标识获取错误信息
*
* @param emFlag
* 错误类型标识
*
* @return 错误信息
*/
public static String getExcMessage(ExcCode excCode) {
return excMessage[excCode.ordinal()];
}

public String getExcMessage() {
return excMessage[excCode.ordinal()];
}
/**
* 构造函数
*
* @param arg0
* 错误类型标识
*
* @param arg1
* 被包含的异常对象
*/
public AhCustomException(ExcCode excCode, Throwable throwable) {
super(getExcMessage(excCode), throwable);
setStackTrace(throwable.getStackTrace());
this.excCode = excCode;
}
/**
* 构造函数
*
* @param arg0
* 被包含的异常对象
*/
public AhCustomException(Throwable throwable) {
super(getExcMessage(throwable.getClass() == AhCustomException.class ? ((AhCustomException) throwable).excCode : ExcCode.AppError), throwable);
setStackTrace(throwable.getStackTrace());
if (throwable.getClass() == AhCustomException.class)
excCode = ((AhCustomException) throwable).excCode;
else
excCode = excCode.AppError;
}

}
八、页面

index.jsp,在webContent下

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
<%@ page language=”java” import=”java.util.*” pageEncoding=”UTF-8″%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”;
%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<base href=”<%=basePath%>”>
<title>My JSP ‘index.jsp’ starting page</title>
<meta http-equiv=”pragma” content=”no-cache”>
<meta http-equiv=”cache-control” content=”no-cache”>
<meta http-equiv=”expires” content=”0″>
<meta http-equiv=”keywords” content=”keyword1,keyword2,keyword3″>
<meta http-equiv=”description” content=”This is my page”>
<!–
<link rel=”stylesheet” type=”text/css” href=”styles.css”>
–>
</head>
<body>
${msg }
<form action=”login” method=”post”>
<table>
<tbody>
<tr><td>用户名:</td><td><input type=”text” name=”username”/></td></tr>
<tr><td>密码:</td><td><input type=”password” name=”password”/></td></tr>
<tr><td colspan=”2″><input type=”submit” value=”Login”/></td></tr>
</tbody>
</table>
</form>
</body>
</html>
<%@ page language=”java” import=”java.util.*” pageEncoding=”UTF-8″%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”;
%>

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<base href=”<%=basePath%>”>

<title>My JSP ‘index.jsp’ starting page</title>
<meta http-equiv=”pragma” content=”no-cache”>
<meta http-equiv=”cache-control” content=”no-cache”>
<meta http-equiv=”expires” content=”0″>
<meta http-equiv=”keywords” content=”keyword1,keyword2,keyword3″>
<meta http-equiv=”description” content=”This is my page”>
<!–
<link rel=”stylesheet” type=”text/css” href=”styles.css”>
–>
</head>

<body>
${msg }
<form action=”login” method=”post”>
<table>
<tbody>
<tr><td>用户名:</td><td><input type=”text” name=”username”/></td></tr>
<tr><td>密码:</td><td><input type=”password” name=”password”/></td></tr>
<tr><td colspan=”2″><input type=”submit” value=”Login”/></td></tr>
</tbody>
</table>
</form>
</body>
</html>
init.jsp.在web-inf/content/下

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
<%@ page language=”java” import=”java.util.*” pageEncoding=”UTF-8″%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”;
%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<base href=”<%=basePath%>”>
<title>My JSP ‘init.jsp’ starting page</title>
<meta http-equiv=”pragma” content=”no-cache”>
<meta http-equiv=”cache-control” content=”no-cache”>
<meta http-equiv=”expires” content=”0″>
<meta http-equiv=”keywords” content=”keyword1,keyword2,keyword3″>
<meta http-equiv=”description” content=”This is my page”>
<!–
<link rel=”stylesheet” type=”text/css” href=”styles.css”>
–>
<script type=”text/javascript”>
window.onload=function(){
window.location.href=”admin/init”;
}
</script>
</head>
<body>
欢迎进入
</body>
</html>
<%@ page language=”java” import=”java.util.*” pageEncoding=”UTF-8″%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”;
%>

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<base href=”<%=basePath%>”>

<title>My JSP ‘init.jsp’ starting page</title>
<meta http-equiv=”pragma” content=”no-cache”>
<meta http-equiv=”cache-control” content=”no-cache”>
<meta http-equiv=”expires” content=”0″>
<meta http-equiv=”keywords” content=”keyword1,keyword2,keyword3″>
<meta http-equiv=”description” content=”This is my page”>
<!–
<link rel=”stylesheet” type=”text/css” href=”styles.css”>
–>
<script type=”text/javascript”>
window.onload=function(){
window.location.href=”admin/init”;
}
</script>
</head>
<body>
欢迎进入
</body>
</html>
程序下载链接:http://download.csdn.net/detail/doublelucklysnow/5001504

http://blog.csdn.net/doublelucklysnow/article/details/8472701