SSH实战项目---用户管理系统

一、需求分析

1、功能需求

(1)登录验证功能

(2)用户实现查询个人信息功能

(3)系统管理员功能

  • 用户的查询、增加、修改、删除
  • 部门的查询、增加、修改、删除

2、数据库需求

(1)用户信息表

  • 存放用户的id(登录名)、名字、性别、出生日期、工作日期、密码、部门、照片、简介

(2)部门信息表

  • 存放每个部门创建时间、部门介绍、部门总人数

二、系统设计

1、系统功能结构图

在这里插入图片描述

2、数据库设计

(1)用户表(tb_userinfo)

在这里插入图片描述

(2)部门表(tb_deptinfo)

在这里插入图片描述

三、详细设计

1、登录模块设计

(1)登录页面

在这里插入图片描述

(2)用户登录流程图

在这里插入图片描述

(3)登录模块相关文件

  • 用户信息Bean:User.java
  • 用户信息Bean映射文件:Userhbm.xml
  • 用户操作类:UserDao.java
  • 登录页面:index.jsp
  • 用户登录控制器类:UserLoginController.java

(4)设计思路与主要代码

设计思路
  1. 创建用户实体类及映射文件
  2. 创建Hibernate配置文件hibernate.properties
  3. 创建Spring配置文件spring.xml
  4. 创建基于注解的事务管理类UserDao.java
1.在web.xml文件中加载spring.xml并配置核心控制器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    <servlet>
        <!-- 定义Servlet名称 -->
        <servlet-name>dispatcherServlet</servlet-name>
        <!-- Servlet具体实现类 -->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 初始化上下文对象 -->
        <init-param>
            <!--参数名称-->
            <param-name>contextConfigLocation</param-name>
            <!--加载配置文件-->
            <param-value>classpath:spring.xml</param-value>
        </init-param>
        <!--设置启动优先级-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--采用通配符映射所有以html类型的请求-->
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

    <!-- spring编码过滤器 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <!-- 编码方式 -->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <!-- 强行进行编码转换 -->
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
</web-app>
2.创建hibernatre.properties文件:src/hibernatre.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3366/db_database18?useUnicode=true&amp;characterEncoding=utf-8
username=root
password=123456
3.创建spring配置文件:src/spring.xml
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>classpath:hibernate.properties</value>
    </property>
</bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${hibernate.connection.driver}"/>
        <property name="url" value="${hibernate.connection.url}"/>
        <property name="username" value="${hibernate.connection.username}"/>
        <property name="password" value="${hibernate.connection.password}"/>
    </bean>
<!-- 配置session工厂 -->
    <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>
            </props>
        </property>
        <property name="mappingResources">
            <list>
                <value>model/User.hbm.xml</value>
            </list>
        </property>
    </bean>
<!-- 定义事物处理器 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <bean id="userDao" class="model.UserDao">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
<!-- 表单控制器 -->
<bean name="/index.html" class="controller.UserLoginController">
    <property name="commandClass" value="model.User"/>
    <property name="formView" value="login.jsp"/>
    <property name="successView" value="index.jsp"/>
    <property name="userDao" ref="userDao"/>
</bean>
4.创建User持久化类:src/model/User.java

public class User {
    
    
    private int number;//用户编号
    private String id;//登录编号
    private String name;//用户姓名
    private String sex;//用户性别
    private String birthday;//用户出生日期
    private String come;//用户入职日期
    private String pwd;//用户登陆密码
    private int dept;//用户所在部门编号
    private String face;//照片路径
    private String remark;//个人介绍
    //这里省略set、get方法
}
5.创建映射文件:src/model/User.hbm.xml
	<class name="model.User" table="tb_userinfo">
        <!-- id值 -->
        <id name="number" column="number" type="int">
            <generator class="native"/>
        </id>
        <property name="id"/>
        <property name="name"/>
        <property name="sex"/>
        <property name="birthday"/>
        <property name="come"/>
        <property name="pwd"/>
        <property name="dept"/>
        <property name="face"/>
        <property name="remark"/>
    </class>
6.创建用户信息的dao类:src/model/UserDao.java
public class UserDao {
    
    

    //注入SessionFactory对象
    private SessionFactory sessionFactory;
    public void setSessionFactory(SessionFactory sessionFactory) {
    
    
        this.sessionFactory = sessionFactory;
    }
    public Session getSession(){
    
    
        return sessionFactory.openSession();
    }

    /**
     * 登录验证该用户是否存在
     * @param user
     * @return
     */
    @Transactional(propagation= Propagation.REQUIRED,readOnly=true)
    public User fiandByIdAndPwd(User user) {
    
    
        String hql="from User u where u.id=? and u.pwd=?";
        Query query=this.getSession().createQuery(hql);
        query.setParameter(0, user.getId());
        query.setParameter(1, user.getPwd());
        User user2=(User)query.uniqueResult();
        return user2;
    }
    /**
     * 查找所有用户
     * @return
     */
    public List findAll() {
    
    
        Query query=this.getSession().createQuery("from User u,Dept d where u.dept=d.number order by u.number");
        List list = query.list();
        return list;
    }
}
7.创建用户登录控制类:src/controller.UserLoginController
public class UserLoginController extends SimpleFormController {
    
    

    @Autowired
    private UserDao userDao;
    private DeptDao deptDao;
    public void setUserDao(UserDao userDao) {
    
    
        this.userDao = userDao;
    }
    public void setDeptDao(DeptDao deptDao) {
    
    
        this.deptDao = deptDao;
    }

    public ModelAndView onSubmit(Object command) throws Exception{
    
    
        User user=(User)command;
        Map map=new HashMap();
        //判断用户名与密码是否正确
        user=userDao.fiandByIdAndPwd(user);
        if(user==null){
    
    
            map.put("error", "用户名或密码错");
            return new ModelAndView(getFormView(),"map",map);

        } else if(user.getNumber()==1) {
    
    
            map.put("user", user);
            return new ModelAndView(getSuccessView(),"map",map);
        } 
    }
}

2、管理员—登录子模块设计

(1)管理员登录后首页面

在这里插入图片描述

(2)在spring.xml中配置以下内容

  • 视图解释器
  • URL映射控制器
  • 文件名映射控制器
  • 表单控制器
<!-- 配置视图解析器 -->
<bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass">
        <value>org.springframework.web.servlet.view.JstlView</value>
    </property>
    <property name="prefix">
        <value>/WEB-INF/jsp/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>
<!-- URL映射控制器 -->
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/admin.html">forwardController</prop>
            <prop key="/top.html">forwardController</prop>
            <prop key="/left.html">forwardController</prop>
            <prop key="/main.html">forwardController</prop>
            <prop key="/bottom.html">forwardController</prop>
            <prop key="/userInfo.html">forwardController</prop>
            <!--用户登录-->
            <prop key="/index.html">userLogin</prop>
            <!--部门-->
            <prop key="/deptOperation.html">deptOperation</prop>
            <prop key="/insertOrUpdateDept.html">insertOrUpdateDept</prop>
            <!--用户-->
            <prop key="/userOperation.html">userOperation</prop>
        </props>
    </property>
</bean>
<!-- 文件名映射控制器 -->
<bean id="forwardController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/>
<!--表单控制器-->
<bean name="userLogin" class="controller.UserLoginController">
    <property name="commandClass" value="model.User"/>
    <property name="sessionForm" value="true"/>
    <property name="formView" value="index"/>
    <property name="successView" value="admin"/>
    <property name="userDao" ref="userDao"/>
    <property name="deptDao" ref="deptDao"/>
</bean>

(3)添加子模块jsp页面:web/WEB-INF/jsp/index.jsp

<body>
   <div align="center">
   <table width="500" height="195" align="center">
   <tr><td>&nbsp</td></tr>
   </table>
      <form action="" method="post">
         <table width="500" height="195" align="center" background="images/login.jpg">
            <tr>
               <td width="214">&nbsp</td>
               <td align="center" colspan="2">${map.error}</td>
            </tr>
            <tr>
               <td width="214">&nbsp</td>
               <td align="right">用户名:</td>
               <td><input type="text" name="id"/></td>
            </tr>
            <tr>
               <td width="214">&nbsp</td>
               <td align="right">密 码:</td>
               <td><input type="password" name="pwd"/></td>
            </tr>
            <tr>
               <td width="214">&nbsp</td>
               <td align="center" colspan="2"><input type="submit" value="登录"/></td>
            </tr>
         </table>
      </form>
   </div>
</body>

(4)在jsp文件下添加管理员登录页面:web/WEB-INF/jsp/admin.jsp

  <frameset rows="167,*,73" cols="*" frameborder="no" border="0" framespacing="0">
     <frame src="top.html" name="topFrame" scrolling="No" noresize="noresize" id="topFrame" />
     <frameset cols="196,*" frameborder="no" border="0" framespacing="0">
        <frame src="left.html" name="leftFrame" scrolling="No" noresize="noresize" id="leftFrame" />
        <frame src="main.html" name="mainFrame" id="mainFrame" />
     </frameset>
     <frame src="bottom.html" name="topFrame" scrolling="No" noresize="noresize" id="topFrame" />
     <frame>
  </frameset>
  <noframes>
     <body></body>
  </noframes>

(5)在jsp文件下添加普通用户登录页面:web/WEB-INF/jsp/userInfo.jsp

<body>
  <table width="765" height="710" align="center" background="images/userInfo.jpg">
   <tr>
      <td>
         <div>
                <table width="500" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#000000">
                    <tr>
                      <td height="24" colspan="5" align="center" bgcolor="#FFFFFF"><span class="STYLE6">用户信息</span></td>
                    </tr>
                    <tr>
                      <td height="24" rowspan="4" align="center" valign="middle" bgcolor="#FFFFFF"><img src="face/${map.user.face}"/></td>
                      <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">用户姓名:</span></td>
                      <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">${map.user.name}</span></td>
                      <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">用户性别:</span></td>
                      <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">${map.user.sex}</span></td>
                    </tr>
                    <tr>
                      <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">出生日期:</span></td>
                      <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">${map.user.birthday}</span></td>
                      <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">入职日期:</span></td>
                      <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">${map.user.come}</span></td>
                    </tr>
                    <tr>
                      <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">个人简介:</span></td>
                      <td height="24" colspan="3" bgcolor="#FFFFFF"><span class="STYLE6">${map.user.remark}</span></td>
                    </tr>
                </table>
                <br>
                <table width="500" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#000000">
                  <tr>
                    <td height="24" colspan="4" align="center" bgcolor="#FFFFFF" class="STYLE6">所在部门信息</td>
                  </tr>
                  <tr>
                    <td height="24" bgcolor="#FFFFFF" align="center" class="STYLE6">部门名称:</td>
                    <td height="24" bgcolor="#FFFFFF" align="center" class="STYLE6">${map.dept.name}</td>
                  </tr>
                  <tr>
                    <td height="24" bgcolor="#FFFFFF" align="center" class="STYLE6">建立时间:</td>
                    <td height="24" bgcolor="#FFFFFF" align="center" class="STYLE6">${map.dept.createDate}</td>
                  </tr>
                  <tr>
                    <td height="24" bgcolor="#FFFFFF" align="center" class="STYLE6">部门总人数:</td>
                    <td height="24" colspan="3" bgcolor="#FFFFFF" align="center" class="STYLE6">${map.dept.totalnumber}</td>
                  </tr>
                    <tr>
                        <td height="24" bgcolor="#FFFFFF" align="center" class="STYLE6">部门介绍:</td>
                        <td height="24" colspan="3" bgcolor="#FFFFFF" align="center" class="STYLE6">${map.dept.remark}</td>
                    </tr>
              </table>
                <br>
                <center><a href="index.html">退出</a></center>
         </div>
      </td>
   </tr>
  </table>
  </body>

3、管理员—部门管理模块设计

(1)部门管理页面

在这里插入图片描述

(2)登录模块相关文件

  • 部门信息Bean:Dept.java
  • 部门信息Bean映射文件:Dept.hbm.xml
  • 基于注解的部门操作类:DeptDao.java
  • 部门信息模块页面:WEB-INF/jsp/dept/showDept.jsp、insertOrUpdateDept.jsp
  • 部门操作控制器类:DeptOperationController

(3)设计思路与主要代码

设计思路
  1. 创建部门实体类及映射文件
  2. 创建Spring配置文件spring.xml
  3. 创建基于注解的事务管理的DeptDao
  4. 创建部门模块jsp页面文件
  5. 创建部门信息模块多动作控制器
1.创建实体类Dept和映射文件Dept.hbm.xml
private int number;
private String name;
private String createDate;
private String remark;
private Integer totalnumber;
	<class name="dept.Dept" table="tb_deptinfo">
        <!-- id值 -->
        <id name="number" column="number" type="int">
            <generator class="native"/>
        </id>
        <property name="name"/>
        <property name="createDate"/>
        <property name="remark"/>
        <property name="totalnumber" type="java.lang.Integer"/>
    </class>
2.在WEB-INF\jsp下创建文件夹dept,在其下showDept.jsp页面,用于显示所有部门记录
<body>
   <table background="images/23_03.gif" width="755px" height="27px" border="0" align="left" cellpadding="0" cellspacing="0">
       <tr>
          <td width="20px">&nbsp;</td>
          <td><span class="STYLE1">当前位置-&gt;部门管理首页</span></td>
       </tr>
   </table>
   <br>
   <br>
<table width="775">
   <tr>
      <td height="40" align="center"><a href="insertOrUpdateDept.html">注册新部门</a></td>
   </tr>
</table>
<table  style="position: relative;top: 0px;left: 50px" width="650" border="1" cellpadding="0" cellspacing="1" bordercolor="#F0F4FF" bgcolor="#999999">
       <tr>
         <td height="24" bgcolor="#F0F4FF"><div align="center" class="STYLE5">部门编号</div></td>
         <td bgcolor="#F0F4FF"><div align="center" class="STYLE5">部门名称</div></td>
         <td bgcolor="#F0F4FF"><div align="center" class="STYLE5">部门成立日期</div></td>
         <td bgcolor="#F0F4FF"><div align="center" class="STYLE5">部门介绍</div></td>
         <td bgcolor="#F0F4FF"><div align="center" class="STYLE5">部门总人数</div></td>
         <td bgcolor="#F0F4FF"><div align="center" class="STYLE5">操作</div></td>
       </tr>
       <c:forEach items="${list}" var="item" varStatus="i">
         <tr>
           <td height="24" bgcolor="#F0F4FF"><div align="center" class="STYLE3">
             <c:out value="${item.number}"/>
           </div></td>
           <td bgcolor="#F0F4FF"><div align="center" class="STYLE3">
             <c:out value="${item.name}"/>
           </div></td>
           <td bgcolor="#F0F4FF"><div align="center" class="STYLE3">
             <c:out value="${item.createDate}"/>
           </div></td>
           <td bgcolor="#F0F4FF"><div align="center" class="STYLE3">
             <c:out value="${item.remark}"/>
           </div></td>
             <td bgcolor="#F0F4FF"><div align="center" class="STYLE3">
                 <c:out value="${item.totalnumber}"/>
             </div></td>
           <td bgcolor="#F0F4FF"><div align="center" class="STYLE3">
               <a href="deptOperation.html?method=findById&number=${item.number}">修改</a>&nbsp;&nbsp;
               <a href="deptOperation.html?method=deleteDept&number=${item.number}">删除</a></div></td>
         </tr>
       </c:forEach>
 </table>
 </body>
3.创建部门Dao类:src/dept.DeptDao.java
public class DeptDao {
    
    

    //注入SessionFactory对象
    private SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
    
    
        this.sessionFactory = sessionFactory;
    }
    public Session getSession(){
    
    
        return sessionFactory.openSession();
    }

    //查找所有部门信息
    public List<Object> findAll() {
    
    
        Query query = this.getSession().createQuery("from Dept");
        List list = query.list();
        return list;
    }
}
4.在spring.xml配置文件中修改如下:
<!--部门信息多动控制器-->
<bean id="deptOperation" class="controller.DeptOperationController">
    <property name="deptDao" ref="deptDao"/>
    <property name="userDao" ref="userDao"/>
    <property name="methodNameResolver" ref="methodNameResolver"/>
</bean>
<!-- 方法名解析器 -->
<bean id="methodNameResolver"
      class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
    <property name="paramName" value="method"/>
</bean>

在< URL映射控制器 >中添加

<!--部门-->
<prop key="/deptOperation.html">deptOperation</prop>
<prop key="/insertOrUpdateDept.html">insertOrUpdateDept</prop>
5.注册部门信息的

在showDept.jsp中提交:insertOrUpdateDept.html
URL映射控制器:
< prop key="/insertOrUpdateDept.html">insertOrUpdateDept< /prop>
通过参数映射控制器转发到页面:dept/insertOrUpdateDept.jsp中输入数据
< !-- 参数映射控制器 -->
< bean id=“insertOrUpdateDept”
class=“org.springframework.web.servlet.mvc.ParameterizableViewController”>
< property name=“viewName” value=“dept/insertOrUpdateDept” />
< /bean>
输入数据后提交到多动作控制器deptOperation中:deptOperation.html?method=insertOrUpdateDept
多动作控制器DeptOperationCotroller中添加插入方法insertOrUpdateDept

//部门的插入与修改
public ModelAndView insertOrUpdateDept(HttpServletRequest request,HttpServletResponse response){
    
    
    Dept dept = new Dept();
    dept.setCreateDate(request.getParameter("createDate"));
    dept.setName(request.getParameter("name"));
    dept.setNumber(Integer.valueOf(request.getParameter("number")));
    dept.setRemark(request.getParameter("remark"));
    dept.setTotalnumber(Integer.parseInt(request.getParameter("totalnumber")));
    if(dept.getNumber()==0){
    
    
        deptDao.insert(dept);
    }else {
    
    
        deptDao.save(dept);//其它情况直接保存
    }
    return showDept(request,response);
}

在DeptDao中添加插入和更新的方法

//插入部门信息
public void insert(Dept dept) {
    
    
    getSession().save(dept);
}
//保存部门信息
public void save(Dept dept) {
    
    
    Session session = getSession();
    session.update(dept);
    session.flush();//更新到数据库
}
6.修改和删除部门信息

在showDept.jsp中提交:deptOperation.html?method=findById
先按部门编号(number)查找,并将查找结果作用Model返回到dept/insertOrUpdateDept

//修改部门
public ModelAndView findById(HttpServletRequest request,HttpServletResponse response){
    
    
    Dept dept = deptDao.findById(Integer.valueOf(request.getParameter("number")));
    return new ModelAndView("dept/insertOrUpdateDept","dept",dept);
}

在showDept.jsp中提交:deptOperation.html?method=deleteDept

注意
(1) 先查询该部门中是否存在员工,若存在,则返回不能删除的信息,若不存在则删除。
(2) 在UserDao中添加部门查询方法(findBydept),查询该部门是否有人员,并在DeptDao中添加删除方法(delete)

/**
 * 查询指定部门中是否有人员
 * @param number
 * @return
 */
public boolean findBydept(Integer number) {
    
    
    Query query=this.getSession().createQuery("from User where dept="+number);
    List list = query.list();
    if (list.isEmpty()){
    
    
        return true;
    }
    return false;
}
//删除部门信息
public void delete(Integer number) {
    
    
    Session session = getSession();
    Dept dept = (Dept) session.load(Dept.class, number);
    session.delete(dept);
    session.flush();//更新到数据库
}

(3)在配置文件spring.xml中添加如下

<!--部门信息多动控制器-->
<bean id="deptOperation" class="controller.DeptOperationController">
    <property name="deptDao" ref="deptDao"/>
    <property name="userDao" ref="userDao"/>
    <property name="methodNameResolver" ref="methodNameResolver"/>
</bean>

(4)将UserDao注入到DeptOperationController

private UserDao userDao;
public void setUserDao(UserDao userDao) {
    
    
    this.userDao = userDao;
}

(5)在DeptOperationController中添加deleteDept方法实现删除部门功能

//删除部门
public ModelAndView deleteDept(HttpServletRequest request,HttpServletResponse response) throws Exception{
    
    
    //先获取要删除的部门编号
    Integer number = Integer.valueOf(request.getParameter("number"));
    //在删除部门之前先查询该部门中有没有员工,如果有则不能删除该部门
    boolean bool = userDao.findBydept(number);
    String message = "";   //提示信息
    if(bool){
    
      //部门中没有员工,可以删除
        deptDao.delete(number);    //调用删除的方法
        message = "部门删除成功!";
    }else{
    
        //有员工属于该部门
        message = "不能删除有员工的部门!";
    }
    PrintWriter out = response.getWriter();    //获取our对象
    out.print("<script type='text/javascript'>");
    out.print("alert('"+message+"');");       //输出提示信息
    out.print("window.location='deptOperation.html?method=showDept';");    //转入部门管理首页
    out.print("</script>");
    out.close();   //关闭out对象
    return null;
}

4、管理员—用户管理模块设计

(1)用户管理页面

在这里插入图片描述

(2)设计思路与主要代码

设计思路:
  1. 修改Spring配置文件spring.xml
  2. 在UserDao类中添加插入、修改、删除操作
  3. 创建用户模块jsp页面文件
  4. 创建用户信息模块多动作控制器
1.修改spring.xml配置文件
<!-- 参数映射控制器 -->
<bean id="insertOrUpdateDept"
      class="org.springframework.web.servlet.mvc.ParameterizableViewController">
    <property name="viewName" value="dept/insertOrUpdateDept"/>
</bean>

<!--用户-->
<prop key="/userOperation.html">userOperation</prop>

<!--用户信息多动控制器-->
<bean id="userOperation" class="controller.UserOperationController">
    <property name="deptDao" ref="deptDao"/>
    <property name="userDao" ref="userDao"/>
    <property name="methodNameResolver" ref="methodNameResolver"/>
</bean>
2.添加多动作控制器类UserOperationCotroller
public class UserOperationController extends MultiActionController {
    
    

    //注入dao类
    private DeptDao deptDao;
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
    
    
        this.userDao = userDao;
    }
    public void setDeptDao(DeptDao deptDao) {
    
    
        this.deptDao = deptDao;
    }

    //显示所有用户
    public ModelAndView showUser(HttpServletRequest request, HttpServletResponse response){
    
    
        List list = userDao.findAll();
        return new ModelAndView("user/showUser","list",list);
    }

    //查找指定用户
    public ModelAndView findById(HttpServletRequest request,HttpServletResponse response){
    
    
        String number = request.getParameter("number");
        List list = deptDao.findAll();
        /***
         * 创建新用户
         */
        if(number==null || number.equals("")){
    
    
            return  new ModelAndView("user/insertUser","map",list);
        }
        /***
         * 修改用户信息
         */
        else {
    
    
            User user = userDao.findNumber(Integer.valueOf(number));
            Map map = new HashMap();
            map.put("user",user);
            map.put("list",list);
            return  new ModelAndView("user/updateUser","map",map);
        }
    }

    //插入用户信息
    public ModelAndView insertUser(HttpServletRequest request,HttpServletResponse response) throws IOException {
    
    
        User user = getUser(request,response);
        //判断用户id是否可用
        if(userDao.findId(user)){
    
    
            //该用户名可用
            userDao.Insert(user);
            return showUser(request,response);
        }else {
    
     // 登录账号已经被使用
            PrintWriter out = response.getWriter(); // 获取out对象
            out.print("<script type='text/javascript'>");
            out.print("alert('不能用此登录账号注册,此账号已经被使用!');");// 输出提示信息
            out.print("window.history.go(-1);"); // 后退网页
            out.print("</script>");
            out.close();
        }
        return null;
    }

    //修改用户信息
    public ModelAndView updateUser(HttpServletRequest request,HttpServletResponse response){
    
    
        User user = getUser(request,response);
        user.setNumber(Integer.valueOf(request.getParameter("number")));
        userDao.update(user);
        return showUser(request,response);
    }

    //删除用户信息
    public ModelAndView deleteUser(HttpServletRequest request,HttpServletResponse response){
    
    
        Integer number = Integer.valueOf(request.getParameter("number"));
        userDao.delete(number);
        return showUser(request,response);
    }

    //获取浏览器中输入的用户信息
    private User getUser(HttpServletRequest request, HttpServletResponse response) {
    
    
        User user = new User();
        user.setBirthday(request.getParameter("birthday"));
        user.setCome(request.getParameter("come"));
        user.setDept(Integer.valueOf(request.getParameter("dept")));
        user.setFace(request.getParameter("face"));
        user.setId(request.getParameter("id"));
        user.setName(request.getParameter("name"));
        user.setPwd(request.getParameter("pwd"));
        user.setRemark(request.getParameter("remark"));
        user.setSex(request.getParameter("sex"));
        return user;
    }
}
3.在UserDao类中添加插入、修改、删除操作方法
/**
 * 判断用户登录名是否已经存在
 * @param user
 * @return
 */
public boolean findId(User user) {
    
    
    String hql="from User where id="+user.getId();
    Query query=this.getSession().createQuery(hql);
    List list = query.list();
    if (list.isEmpty()){
    
    
        //表示没有同名的用户,该名可用
        return true;
    }
    return false;
}

public void Insert(User user) {
    
    
    getSession().save(user);
}

public void update(User user) {
    
    
    Session session = this.getSession();
    session.update(user);
    session.flush();
}

//删除用户信息
@Transactional(propagation = Propagation.REQUIRED)
public void delete(Integer number){
    
    
    Session session = this.getSession();//开启session
    User user = (User)session.load(User.class,number);
    session.delete(user);//删除数据
    session.flush();
}

5、普通用户模块设计

(1)修改controller.UserLoginController,注入DeptDao类用来显示所处部门信息
private DeptDao deptDao;
public void setDeptDao(DeptDao deptDao) {
    
    
    this.deptDao = deptDao;
}

public ModelAndView onSubmit(Object command) throws Exception{
    
    
    User user=(User)command;
    Map map=new HashMap();
    //判断用户名与密码是否正确
    user=userDao.fiandByIdAndPwd(user);
    if(user==null){
    
    
        map.put("error", "用户名或密码错");
        return new ModelAndView(getFormView(),"map",map);

    } else if(user.getNumber()==1) {
    
    
        map.put("user", user);
        return new ModelAndView(getSuccessView(),"map",map);
    } else {
    
    
        Dept dept = deptDao.findById(user.getDept());
        map.put("user", user);
        map.put("dept",dept);
        return new ModelAndView("userInfo","map",map);
    }
}
(2)添加普通用户页面:WEB-INF/jsp/userInfo.jsp
<body>
 <table width="765" height="710" align="center" background="images/userInfo.jpg">
   <tr>
   <td>
      <div>
               <table width="500" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#000000">
                   <tr>
                     <td height="24" colspan="5" align="center" bgcolor="#FFFFFF"><span class="STYLE6">用户信息</span></td>
                   </tr>
                   <tr>
                     <td height="24" rowspan="4" align="center" valign="middle" bgcolor="#FFFFFF"><img src="face/${map.user.face}"/></td>
                     <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">用户姓名:</span></td>
                     <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">${map.user.name}</span></td>
                     <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">用户性别:</span></td>
                     <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">${map.user.sex}</span></td>
                   </tr>
                   <tr>
                     <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">出生日期:</span></td>
                     <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">${map.user.birthday}</span></td>
                     <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">入职日期:</span></td>
                     <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">${map.user.come}</span></td>
                   </tr>
                   <tr>
                     <td height="24" bgcolor="#FFFFFF"><span class="STYLE6">个人简介:</span></td>
                     <td height="24" colspan="3" bgcolor="#FFFFFF"><span class="STYLE6">${map.user.remark}</span></td>
                   </tr>
               </table>
               <br>
               <table width="500" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#000000">
                 <tr>
                   <td height="24" colspan="4" align="center" bgcolor="#FFFFFF" class="STYLE6">所在部门信息</td>
                 </tr>
                 <tr>
                   <td height="24" bgcolor="#FFFFFF" align="center" class="STYLE6">部门名称:</td>
                   <td height="24" bgcolor="#FFFFFF" align="center" class="STYLE6">${map.dept.name}</td>
                 </tr>
                 <tr>
                   <td height="24" bgcolor="#FFFFFF" align="center" class="STYLE6">建立时间:</td>
                   <td height="24" bgcolor="#FFFFFF" align="center" class="STYLE6">${map.dept.createDate}</td>
                 </tr>
                 <tr>
                   <td height="24" bgcolor="#FFFFFF" align="center" class="STYLE6">部门总人数:</td>
                   <td height="24" colspan="3" bgcolor="#FFFFFF" align="center" class="STYLE6">${map.dept.totalnumber}</td>
                 </tr>
                   <tr>
                       <td height="24" bgcolor="#FFFFFF" align="center" class="STYLE6">部门介绍:</td>
                       <td height="24" colspan="3" bgcolor="#FFFFFF" align="center" class="STYLE6">${map.dept.remark}</td>
                   </tr>
             </table>
               <br>
               <center><a href="index.html">退出</a></center>
      </div>
   </td>
</tr>
 </table>
 </body>

四、运行结果

1、登陆错误页面:

在这里插入图片描述

2、普通用户登录:

在这里插入图片描述

3、管理员登录:

在这里插入图片描述

4、部门管理:

在这里插入图片描述

5、注册新部门:

在这里插入图片描述
在这里插入图片描述

6、修改部门信息:

在这里插入图片描述

7、删除部门:

在这里插入图片描述
在这里插入图片描述

8、用户管理:

在这里插入图片描述

9、注册新用户:

在这里插入图片描述
在这里插入图片描述

10、修改用户信息:

在这里插入图片描述
在这里插入图片描述

11、删除用户信息:

在这里插入图片描述

注意:源码可到个人博客资源下载里面自行下载哈!!!

猜你喜欢

转载自blog.csdn.net/hcz666/article/details/114012202