javaee之SSH项目

通过学习SSH的框架,便做了一个小项目,是一个简单的CRM项目,包括的功能主要有用户的crud和部门的crud
在部门中又有对用户的多对一的关联关系,还包括了一个系统日志的功能,即为当哪个用户做了什么功能都能够在系统日志中
显示出来。


这次的项目也还是分为3层架构去实现,DAO层、SERVICE层、ACTION层
大致的分包情况:



首先是SSH的配置文件:
Struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
	
<struts>
	<!-- 配置为开发模式 -->
    <constant name="struts.devMode" value="true" />
    <constant name="struts.ui.theme" value="simple"></constant>
    
	<package name="default" namespace="/" extends="struts-default">
	
		<!-- 拦截器 -->
		<interceptors>
			<interceptor name="myinterceptor" class="gz.itcast.crm.inter.Interecptor">
				<param name="excludeMethods">login</param>
			</interceptor>
			<interceptor-stack name="mystack">
				<interceptor-ref name="myinterceptor"></interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
	
		<!-- 配置全局的拦截器 -->
		<default-interceptor-ref name="mystack"></default-interceptor-ref>
	
	
		<!-- 系统主页 -->
		<action name="main_*" class="mainAction" method="{1}">
			<result>/WEB-INF/views/main.jsp</result>
			<result name="{1}">/WEB-INF/views/{1}.jsp</result>
			<result name="input">/WEB-INF/login.jsp</result>
		</action>
	
		<!-- 用户模块 -->
		<action name="user_*" class="userAction" method="{1}">
			<result>/WEB-INF/views/user/list.jsp</result>
			<result name="input">/WEB-INF/views/user/input.jsp</result>
			<result name="save" type="chain">user_pageList</result>
		</action>
		
		<!-- 部门模块 -->
		<action name="dept_*" class="deptAction" method="{1}">
			<result>/WEB-INF/views/dept/list.jsp</result>
			<result name="input">/WEB-INF/views/dept/input.jsp</result>
			<result name="save" type="redirectAction">dept_pageList</result>
		</action>
		
		<!-- 系统模块 -->
		<action name="system_*" class="systemLogAction" method="{1}">
			<result>/WEB-INF/views/sys/list.jsp</result>
		</action>
		
	</package>
</struts>


hibernate.cfg.xml:

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
	
<hibernate-configuration>
<session-factory>
	<!-- hibernate对数据库的连接参数,注册的驱动,url,用户名和密码 
		
		<property name="hibernate.connection.driver_class">
		com.mysql.jdbc.Driver
		</property>
		<property name="hibernate.connection.url">
		jdbc:mysql://localhost:3306/shopsys
		</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">123</property>
		
		hibernate对不同的数据库用不同的数据库的方言,hibernate能够为各个数据库进行一个orm映射
		主要是因为拥有了不同的数据库方言支持
	-->
	<property name="hibernate.dialect">
		org.hibernate.dialect.MySQL5InnoDBDialect
	</property>


	<!-- hibernate的其他配置 -->
	<property name="hibernate.show_sql">true</property>
	<property name="hibernate.format_sql">true</property>
	<property name="hibernate.hbm2ddl.auto">update</property>




	<!-- hibernate中对实体映射文件的加载,需要在hibernate中使用映射就要把映射文件加上 -->
	<mapping resource="gz/itcast/crm/entity/User.hbm.xml" />
	<mapping resource="gz/itcast/crm/entity/Admins.hbm.xml" />
	<mapping resource="gz/itcast/crm/entity/Dept.hbm.xml" />
	<mapping resource="gz/itcast/crm/entity/SystemLog.hbm.xml" />




</session-factory>


</hibernate-configuration>

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop.xsd
        ">
        
        <!-- 导入数据库的properties文件 -->
        <context:property-placeholder location="classpath:db.properties"/>
        
	<!-- 配置数据库连接池 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="jdbcUrl" value="${c3p0jdbcurl}"></property>
		<property name="driverClass" value="${c3p0driver}"></property>
		<property name="user" value="${c3p0user}"></property>
		<property name="password" value="${c3p0password}"></property>
		<property name="initialPoolSize" value="${c3p0minpool}"></property>
		<property name="maxPoolSize" value="${c3p0maxpool}"></property>
	</bean>
	
	<!-- 配置sessionFactory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
	</bean>


	<!-- 配置HibernateTemplate -->
	<bean id="htID" class="org.springframework.orm.hibernate4.HibernateTemplate">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	
	<!-- 事务管理的配置 -->
	<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	
	<!-- 采用切面来定义事务 -->
	<tx:advice id="txID" transaction-manager="txManager">
		<tx:attributes>
			<tx:method name="save*" propagation="REQUIRED"/>
			<tx:method name="update*" propagation="REQUIRED"/>
			<tx:method name="delete*" propagation="REQUIRED"/>
			<tx:method name="query*" read-only="true" propagation="SUPPORTS"/>
			<tx:method name="get*" read-only="true"  propagation="SUPPORTS"/>
			<tx:method name="load*" read-only="true" propagation="SUPPORTS"/>
			<tx:method name="find*" read-only="true" propagation="SUPPORTS"/>
		</tx:attributes>
	</tx:advice>
	
	
	<!-- 事务的切面 -->
	<aop:config>
		<aop:pointcut expression="execution(* gz.itcast.crm.service.impl.*.*(..))" id="txpt"/>
		<aop:advisor advice-ref="txID" pointcut-ref="txpt"/>
	</aop:config>
	
	
	
	
	<!-- 加入其它applicationContext.xml的配置文件 -->
	<import resource="classpath:applicationContext-*.xml"/>
	
	<bean id="systemlog" class="gz.itcast.crm.util.SystemLogUtil">
		<property name="systemLogService" ref="systemLogService"></property>
	</bean>
	
	<aop:config>
		<aop:aspect ref="systemlog">
			<aop:pointcut expression="execution(* gz.itcast.crm.service.impl.*.*(..))" id="syspt"/>
			<aop:before method="log" pointcut-ref="syspt"/>
		</aop:aspect>
	</aop:config>
</beans>


然后就是实体类(USER、ADMINS、DEPT、SYSTEMLOG):
use.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package="gz.itcast.crm.entity">
    	<class name="User" table="t_user">
    		<id name="id">
    			<generator class="native"></generator>
    		</id>
    		
    		<property name="name"></property>
    		<property name="password"></property>
    		<property name="realName"></property>
    		<property name="phone"></property>
    		<property name="email"></property>
    		<property name="inputTime"></property>
    		
    	</class>
</hibernate-mapping>

dept.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package="gz.itcast.crm.entity">
    	<class name="Dept" table="t_dept">
    		<id name="id">
    			<generator class="native"></generator>
    		</id>
    		
    		<property name="deptName" />
    		<property name="descr" />
    		
    		<!-- leader属性,表示本类与User的多对一的关系 -->
    		<many-to-one name="leader" class="User" column="uid" />
    		
    		<property name="inputTime" type="timestamp" />
    	</class>
</hibernate-mapping>



dao层,dao层采用了一个父类来统一规范,让所有的dao都来继承父类即可,BASEDAO:
baseDao:
	package gz.itcast.crm.dao.base;


import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;


import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate4.HibernateCallback;
import org.springframework.orm.hibernate4.HibernateTemplate;


public abstract class BaseDaoImpl<T> implements IBaseDao<T> {


	private HibernateTemplate ht;
	public void setHt(HibernateTemplate ht) {
		this.ht = ht;
	}


	Class targerClass;
	public BaseDaoImpl(){
		Class clazz = this.getClass();
		Type type = clazz.getGenericSuperclass();
		ParameterizedType pt = (ParameterizedType)type;
		targerClass = (Class) pt.getActualTypeArguments()[0];
	}
	
	
	
	public List<T> queryAll() {
		return ht.loadAll(targerClass);
	}


	public void save(T t) {
		ht.saveOrUpdate(t);
	}


	public List<T> queryByHQL(String hql, Object... values) {
		return (List<T>) ht.find(hql, values);
	}


	public T get(int id) {
		return (T) ht.get(targerClass, id);
	}


	public void delete(int id) {
		T t  = get(id);
		ht.delete(t);
	}


	public List<T> queryByPage(final String condition,final  int curPage,final int pageSize,
			final Object... values) {
		return ht.execute(new HibernateCallback<List<T>>() {


			public List<T> doInHibernate(Session session) throws HibernateException {
				Query query = session.createQuery("from "
						+ targerClass.getSimpleName() + " o where 1=1 "
						+ condition);
				if(values !=null){
					for(int i=0;i<values.length;i++){
						query.setParameter(i, values[i]);
					}
				}
				
				query.setFirstResult((curPage-1)*pageSize);
				query.setMaxResults(pageSize);
				
				return query.list();
			}
		
		
		});
	}


	public int queryByCount(final String condition,final  Object... values) {
		return ht.execute(new HibernateCallback<Long>() {


			public Long doInHibernate(Session session) throws HibernateException {
				Query query = session.createQuery("select count(o) from "+
							targerClass.getSimpleName() + " o where 1=1 " + condition
						);
				// 赋值
				if (values != null) {
					for (int i = 0; i < values.length; i++) {
						query.setParameter(i, values[i]);
					}
				}
				return (Long) query.uniqueResult();
			}
		
		}).intValue();
	}


}




采用了父类的好处就是全部dao层的方法,大多数都能够交给baseDao来完成,而相对的dao层可以简洁




service层:
UserService:
package gz.itcast.crm.service.impl;


import gz.itcast.crm.dao.IUserDao;
import gz.itcast.crm.entity.PageBean;
import gz.itcast.crm.entity.User;
import gz.itcast.crm.service.IUserService;
import gz.itcast.crm.web.query.UserQuery;


import java.util.ArrayList;
import java.util.List;


import org.springframework.util.StringUtils;


public class UserServiceImpl implements IUserService{
	//注入UserDao
	private IUserDao userDao;
	public void setUserDao(IUserDao userDao) {
		this.userDao = userDao;
	}


	public PageBean<User> queryByPage(UserQuery userquery) {


		PageBean pb = new PageBean();
		
		//1.设置当前页码
		pb.setCurPage(userquery.getCurPage());
		
		//添加查询条件
		String condition = "";
		List param = new ArrayList();
		if(userquery!=null){
			//StringUtils: 既能判断null,也能判断空字符串
			//关键词
			if(!StringUtils.isEmpty(userquery.getKeyword())){
				condition+=" and o.name like ? or o.realName like ? or o.phone like ? or o.email like ? ";
				param.add("%"+userquery.getKeyword()+"%");
				param.add("%"+userquery.getKeyword()+"%");
				param.add("%"+userquery.getKeyword()+"%");
				param.add("%"+userquery.getKeyword()+"%");
			}
			//录入时间
			if(!StringUtils.isEmpty(userquery.getBeginTime())){
				condition+=" and o.inputTime>=?";
				param.add(userquery.getBeginTime());
			}
			if(!StringUtils.isEmpty(userquery.getEndTime())){
				condition+=" and o.inputTime<=?";
				param.add(userquery.getEndTime());
			}
		}
		
		
		//2.设置当前页数
		pb.setData(userDao.queryByPage( condition , pb.getCurPage(), pb.getPageSize(), param.toArray() ) );
		//3.设置总记录数
		pb.setTotalCount(userDao.queryByCount(condition,param.toArray()));
		return pb;
	}




	public boolean checkName(String name,int id) {
		//如果是添加,则全部数据进行检查;如果是修改,则排除当前修改的用户
		List param = new ArrayList();
		String hql = "from User where name=?";
		param.add(name);
		//修改操作
		if(id!=0){
			hql += " and id<>?";
			param.add(id);
		}
		List<User> list = userDao.queryByHQL(hql, param.toArray());
		return list!=null&&list.size()>0; 
	}
	
	
	public void save(User user) {
		userDao.save(user);
	}


	public void delete(int id) {
		if(id != 0){
			userDao.delete(id);
		}
	}


	public User get(int id) {
		if(id !=0){
			return userDao.get(id);
		}
		return null;
	}


	public List<User> findAll() {
		// TODO Auto-generated method stub
		return userDao.queryAll();
	}




}





DeptService:

package gz.itcast.crm.service.impl;


import gz.itcast.crm.dao.IDeptDao;
import gz.itcast.crm.entity.Dept;
import gz.itcast.crm.entity.PageBean;
import gz.itcast.crm.entity.User;
import gz.itcast.crm.service.IDeptService;
import gz.itcast.crm.web.query.DeptQuery;


import java.util.ArrayList;
import java.util.List;


import org.springframework.util.StringUtils;


public class DeptServiceImpl implements IDeptService {


	private IDeptDao deptDao;
	public void setDeptDao(IDeptDao deptDao) {
		this.deptDao = deptDao;
	}


	public List<Dept> queryAll() {
		return deptDao.queryAll();
	}


	public void save(Dept dept) {
		deptDao.save(dept);
		
	}


	public Dept get(int id) {
		return deptDao.get(id);
	}


	public void delete(int id) {
		deptDao.delete(id);
	}


	public PageBean queryByPage(DeptQuery query) {
		//封装PageBean
		PageBean pb = new PageBean();
		
		//1.设置当前页码
		pb.setCurPage(query.getCurPage());
		
		String condition = "";
		List param = new ArrayList();
		if(query!=null){
			if(!StringUtils.isEmpty(query.getKeyword())){
				condition +=" and  o.deptName like ? or o.descr like ? or o.leader.realName like ?";
				param.add("%"+query.getKeyword()+"%");
				param.add("%"+query.getKeyword()+"%");
				param.add("%"+query.getKeyword()+"%");
			}
			//录入时间
			if(!StringUtils.isEmpty(query.getBeginTime())){
				condition+=" and o.inputTime>=?";
				param.add(query.getBeginTime());
			}
			if(!StringUtils.isEmpty(query.getEndTime())){
				condition+=" and o.inputTime<=?";
				param.add(query.getEndTime());
			}
			if(query.getLeader()!=0){
				condition +=" and  o.leader.id=?";
				param.add(query.getLeader());
			}
		}
		
		//2.设置当前页数
		pb.setData(deptDao.queryByPage( condition , pb.getCurPage(), pb.getPageSize(), param.toArray() ) );
		//3.设置总记录数
		pb.setTotalCount(deptDao.queryByCount(condition,param.toArray()));
		
		
		return pb;
	}


	public boolean checkName(String deptName, int id) {
			//如果是添加,则全部数据进行检查;如果是修改,则排除当前修改的用户
				List param = new ArrayList();
				String hql = "from Dept where deptName=?";
				param.add(deptName);
				//修改操作
				if(id!=0){
					hql += " and id<>?";
					param.add(id);
				}
				List<Dept> list = deptDao.queryByHQL(hql, param.toArray());
				return list!=null&&list.size()>0; 
	}


}




SystemLogService:
package gz.itcast.crm.service.impl;


import gz.itcast.crm.dao.ISystemLogDao;


import gz.itcast.crm.entity.PageBean;
import gz.itcast.crm.entity.SystemLog;
import gz.itcast.crm.service.ISystemLogService;
import gz.itcast.crm.web.query.SystemLogQuery;


import java.util.ArrayList;
import java.util.List;


import org.springframework.util.StringUtils;




public class SystemLogServiceImpl implements ISystemLogService {
	
	private ISystemLogDao systemLogDao;
	public void setSystemLogDao(ISystemLogDao systemLogDao) {
		this.systemLogDao = systemLogDao;
	}


	public List<SystemLog> queryAll() {
		return systemLogDao.queryAll();
	}


	public void save(SystemLog SystemLog) {
		systemLogDao.save(SystemLog);
	}


	public SystemLog get(int id) {
		return systemLogDao.get(id);
	}


	public void delete(int id) {
		systemLogDao.delete(id);
	}


	public PageBean queryByPage(SystemLogQuery query) {
		//封装PageBean
		PageBean pb = new PageBean();
		
		//1.设置当前页码
		pb.setCurPage(query.getCurPage());
		
		//添加查询条件
		String condition = "";
		List param = new ArrayList();
		if(query!=null){
			if(!StringUtils.isEmpty(query.getKeyword())){
				condition +=" and  o.operator.realName like ? or o.func like ? or o.ip like ?";
				param.add("%"+query.getKeyword()+"%");
				param.add("%"+query.getKeyword()+"%");
				param.add("%"+query.getKeyword()+"%");
			}
			//录入时间
			if(!StringUtils.isEmpty(query.getBeginTime())){
				condition+=" and o.inputTime>=?";
				param.add(query.getBeginTime());
			}
			if(!StringUtils.isEmpty(query.getEndTime())){
				condition+=" and o.inputTime<=?";
				param.add(query.getEndTime());
			}
			if(query.getLeader()!=0){
				condition +=" and  o.operator.id=?";
				param.add(query.getLeader());
			}
		}
		
		//2.设置当前页数
		pb.setData(systemLogDao.queryByPage( condition , pb.getCurPage(), pb.getPageSize(), param.toArray() ) );
		//3.设置总记录数
		pb.setTotalCount(systemLogDao.queryByCount(condition,param.toArray()));
		return pb;
	}
}



action层:
UserAction:
package gz.itcast.crm.web;


import gz.itcast.crm.entity.PageBean;
import gz.itcast.crm.entity.User;
import gz.itcast.crm.service.IUserService;
import gz.itcast.crm.web.query.UserQuery;


import java.util.Date;
import java.util.List;
import java.util.Map;


import com.opensymphony.xwork2.ActionContext;


public class UserAction extends BaseAction{
	//注入userService
	private IUserService userService;
	public void setUserService(IUserService userService) {
		this.userService = userService;
	}
	//接收User对象
	private User user;
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	//接收UserQuery对象
	 UserQuery uquery = new UserQuery();
	public UserQuery getUquery() {
		return uquery;
	}
	public void setUquery(UserQuery uquery) {
		this.uquery = uquery;
	}
	//跳转页面
	public String input(){
		if(user != null &&user.getId() !=0){
			//修改操作
			user = userService.get(user.getId());
		}
		
		return "input";
	}
	
	//查询所有用户
	public String pageList(){
	if(uquery==null ||uquery.getCurPage()==null || uquery.getCurPage().equals("")){
		uquery.setCurPage(1);
		ActionContext.getContext().getSession().put("Uquery", uquery);
		}
		else{
			UserQuery uquery1 = (UserQuery) ActionContext.getContext().getSession().get("Uquery");
			uquery1.setCurPage(uquery.getCurPage());
			//System.out.println(uquery.getCurPage());
			uquery = uquery1;
		}
		PageBean pb = userService.queryByPage(uquery);
		putContext("pb", pb);
		return SUCCESS;
	}
	
	//校验save
	public void validateSave() {
		boolean result = userService.checkName(user.getName(),user.getId());
		if(result){
			addFieldError("user.name", "用户名已重复");
		}
	}
	
	//添加用户
	public String save(){
		user.setInputTime(new Date());
		userService.save(user);
		return "save";
	}
	
	//删除用户
	public String del(){
		userService.delete(user.getId());
		return pageList();
	}
	
	
}




DeptAction:
package gz.itcast.crm.web;


import gz.itcast.crm.entity.Dept;
import gz.itcast.crm.entity.PageBean;
import gz.itcast.crm.entity.User;
import gz.itcast.crm.service.IDeptService;
import gz.itcast.crm.service.IUserService;
import gz.itcast.crm.web.query.DeptQuery;


import java.util.Date;
import java.util.List;


import com.opensymphony.xwork2.ActionContext;




public class DeptAction extends BaseAction {
	//注入deptService
	private IDeptService deptService;
	public void setDeptService(IDeptService deptService) {
		this.deptService = deptService;
	}
	private IUserService userService;
	public void setUserService(IUserService userService) {
		this.userService = userService;
	}
	//设置对象
	private Dept dept = new Dept();
	private DeptQuery query = new DeptQuery();
	public Dept getDept() {
		return dept;
	}
	public void setDept(Dept dept) {
		this.dept = dept;
	}
	public DeptQuery getQuery() {
		return query;
	}
	public void setQuery(DeptQuery query) {
		this.query = query;
	}


	//跳转输入页面
	public String input(){
		if(dept != null &&dept.getId() !=0){
			dept = deptService.get(dept.getId());
		}
		List<User> list = userService.findAll();
		ActionContext.getContext().getSession().put("list", list);
		return "input";
	}


	//分页查询用户
	public String pageList(){
		//默认第一页
		if(query==null || query.getCurPage()==null || query.getCurPage().equals("")){
			query.setCurPage(1);
			ActionContext.getContext().getSession().put("dquery", query);
		}
		else{
			DeptQuery query1 = (DeptQuery) ActionContext.getContext().getSession().get("dquery");
			query1.setCurPage(query.getCurPage());
			query = query1;
		}
		//查询数据
		PageBean pb = deptService.queryByPage(query);
		
		//查询所有用户
		List<User> users = userService.findAll();
		putContext("users", users);
		
		putContext("pb", pb);
		return SUCCESS;
	}
	
	//校验保存
	public void validateSave() {
		boolean result = deptService.checkName(dept.getDeptName(),dept.getId());
		if(result){
			addFieldError("dept.deptName", "用户名已重复");
		}
	}
	
	//保存方法
	public String save(){
		//调用业务
		if(dept==null || dept.getId()==0){
			dept.setInputTime(new Date());
		}
		deptService.save(dept);
		//设置时间
		//回显列表页面
		return "save";
	}
	
	//删除用户
	public String delete(){
		deptService.delete(dept.getId());
		return pageList();
	}
	
	
}


SystemLogAction:

package gz.itcast.crm.web;


import gz.itcast.crm.entity.PageBean;
import gz.itcast.crm.entity.SystemLog;
import gz.itcast.crm.entity.User;
import gz.itcast.crm.service.ISystemLogService;
import gz.itcast.crm.service.IUserService;
import gz.itcast.crm.web.query.SystemLogQuery;


import java.util.List;


import com.opensymphony.xwork2.ActionContext;


public class SystemLogAction extends BaseAction {
	//注入IsystemLogService
	private ISystemLogService systemLogService;
	public void setSystemLogService(ISystemLogService systemLogService) {
		this.systemLogService = systemLogService;
	}
	//注入IUserService
	private IUserService userService;
	public void setUserService(IUserService userService) {
		this.userService = userService;
	}
	//设置query属性
	private SystemLogQuery query = new SystemLogQuery();
	public SystemLogQuery getQuery() {
		return query;
	}
	public void setQuery(SystemLogQuery query) {
		this.query = query;
	}
	//设置system属性
	private SystemLog system = new SystemLog();
	public SystemLog getSystem() {
		return system;
	}
	public void setSystem(SystemLog system) {
		this.system = system;
	}
		
	
	
	//分页查询用户
	public String pageList(){
		//默认第一页
		if(query==null || query.getCurPage()==null || query.getCurPage().equals("")){
			query.setCurPage(1);
			ActionContext.getContext().getSession().put("squery", query);
		}
		else{
			SystemLogQuery squery = (SystemLogQuery) ActionContext.getContext().getSession().get("squery");
			squery.setCurPage(query.getCurPage());
			query = squery;
		}
		//查询数据
		PageBean pb = systemLogService.queryByPage(query);
		List<User> users = userService.findAll();
		putContext("users", users);
		
		putContext("pb", pb);
		return SUCCESS;
	}
		
	//删除用户
	public String delete(){
		systemLogService.delete(system.getId());
		return pageList();
	}
}




在util层中,定义了一个切面类,也就是系统日志类,在applicationContext.xml文件中,采用aop切面的方法对其进行配置
SystemLogUtil:

	package gz.itcast.crm.util;


import gz.itcast.crm.entity.SystemLog;


import gz.itcast.crm.entity.User;
import gz.itcast.crm.service.ISystemLogService;


import java.util.Date;


import org.apache.struts2.ServletActionContext;
import org.aspectj.lang.JoinPoint;


import com.opensymphony.xwork2.ActionContext;


public class SystemLogUtil {


	private ISystemLogService systemLogService;
	public void setSystemLogService(ISystemLogService systemLogService) {
		this.systemLogService = systemLogService;
	}






	public void log(JoinPoint pt){
		
		
		Object target = pt.getTarget();
		if(target instanceof ISystemLogService){
			return;
		}
		
		String clazzname = target.getClass().getSimpleName();
		String method = pt.getSignature().getName();
		String func = clazzname +":"+ method + "()";
		
		SystemLog sl = new SystemLog();
		sl.setInputTime(new Date());
		
		String ip = ServletActionContext.getRequest().getRemoteHost();
		
		sl.setIp(ip);
		//sl.setIp("11111");
		//获取登录用户
		User u = new User();
		u.setId(1);
		
		sl.setOperator(u);
		sl.setFunc(func);
		
		//保存日志
		systemLogService.save(sl);
		
	}
}



还有一件很重要的事,便是使用SSH的时候需要在web.xml中进行配置,除了配置核心配置的过滤器和拦截器外,需要解决的懒加载问题,也可以在web.xml中进行配置

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>	
  <welcome-file-list>
    <welcome-file>/WEB-INF/login.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 解决sessionFactory的懒加载问题 -->
  <filter>
    <filter-name>osiv</filter-name>
    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
  	<init-param>
  		<param-name>sessionFactory</param-name>
  		<param-value>sessionFactory</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
    <filter-name>osiv</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
 
 
  <!-- struts2的核心过滤器 -->
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <!-- spring的核心监听器 -->
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
   <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  
  <servlet>
    <servlet-name>ImgServlet</servlet-name>
    <servlet-class>gz.itcast.crm.util.ImgServlet</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>ImgServlet</servlet-name>
    <url-pattern>/ImgServlet.img</url-pattern>
  </servlet-mapping>
  
</web-app>




当整个项目都开发好了以后,在服务器中进行部署,在浏览器中打开的效果则为:



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值