目录
1、概述
2、功能描述
3、数据表
4、目录结构
5、实现过程
5.1 SRC后端文件
5.2 webroot前端文件
6、最终效果
6.1前台用户效果
6.2后台管理员用户效果
1、概述
开发环境: jdk1.8、tomcat7.0 、mysql5.2
开发工具:idea2019.3.1、navicat15
编程语言后端:java;框架和引用的包:ssh(Struts+Spring+Hibernate)、log4j.jar
编程语言前端:JSP、html5、javascript、jquery;框架和引用的包:My97DatePicker、ueditor、struts-tags标签库
注:本项目未引用当前流行的ssm(Spring+SpringMVC+MyBatis)、Spring boot,在随后的项目中讲解
2、功能描述
针对系统管理员:
- 企业用户和学生用户添加和管理。
- 新闻公告添加和管理。
- 招聘会详细信息添加和管理。
- 文档信息添加和管理。
- 网站留言信息管理。
针对企业用户:
- 浏览网站的所有信息。
- 添加企业招聘信息。
- 管理企业招聘信息。
针对学生用户:
- 可以浏览网站的招聘,新闻等信息。
- 在网站上留言。
3、数据表
4、目录结构
5、实现过程
5.1 SRC后端文件
action负责前台与后台之间数据的传递、后台完成逻辑操作之后页面的跳转.Action逻辑判断后在model中做出操作,然后传递给dao,在dao层中用Hibernate对数据库进行持久化操作,根据需求,是否应有返回值。最后到action中进行页面跳转。
下面逐个展现
1、com.action Struts的控制层,包含控制逻辑,浏览网页后操作的请求发送到此处,经过处理(如数据库操作),将结果返回。
留言管理为例
package com.action;import java.util.Date;
import java.util.List;
import java.util.Map;import org.apache.struts2.ServletActionContext;import com.dao.TLiuyanDAO;
import com.model.TAdmin;
import com.model.TLiuyan;
import com.model.TUser;
import com.model.TStu;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.util.Pagination;public class liuyanAction extends ActionSupport {private int liuyanId;private String liuyanTitle;private String liuyanContent;private TLiuyanDAO liuyanDAO;private String message;private String path;// 后台管理private int index = 1;// 分页使用的public int getIndex() {return index;}public void setIndex(int index) {this.index = index;}public String liuyanMana() {List liuyanList = liuyanDAO.findAll();int pageSize = 10;int fromIndex = (index - 1) * pageSize;int toIndex = Math.min(fromIndex + pageSize, liuyanList.size());List yuyueListFenye = liuyanList.subList(fromIndex, toIndex);Pagination p = new Pagination();// 创建 分页对象p.setIndex(index);// 设置页数p.setPageSize(pageSize);p.setTotle(liuyanList.size());// 设置总共的条数p.setData(yuyueListFenye);// 设置数据p.setPath("liuyanMana.action?");// 跳转的路径Map request = (Map) ServletActionContext.getContext().get("request");request.put("page", p);return ActionSupport.SUCCESS;}public String liuyanAdd() {TLiuyan liuyan = new TLiuyan();liuyan.setLiuyanContent(liuyanContent);liuyan.setLiuyanTitle(liuyanTitle);liuyan.setLiuyanDate(new Date().toLocaleString());Map session = ActionContext.getContext().getSession();if (session.get("user") != null) {// 获取企业登录名if (session.get("userType").toString().equals("qiye")) {TUser user = (TUser) session.get("user");liuyan.setLiuyanUser(user.getUserName());}// 获取学生用户名if (session.get("userType").toString().equals("stu")) {TStu stu = (TStu) session.get("user");liuyan.setLiuyanUser(stu.getLoginName());}}liuyanDAO.save(liuyan);this.setMessage("留言成功");this.setPath("liuyanAll.action");return "succeed";}public String liuyanDel() {TLiuyan liuyan = liuyanDAO.findById(liuyanId);liuyanDAO.delete(liuyan);this.setMessage("留言删除成功");this.setPath("liuyanMana.action");return "succeed";}public String liuyanAll() {List liuyanList = liuyanDAO.findAll();Map request = (Map) ServletActionContext.getContext().get("request");request.put("liuyanList", liuyanList);return ActionSupport.SUCCESS;}public String getLiuyanContent() {return liuyanContent;}public void setLiuyanContent(String liuyanContent) {this.liuyanContent = liuyanContent;}public TLiuyanDAO getLiuyanDAO() {return liuyanDAO;}public void setLiuyanDAO(TLiuyanDAO liuyanDAO) {this.liuyanDAO = liuyanDAO;}public int getLiuyanId() {return liuyanId;}public void setLiuyanId(int liuyanId) {this.liuyanId = liuyanId;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public String getLiuyanTitle() {return liuyanTitle;}public void setLiuyanTitle(String liuyanTitle) {this.liuyanTitle = liuyanTitle;}}
2、com.dao 数据库操作的方法, 与数据库进行交互的持久层。
以留言管理为例
package com.dao;import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.model.TLiuyan;/*** Data access object (DAO) for domain model class TLiuyan.* * @see com.model.TLiuyan* @author MyEclipse Persistence Tools*/public class TLiuyanDAO extends HibernateDaoSupport
{private static final Log log = LogFactory.getLog(TLiuyanDAO.class);// property constantspublic static final String LIUYAN_TITLE = "liuyanTitle";public static final String LIUYAN_CONTENT = "liuyanContent";protected void initDao(){// do nothing}public void save(TLiuyan transientInstance){log.debug("saving TLiuyan instance");try{getHibernateTemplate().save(transientInstance);log.debug("save successful");} catch (RuntimeException re){log.error("save failed", re);throw re;}}public void delete(TLiuyan persistentInstance){log.debug("deleting TLiuyan instance");try{getHibernateTemplate().delete(persistentInstance);log.debug("delete successful");} catch (RuntimeException re){log.error("delete failed", re);throw re;}}public TLiuyan findById(java.lang.Integer id){log.debug("getting TLiuyan instance with id: " + id);try{TLiuyan instance = (TLiuyan) getHibernateTemplate().get("com.model.TLiuyan", id);return instance;} catch (RuntimeException re){log.error("get failed", re);throw re;}}public List findByExample(TLiuyan instance){log.debug("finding TLiuyan instance by example");try{List results = getHibernateTemplate().findByExample(instance);log.debug("find by example successful, result size: "+ results.size());return results;} catch (RuntimeException re){log.error("find by example failed", re);throw re;}}public List findByProperty(String propertyName, Object value){log.debug("finding TLiuyan instance with property: " + propertyName+ ", value: " + value);try{String queryString = "from TLiuyan as model where model."+ propertyName + "= ?";return getHibernateTemplate().find(queryString, value);} catch (RuntimeException re){log.error("find by property name failed", re);throw re;}}public List findByLiuyanTitle(Object liuyanTitle){return findByProperty(LIUYAN_TITLE, liuyanTitle);}public List findByLiuyanContent(Object liuyanContent){return findByProperty(LIUYAN_CONTENT, liuyanContent);}public List findAll(){log.debug("finding all TLiuyan instances");try{String queryString = "from TLiuyan";return getHibernateTemplate().find(queryString);} catch (RuntimeException re){log.error("find all failed", re);throw re;}}public TLiuyan merge(TLiuyan detachedInstance){log.debug("merging TLiuyan instance");try{TLiuyan result = (TLiuyan) getHibernateTemplate().merge(detachedInstance);log.debug("merge successful");return result;} catch (RuntimeException re){log.error("merge failed", re);throw re;}}public void attachDirty(TLiuyan instance){log.debug("attaching dirty TLiuyan instance");try{getHibernateTemplate().saveOrUpdate(instance);log.debug("attach successful");} catch (RuntimeException re){log.error("attach failed", re);throw re;}}public void attachClean(TLiuyan instance){log.debug("attaching clean TLiuyan instance");try{getHibernateTemplate().lock(instance, LockMode.NONE);log.debug("attach successful");} catch (RuntimeException re){log.error("attach failed", re);throw re;}}public static TLiuyanDAO getFromApplicationContext(ApplicationContext ctx){return (TLiuyanDAO) ctx.getBean("TLiuyanDAO");}
}
3、Com.model 该包中放置hibernate反向工程生成的bean和该bean对应的.hbm.xml文件。
以留言管理为例
package com.model;/*** TLiuyan generated by MyEclipse Persistence Tools*/public class TLiuyan implements java.io.Serializable
{// Fieldsprivate Integer liuyanId;private String liuyanTitle;private String liuyanContent;private String liuyanDate;private String liuyanUser;// Constructors/** default constructor */public TLiuyan(){}/** full constructor */public TLiuyan(String liuyanTitle, String liuyanContent){this.liuyanTitle = liuyanTitle;this.liuyanContent = liuyanContent;}// Property accessorspublic Integer getLiuyanId(){return this.liuyanId;}public void setLiuyanId(Integer liuyanId){this.liuyanId = liuyanId;}public String getLiuyanTitle(){return this.liuyanTitle;}public String getLiuyanUser(){return liuyanUser;}public void setLiuyanUser(String liuyanUser){this.liuyanUser = liuyanUser;}public String getLiuyanDate(){return liuyanDate;}public void setLiuyanDate(String liuyanDate){this.liuyanDate = liuyanDate;}public void setLiuyanTitle(String liuyanTitle){this.liuyanTitle = liuyanTitle;}public String getLiuyanContent(){return this.liuyanContent;}public void setLiuyanContent(String liuyanContent){this.liuyanContent = liuyanContent;}}
<?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">
<!-- Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping><class name="com.model.TLiuyan" table="t_liuyan"><id name="liuyanId" type="java.lang.Integer"><column name="liuyan_id" /><generator class="increment" /></id><property name="liuyanTitle" type="java.lang.String"><column name="liuyan_title" length="50" /></property><property name="liuyanContent" type="java.lang.String"><column name="liuyan_content" length="5000" /></property><property name="liuyanDate" type="java.lang.String"><column name="liuyan_date" length="50" /></property><property name="liuyanUser" type="java.lang.String"><column name="liuyan_user" length="50" /></property></class>
</hibernate-mapping>
4、com.service loginService.java文件与webroot\WEB-INF目录里的\dwr.xml共同实现AJAX异步登录效果
package com.service;import java.util.List;import javax.servlet.http.HttpSession;import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;import com.dao.TAdminDAO;
import com.dao.TUserDAO;
import com.model.TAdmin;
import com.model.TUser;public class loginService
{private TAdminDAO adminDAO;private TUserDAO userDAO;public TAdminDAO getAdminDAO(){return adminDAO;}public void setAdminDAO(TAdminDAO adminDAO){this.adminDAO = adminDAO;}public TUserDAO getUserDAO(){return userDAO;}public void setUserDAO(TUserDAO userDAO){this.userDAO = userDAO;}public String login(String userName,String userPw,int userType){System.out.println("userType"+userType);try{Thread.sleep(700);} catch (InterruptedException e){// TODO Auto-generated catch blocke.printStackTrace();}String result="no";if(userType==0)//系统管理员登陆{String sql="from TAdmin where userName=? and userPw=?";Object[] con={userName,userPw};List adminList=adminDAO.getHibernateTemplate().find(sql,con);if(adminList.size()==0){result="no";}else{WebContext ctx = WebContextFactory.get(); HttpSession session=ctx.getSession(); TAdmin admin=(TAdmin)adminList.get(0);session.setAttribute("userType", 0);session.setAttribute("admin", admin);result="yes";}}if(userType==1)//老师登陆{}if(userType==2)//学生登陆{}return result;}public String adminPwEdit(String userPwNew){System.out.println("DDDD");try {Thread.sleep(700);} catch (InterruptedException e){// TODO Auto-generated catch blocke.printStackTrace();}WebContext ctx = WebContextFactory.get(); HttpSession session=ctx.getSession(); TAdmin admin=(TAdmin)session.getAttribute("admin");admin.setUserPw(userPwNew);adminDAO.getHibernateTemplate().update(admin);session.setAttribute("admin", admin);return "yes";}public String jiance(String userName){System.out.println("DDDD");try {Thread.sleep(700);} catch (InterruptedException e){// TODO Auto-generated catch blocke.printStackTrace();}String sql="from TUser where userName='"+userName+"'";List list=userDAO.getHibernateTemplate().find(sql);if(list.size()>0){return "no";}else{return "yes";}}}
5、com.util 一些常用到的公用方法 如分页\上传\等
分页代码
package com.util;import java.util.List;//封装页面显示逻辑
public class Pagination
{private int totle;// 总共的数据量private int pageSize=9;// 每页显示多少条private int totlePage;// 共有多少页private int index;// 当前是第几页private List data; // 数据private String path;// 连接路径public void setTotle(int totle){this.totle = totle;}public void setPageSize(int pageSize){this.pageSize = pageSize;}public void setIndex(int index){this.index = index;}public void setPath(String path){this.path = path;}public int getTotle(){return totle;}public int getPageSize(){return pageSize;}public int getTotlePage(){return (this.totle + this.pageSize - 1) / this.pageSize;}public int getIndex(){return index;}public List getData(){return data;}public void setData(List data){this.data = data;}public String getPageDisplay(){StringBuffer displayInfo = new StringBuffer();displayInfo.append("<div class=paginList >");if (index == 0 || pageSize == 0||this.getTotlePage()==1){displayInfo.append("共" + totle + "条记录");} else{// 判断如果当前是第一页 则“首页”和“第一页”失去链接if (index == 1){displayInfo.append("<a href='#'>首页</a> ");displayInfo.append("<a href='#'>上一页</a> ");} else{displayInfo.append("<a href='" + path+ "index=1'>首页 </a> ");displayInfo.append("<a href='" + path + "index=" + (index - 1)+ "'>上一页 </a> ");}if (index >= this.getTotlePage()){displayInfo.append("<a href='#'>下一页</a> ");displayInfo.append("<a href='#'>末页</a> ");} else{displayInfo.append("<a href='" + path + "index=" + (index + 1)+ "'>下一页 </a> ");displayInfo.append("<a href='" + path + "index="+ this.getTotlePage() + "'>末页</a> ");}displayInfo.append(" 共" + totle+ "条记录 每页 " + pageSize+ " 条 ");displayInfo.append("第 " + index+ " 页/共" + this.getTotlePage() + "页 ");}displayInfo.append("</div>");return displayInfo.toString();}
}
6、Struts.xml文件中配置了 前台与后台传递的路径对应. 拦截器地址栏的地址并对应引用
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="liu" extends="struts-default"><global-results><result name="succeed">/common/succeed.jsp</result><result name="successAdd">/common/add_success.jsp</result><result name="successDel">/common/del_success.jsp</result><result name="successUpdate">/common/update_success.jsp</result></global-results><action name="upload" class="com.util.upload" method="upload"><result name="success">/upload/upload_re.jsp</result></action><action name="index" class="indexAction" method="index"><result name="success">/qiantai/index.jsp</result></action><action name="userReg" class="userAction" method="userReg"></action><action name="userEdit" class="userAction" method="userEdit"></action><action name="userLogin" class="userAction" method="userLogin"></action><action name="userLogout" class="userAction" method="userLogout"><result name="success">/qiantai/default.jsp</result></action><action name="userDel" class="userAction" method="userDel"></action><action name="userMana" class="userAction" method="userMana"><result name="success">/admin/user/userMana.jsp</result></action><action name="userXinxi" class="userAction" method="userXinxi"><result name="success">/admin/order/userXinxi.jsp</result></action><action name="adminAdd" class="adminAction" method="adminAdd"></action><action name="adminDel" class="adminAction" method="adminDel"></action><action name="adminManage" class="adminAction" method="adminManage"><result name="success">/admin/index/adminManage.jsp</result></action><action name="adminEditPre" class="adminAction" method="adminEditPre"><result name="success">/admin/index/adminEditPre.jsp</result></action><action name="adminEdit" class="adminAction" method="adminEdit"></action><action name="liuyanMana" class="liuyanAction" method="liuyanMana"><result name="success">/admin/liuyan/liuyanMana.jsp</result></action><action name="liuyanAdd" class="liuyanAction" method="liuyanAdd"></action><action name="liuyanDel" class="liuyanAction" method="liuyanDel"></action><action name="liuyanAll" class="liuyanAction" method="liuyanAll"><result name="success">/qiantai/liuyan/liuyanAll.jsp</result></action><action name="gonggaoAdd" class="gonggaoAction" method="gonggaoAdd"></action><action name="gonggaoDel" class="gonggaoAction" method="gonggaoDel"></action><action name="gonggaoMana" class="gonggaoAction" method="gonggaoMana"><result>/admin/gonggao/gonggaoMana.jsp</result></action><action name="gonggaoDetail" class="gonggaoAction" method="gonggaoDetail"><result>/admin/gonggao/gonggaoDetail.jsp</result></action><action name="gonggaoDetailQian" class="gonggaoAction" method="gonggaoDetailQian"><result>/qiantai/gonggao/gonggaoDetailQian.jsp</result></action><action name="gonggaoQian5" class="gonggaoAction" method="gonggaoQian5"><result>/qiantai/gonggao/gonggaoQian5.jsp</result></action><action name="gonggaoEditPre" class="gonggaoAction" method="gonggaoEditPre"><result name="success">/admin/gonggao/gonggaoEditPre.jsp</result></action><action name="gonggaoEdit" class="gonggaoAction" method="gonggaoEdit"></action><action name="picNewsAdd" class="picNewsAction" method="picNewsAdd"></action><action name="picNewsDel" class="picNewsAction" method="picNewsDel"></action><action name="picNewsMana" class="picNewsAction" method="picNewsMana"><result name="success">/admin/picNews/picNewsMana.jsp</result></action><action name="picNewsDetail" class="picNewsAction" method="picNewsDetail"><result name="success">/admin/picNews/picNewsDetail.jsp</result></action><action name="picNewsDetailQian" class="picNewsAction" method="picNewsDetailQian"><result name="success">/qiantai/picNews/picNewsDetailQian.jsp</result></action><action name="picNewsQian5" class="picNewsAction" method="picNewsQian5"><result name="success">/qiantai/picNews/picNewsQian5.jsp</result></action><action name="stuAdd" class="stuAction" method="stuAdd"></action><action name="stuDel" class="stuAction" method="stuDel"></action><action name="stuMana" class="stuAction" method="stuMana"><result name="success">/admin/stu/stuMana.jsp</result></action><action name="stuEditByMe" class="stuAction" method="stuEditByMe"></action><action name="zhaopinhuiAdd" class="zhaopinhuiAction" method="zhaopinhuiAdd"></action><action name="zhaopinhuiDel" class="zhaopinhuiAction" method="zhaopinhuiDel"></action><action name="zhaopinhuiMana" class="zhaopinhuiAction" method="zhaopinhuiMana"><result name="success">/admin/zhaopinhui/zhaopinhuiMana.jsp</result></action><action name="zhaopinhuiAll" class="zhaopinhuiAction" method="zhaopinhuiAll"><result name="success">/qiantai/zhaopinhui/zhaopinhuiAll.jsp</result></action><action name="docAdd" class="docAction" method="docAdd"></action><action name="docDel" class="docAction" method="docDel"></action><action name="docMana" class="docAction" method="docMana"><result name="success">/admin/doc/docMana.jsp</result></action><action name="docAll" class="docAction" method="docAll"><result name="success">/qiantai/doc/docAll.jsp</result></action><action name="zhaopinAddMy" class="zhaopinAction" method="zhaopinAddMy"></action><action name="zhaopinDelMy" class="zhaopinAction" method="zhaopinDelMy"></action><action name="zhaopinManaMy" class="zhaopinAction" method="zhaopinManaMy"><result name="success">/aqiye/zhaopin/zhaopinManaMy.jsp</result></action><action name="zhaopinDetailQian" class="zhaopinAction" method="zhaopinDetailQian"><result name="success">/qiantai/zhaopin/zhaopinDetailQian.jsp</result></action><action name="zhaopinSearch" class="zhaopinAction" method="zhaopinSearch"><result name="success">/qiantai/zhaopin/zhaopinSearch.jsp</result></action><!--招聘信息推介--><action name="zhaopinTj" class="zhaopinAction" method="zhaopinTj"><result name="success">/qiantai/zhaopin/zhaopinTj.jsp</result></action><action name="toudijianliManaQy" class="toudijianliAction" method="toudijianliManaQy"><result name="success">/aqiye/toudijianli/toudijianliManaMy.jsp</result></action><action name="toudijianliAddMy" class="toudijianliAction" method="toudijianliAddMy"></action><action name="toudijianliDel" class="toudijianliAction" method="toudijianliDel"></action><action name="toudijianliManaMy" class="toudijianliAction" method="toudijianliManaMy"><result name="success">/astu/toudijianli/toudijianliManaMy.jsp</result></action></package>
</struts>
5.2 webroot前端文件
1、common目录,保存一些公用页面,如添加成功 删除成功之类的提示页面
操作成功提示页面
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%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><script type="text/javascript"><s:if test="message!=null">alert("<s:property value='message'/>");</s:if><s:if test="path!=null">document.location.href="<%=path%>/<s:property value='path'/>";</s:if></script></head><body></body>
</html>
2、fckeditor或者ueditor目录 ,多媒体富文本编辑框,用在新闻编辑和添加的时候,输入文字样式的修改,类似于word的编辑功能
效果截图
3、My97DatePicker时间选择框,用于有时间选择的表单时 ,点击弹出选择日期和时间
效果截图
4、WEB-INF目录里的\dwr.xml 与src/com/service/loginService.java文件共同实现AJAX异步登录效果
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<dwr><allow><create creator="spring" javascript="loginService"><param name="beanName" value="loginService"></param></create></allow>
</dwr>
5、WEB-INF目录里的\ applicationContext.xml Spring的applicationContext对象,用于获取他的bean对象.包含
A dataSource数据连接定义
B sessionFactory配置
C 实现DAO注入Spring配置
代码段
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.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://localhost:3306/db_jiuye?characterEncoding=utf8"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean><!-- 配置sessionFactory相关信息 --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop><prop key="hibernate.show_sql">true</prop></props></property><property name="mappingResources"><list><value>com/model/TAdmin.hbm.xml</value><value>com/model/TLiuyan.hbm.xml</value><value>com/model/TGonggao.hbm.xml</value><value>com/model/TUser.hbm.xml</value><value>com/model/TPicNews.hbm.xml</value><value>com/model/TStu.hbm.xml</value><value>com/model/TZhaopinhui.hbm.xml</value><value>com/model/TDoc.hbm.xml</value><value>com/model/TZhaopin.hbm.xml</value><value>com/model/TToudijianli.hbm.xml</value></list></property></bean><!-- 将DAO实现注入到Spring --><bean id="indexAction" class="com.action.indexAction" scope="prototype"><property name="picNewsDAO"><ref bean="TPicNewsDAO" /></property><property name="zhaopinDAO"><ref bean="TZhaopinDAO" /></property></bean><bean id="TUserDAO" class="com.dao.TUserDAO"><property name="sessionFactory"><ref bean="sessionFactory"></ref></property></bean><bean id="userAction" class="com.action.UserAction" scope="prototype"><property name="userDAO"><ref bean="TUserDAO" /></property><property name="stuDAO"><ref bean="TStuDAO" /></property></bean><!-- 后台的登录 --><bean id="loginService" class="com.service.loginService"><property name="adminDAO"><ref bean="TAdminDAO" /></property><property name="userDAO"><ref bean="TUserDAO" /></property></bean><bean id="TAdminDAO" class="com.dao.TAdminDAO"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><bean id="adminAction" class="com.action.adminAction" scope="prototype"><property name="adminDAO"><ref bean="TAdminDAO" /></property></bean><bean id="TLiuyanDAO" class="com.dao.TLiuyanDAO"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><bean id="liuyanAction" class="com.action.liuyanAction" scope="prototype"><property name="liuyanDAO"><ref bean="TLiuyanDAO" /></property></bean><bean id="TGonggaoDAO" class="com.dao.TGonggaoDAO"><property name="sessionFactory"><ref bean="sessionFactory"></ref></property></bean><bean id="gonggaoAction" class="com.action.gonggaoAction" scope="prototype"><property name="gonggaoDAO"><ref bean="TGonggaoDAO" /></property></bean><bean id="TPicNewsDAO" class="com.dao.TPicNewsDAO"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><bean id="picNewsAction" class="com.action.picNewsAction" scope="prototype"><property name="picNewsDAO"><ref bean="TPicNewsDAO" /></property></bean><bean id="TStuDAO" class="com.dao.TStuDAO"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><bean id="stuAction" class="com.action.stuAction" scope="prototype"><property name="stuDAO"><ref bean="TStuDAO" /></property></bean><bean id="TZhaopinhuiDAO" class="com.dao.TZhaopinhuiDAO"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><bean id="zhaopinhuiAction" class="com.action.zhaopinhuiAction"scope="prototype"><property name="zhaopinhuiDAO"><ref bean="TZhaopinhuiDAO" /></property></bean><bean id="TDocDAO" class="com.dao.TDocDAO"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><bean id="docAction" class="com.action.docAction" scope="prototype"><property name="docDAO"><ref bean="TDocDAO" /></property></bean><bean id="TZhaopinDAO" class="com.dao.TZhaopinDAO"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><bean id="zhaopinAction" class="com.action.zhaopinAction" scope="prototype"><property name="zhaopinDAO"><ref bean="TZhaopinDAO" /></property><property name="userDAO"><ref bean="TUserDAO" /></property></bean><bean id="TToudijianliDAO" class="com.dao.TToudijianliDAO"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><bean id="toudijianliAction" class="com.action.toudijianliAction"scope="prototype"><property name="toudijianliDAO"><ref bean="TToudijianliDAO" /></property><property name="userDAO"><ref bean="TUserDAO" /></property><property name="zhaopinDAO"><ref bean="TZhaopinDAO" /></property><property name="stuDAO"><ref bean="TStuDAO" /></property></bean></beans>
6、最终效果
6.1前台用户效果
6.2后台管理员用户效果