javaee之SSH项目

来源:互联网 发布:淘宝一淘怎么报名 编辑:程序博客网 时间:2024/06/07 02:19
通过学习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{//注入UserDaoprivate 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 stubreturn 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) {//封装PageBeanPageBean 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) {//封装PageBeanPageBean 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{//注入userServiceprivate 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;}//校验savepublic 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 {//注入deptServiceprivate 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 {//注入IsystemLogServiceprivate ISystemLogService systemLogService;public void setSystemLogService(ISystemLogService systemLogService) {this.systemLogService = systemLogService;}//注入IUserServiceprivate 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>




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



1 0
原创粉丝点击