【SSH测试整合Demo】企业人事管理系统(二)

简介: 前面我们已经学习了怎么整合SSH框架了。是时候拿一个小项目来练练手了….我们现在要设计一个企业人事管理系统…

编写Service

UserService

@Transactional
@Service
public class UserService {
    @Autowired
    private UserDao userDao;
    /**
     * 1.添加员工--->add()
     * 2.修改员工--->find()
     * 3.删除员工--->delete()
     * 4.得到所有员工-->getAll()
     * 5.根据id得到员工-->find()
     */
    public void addUser(User user) {
        userDao.add(user);
    }
    public void updateUser(User user) {
        userDao.update(user);
    }
    public void deleteUser(String id) {
        userDao.delete(id);
    }
    public List<User> getAllUsers() {
        return userDao.getAll();
    }
    public User findUserById(String id) {
        return userDao.find(id);
    }
}

编写AdminService

@Transactional
@Service
public class AdminService {
    @Autowired
    private AdminDao adminDao;
    /**
     * 1.保存管理员【注册】--->save()
     * 2.查找管理员【登陆】--->login()
     */
    public void register(Admin admin) {
        adminDao.add(admin);
    }
    public Admin login(Admin admin) {
        return adminDao.login(admin);
    }
}

编写DeptService

@Transactional
@Service
public class DeptService {
    @Autowired
    private DeptDao deptDao;
    /**
     * 1.查找所有的部门【在添加员工、修改员工时需要用】-->getAll()
     * 2.通过id查找所在的部门信息--->find()
     */
    public List<Dept> getAllDept() {
        return deptDao.getAll();
    }
    public Dept findDeptById(String id) {
        return deptDao.find(id);
    }
}

员工模块

到目前为止,我们已经把后台的逻辑已经写完了,接下来就是写Action和前台的页面数据了。首先来写员工模块吧。

  • 1) 添加一个员工, 指定添加的部门
  • 2) 对指定的员工信息修改
  • 3) 删除选择员工
  • 4) 列表展示

列表展示

  • UserAction
package zhongfucheng.action;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.RequestAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import zhongfucheng.entity.User;
import zhongfucheng.service.UserService;
import java.util.List;
import java.util.Map;
/**
 * Created by ozc on 2017/5/15.
 */
@Controller
@Scope("prototype")
public class UserAction extends ActionSupport implements RequestAware{
    @Autowired
    private UserService userService;
    //因为多处用到request对象,那就直接实现接口,来得到request对象就行了
    private Map<String, Object> request;
    @Override
    public void setRequest(Map<String, Object> map) {
        this.request = map;
    }
    /*列表展示*/
    public String list() {
        List<User> list = userService.getAllUsers();
        System.out.println(list);
        //把数据封装到request对象上
        request.put("list", list);
        return "list";
    }
}

Struts配置文件

<action name="user_*" class="userAction" method="{1}">
            <!--列表展示-->
            <result name="list">/list.jsp</result>
        </action>

list.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>列表展示</title>
</head>
<body>
<s:if test="#request.list != null">
    <table align="center" border="1">
        <tr>
            <td>员工编号</td>
            <td>员工姓名</td>
            <td>员工部门编号</td>
            <td>操作</td>
        </tr>
        <s:iterator var="user" value="#request.list" status="st">
            <tr>
                <td><s:property value="#user.id"/></td>
                <td><s:property value="#user.username"/></td>
                <td><s:property value="#user.dept.id"/> </td>
                <td><s:a href="#"> 修改,删除</s:a></td>
            </tr>
        </s:iterator>
    </table>
</s:if>
<s:else>对不起,还没有员工的信息,请录入</s:else>
</body>
</html>

效果:

微信图片_20220411192655.jpg

添加员工

添加员工,指定添加部门,跳转到添加员工显示页面…

@Autowired
    private DeptService deptService;
    /*添加员工...给出添加的JSP页面*/
    public String viewAdd() {
        //在添加员工的时候需要得到所有的部门信息
        List<Dept> deptList = deptService.getAllDept();
        //封装到request域对象中
        request.put("deptList", deptList);
        return "viewAdd";
    }
<!--给出添加员工的界面-->
            <result name="viewAdd">/viewAdd.jsp</result>

显示添加员工界面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>添加员工界面</title>
</head>
<body>
<s:form method="POST" action="user_addUser.action" theme="simple">
    <table align="center" border="1">
        <tr>
            <td>员工名称</td>
            <td><s:textfield name="username" id="username" value=""/></td>
        </tr>
        <tr>
            <td>员工部门</td>
            <!--
        Struts下拉列表标签:
            name="deptId"  下拉列表标签的名称(服务器根据这个名称获取选择的项的实际的值value值)
            headerKey   默认选择项的实际的值
            headerValue  默认下拉列表显示的内容
            list      下拉列表显示数据的集合
            listKey    集合对象的哪个属性作为下拉列表的实例的值,即value值
            listValue  集合对象的哪个属性作为下拉列表显示的值
            value      默认选择的项的设置
        -->
            <td><s:select list="#request.deptList" headerKey="-1" headerValue="请选择" listKey="id" listValue="name" name="deptId"/></td>
        </tr>
        <tr>
            <td colspan="2"><s:submit value="添加员工"/></td>
        </tr>
    </table>
</s:form>
</body>
</html>
  • 在Action中使用模型驱动和数据自动封装来获取JSP页面带过来的数据:
//模型驱动
    User user = new User();
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    @Override
    public Object getModel() {
        return user;
    }
    //自动封装deptId
    private int deptId;
    public int getDeptId() {
        return deptId;
    }
    public void setDeptId(int deptId) {
        this.deptId = deptId;
    }
  • 找到要添加员工的部门,设置员工与部门的关系。添加到数据库中:
/*添加员工*/
    public String addUser() {
        //根据部门id查找部门对象
        Dept dept = deptService.findDeptById(deptId);
        //设置部门与员工的关系
        user.setDept(dept);
        userService.addUser(user);
        //返回列表展示
        return "listPage";
    }
  • 返回到列表展示页面
<!--返回列表展示页面-->
            <result name="listPage" type="redirectAction">user_list</result>

修改员工

  • 修改与删除的超链接:指明要修改用户的id【不然服务器哪知道你点击了哪一个用户】
<td>
                    <s:a href="user_viewUpdate?id=%{#user.id}">修改</s:a>
                    <s:a href="user_delete?id=%{#user.id}"> 删除</s:a>
                </td>

微信图片_20220411192742.jpg

  • 提供修改界面【其实就是回显数据】
/*为修改提供页面,其实就是回显数据*/
    public String viewUpdate() {
        //得到user
        User user = userService.findUserById(this.user.getId());
        //得到所有的部门
        List<Dept> deptList = deptService.getAllDept();
        request.put("deptList", deptList);
        //使用Struts2的回显技术
        ValueStack valueStack = ActionContext.getContext().getValueStack();
        valueStack.pop();
        valueStack.push(user);
        return "viewUpdate";
    }
<!--提供修改页面-->
            <result name="viewUpdate">/viewUpdate.jsp</result>
  • 修改页面JSP
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>修改员工界面</title>
</head>
<body>
<s:form method="POST" action="user_updateUser.action" theme="simple">
    <table align="center" border="1">
        <%--这里要把id通过隐藏域带过去--%>
        <s:hidden name="id" id="id" value="%{id}"/>
        <tr>
            <td>员工名称</td>
            <td><s:textfield name="username" id="username"/></td>
        </tr>
        <tr>
            <td>员工部门</td>
            <td>
                <s:select name="deptId"
                          list="#request.deptList"
                          listKey="id"
                          listValue="name"
                          value="dept.id"/>
            </td>
        </tr>
        <tr>
            <td colspan="2"><s:submit value="修改员工"/></td>
        </tr>
    </table>
</s:form>
</body>
</html>
  • 因为使用了模型驱动,那么Action会把JSP带过来的数据直接封装到user对象中,我们直接使用即可
/*确认修改员工,模型驱动会把数据直接封装到user对象中*/
    public String updateUser() {
        //得到部门
        Dept dept = deptService.findDeptById(deptId);
        //设置员工与部门的关系
        user.setDept(dept);
        userService.updateUser(user);
        //修改完,返回展示列表
        return "listPage";
    }
  • 效果:

微信图片_20220411192803.gif


删除员工

/*删除员工*/
    public String delete() {
        userService.deleteUser(user.getId());
        //修改完,返回展示列表
        return "listPage";
    }
  • 测试:

微信图片_20220411192808.gif


管理员模块

  • 注册
  • 登陆

注册

  • 提供注册的超链接
<s:a href="register.jsp">注册</s:a>
  • Admin.action
package zhongfucheng.action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import zhongfucheng.entity.Admin;
import zhongfucheng.service.AdminService;
/**
 * Created by ozc on 2017/5/15.
 */
@Controller
@Scope("prototype")
public class AdminAction extends ActionSupport implements ModelDriven<Admin>{
    /**********调用service**************/
    @Autowired
    private AdminService adminService;
    /**************使用模型驱动******************/
    Admin admin = new Admin();
    public Admin getAdmin() {
        return admin;
    }
    public void setAdmin(Admin admin) {
        this.admin = admin;
    }
    @Override
    public Admin getModel() {
        return admin;
    }
}
  • 配置信息
<!--############管理员模块#################-->
        <action name="admin_*" class="adminAction" method="{1}">
        </action>
  • JSP页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册界面</title>
</head>
<body>
<s:form action="admin_register" method="POST" theme="simple">
    <table border="1" align="center">
        <tr>
            <td>管理员账号:</td>
            <td><s:textfield name="username"/></td>
        </tr>
        <tr>
            <td>管理员密码:</td>
            <td><s:textfield name="password"/></td>
        </tr>
        <tr>
            <td colspan="2"><s:submit value="注册"/> </td>
        </tr>
    </table>
</s:form>
</body>
</html>
  • Action实现
/*得到JSP页面带过来的数据、完成注册*/
    public String register() {
        adminService.register(admin);
        return "listPage";
    }
  • 效果:

微信图片_20220411192947.gif


目录
相关文章
|
12天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
47 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
1月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
34 1
|
2月前
|
监控 测试技术
如何进行系统压力测试?
【10月更文挑战第11天】如何进行系统压力测试?
169 34
|
2月前
|
存储 监控 网络协议
服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
【10月更文挑战第11天】服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
149 32
|
1月前
|
缓存 监控 测试技术
全网最全压测指南!教你如何测试和优化系统极限性能
大家好,我是小米。本文将介绍如何在实际项目中进行性能压测和优化,包括单台服务器和集群压测、使用JMeter、监控CPU和内存使用率、优化Tomcat和数据库配置等方面的内容,帮助你在高并发场景下提升系统性能。希望这些实战经验能助你一臂之力!
91 3
|
2月前
|
安全 Java 数据库
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
这篇文章是关于Apache Shiro权限管理框架的详细学习指南,涵盖了Shiro的基本概念、认证与授权流程,并通过Spring Boot测试模块演示了Shiro在单应用环境下的使用,包括与IniRealm、JdbcRealm的集成以及自定义Realm的实现。
50 3
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
|
1月前
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
1月前
|
安全 测试技术 网络安全
企业为什么要做渗透测试
随着网络经济的蓬勃发展,越来越多的企业将交易平台迁移至互联网,随之而来的安全挑战也日益凸显。尽管企业在安全方面投入巨大,但往往遇到“安全性玻璃天花板”,即安全水平达到一定瓶颈后,再增加投入也无法显著提升安全效能。渗透测试作为一种有效的安全评估手段,正逐渐受到重视。它不仅能满足政策合规要求,还能帮助企业发现并修复潜在的安全漏洞,降低业务风险。渗透测试通过模拟真实攻击,全面评估系统的安全状况,为企业提供更精准的安全防护方案。
38 0
|
1月前
|
安全 测试技术 网络安全
企业为什么要做渗透测试
【10月更文挑战第29天】随着网络经济的兴起,互联网交易系统安全成为企业关注的重点。然而,企业在安全上的投入往往达到瓶颈,形成“安全性玻璃天花板”。渗透测试作为一种有效的安全评估方法,能帮助企业突破这一瓶颈。它不仅满足政策合规性要求,还能提高客户操作安全性,减少业务风险。渗透测试通过模拟黑客攻击,发现并修复系统潜在的安全隐患,使企业从被动防御转为主动应对。
23 0
|
3月前
|
Linux
kickstart自动安装系统 --DHCP 配置及测试
PXE+Kickstart自动安装系统需配置DHCP服务器分配IP。dhcpd.conf示例:设置更新样式、忽略客户端更新、指定下一服务器及启动文件。定义子网、网关、掩码、动态地址池并预留特定MAC地址。重启xinetd、NFS、DHCP服务,确保新服务器与Kickstart服务器在同一网络,避免误装其他机器。注意隔离测试网络以防干扰生产环境。
85 18

热门文章

最新文章