Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之登录功能

时间:2023-03-10 05:36:04
Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之登录功能

昨天的博客中我分享了个人关于ssh实现员工管理的框架整合,今天我在分享管理员登录功能的实现。  转载请注明出处“http://www.cnblogs.com/smfx1314/p/7801389.html”

由于昨天我已经贴出目录结构,所以创建包及类这里就不在写了。现在我们来配置spring中的bean实例以及依赖注入的属性

<bean id="userAction" class="com.ssh.action.UserAction" scope="prototype">
<property name="userService" ref="userServiceImpl"></property>
</bean>
<bean id="userServiceImpl" class="com.ssh.service.impl.UserServiceImpl">
<property name="userDao" ref="userDaoImpl"></property>
</bean>
<bean id="userDaoImpl" class="com.ssh.dao.impl.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

之后我们看下index.jsp页面,我们根据form表单的action="${pageContext.request.contextPath }/user_login.action"在对应的UserAction中完成action的编写,如下

package com.ssh.action;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.ssh.entity.User;
import com.ssh.service.UserService;

public class UserAction extends ActionSupport implements ModelDriven<User>{
private static final long serialVersionUID = -635040790332368558L;

//注入UserService
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
//模型驱动
private User user=new User();
@Override
public User getModel() {
return user;
}
//登录方法
public String login(){
User u=userService.login(user);
if(u !=null){
ServletActionContext.getRequest().getSession().setAttribute("u", u);
// ActionContext.getContext().getSession().put("u", u);
return "loginsuccess";
}else{
this.addActionError("用户名或密码错误");
return "loginfail";
}
}

}

注意,方法名要和index.jsp中表单的action的user_login.action的login一致,另外上面我使用的是模型驱动。

然后在来写Struts2.xml。如下

<package name="ssh-day02" namespace="/" extends="struts-default">
<!-- 用户登录 -->
<action name="user_*" class="userAction" method="{1}">
<!-- 登录成功 -->
<result name="loginsuccess">/jsp/main.jsp</result>
<!-- 登录失败 -->
<result name="loginfail">/index.jsp</result>
</action>

</package>

上面我配置了成功和失败的返回页面。这里由于我把Struts2的action交给spring管理,所以class的路径直接是spring配置中的userAction的bean的id。

接下来,我们在看下service以及dao中的代码怎么写

UserService接口中的

package com.ssh.service;

import com.ssh.entity.User;

public interface UserService {

User login(User user);

}

userServiceImpl实现类

package com.ssh.service.impl;

import org.springframework.transaction.annotation.Transactional;

import com.ssh.dao.UserDao;
import com.ssh.entity.User;
import com.ssh.service.UserService;

@Transactional
public class UserServiceImpl implements UserService {
//注入dao
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
//登录的方法
@Override
public User login(User user) {

return userDao.login(user);
}
}

注意类上面使用了@Transactional,因为我们在spring中配置的是注解式的声明式事务,其实这里可以不写,因为只是查询,没有修改和增加。

然后在看下UserDao接口中的代码实现

package com.ssh.dao;

import com.ssh.entity.User;

public interface UserDao {

User login(User user);

}

对应的userDaoImpl实现类

package com.ssh.dao.impl;

import java.util.List;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import com.ssh.dao.UserDao;
import com.ssh.entity.User;

public class UserDaoImpl extends HibernateDaoSupport implements UserDao {

@Override
public User login(User user) {
List<User> list=(List<User>) this.getHibernateTemplate().find("from User where username=? and password=?", user.getUsername(),user.getPassword());
if(list.size()>0){
return list.get(0);
}

return null;
}

上面根据用户名和密码查询,返回时list类型,所以通过list.get(0)获取对象。

最后我们把返回成功main.jsp(失败就直接返回首页)的页面创建完成就可以运行了

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>OA后台管理 </title>

<link rel="stylesheet" href="css/index.css" type="text/css" media="screen" />

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/tendina.min.js"></script>
<script type="text/javascript" src="js/common.js"></script>

</head>
<body>
<!--顶部-->
<div class="layout_top_header">
<div style="float: left"><span style="font-size: 16px;line-height: 45px;padding-left: 20px;color: #8d8d8d">未来公司后台管理系统</h1></span></div>
<div id="ad_setting" class="ad_setting">
<a class="ad_setting_a" href="javascript:; ">
<i class="icon-user glyph-icon" style="font-size: 20px"></i>
<span>${username }</span>
<i class="icon-chevron-down glyph-icon"></i>
</a>
<ul class="dropdown-menu-uu" style="display: none" id="ad_setting_ul">
<li class="ad_setting_ul_li"> <a href="javascript:;"><i class="icon-user glyph-icon"></i> 个人中心 </a> </li>
<li class="ad_setting_ul_li"> <a href="javascript:;"><i class="icon-cog glyph-icon"></i> 设置 </a> </li>
<li class="ad_setting_ul_li"> <a href="javascript:;"><i class="icon-signout glyph-icon"></i> <span class="font-bold">退出</span> </a> </li>
</ul>
</div>
</div>
<!--顶部结束-->
<!--菜单-->
<div class="layout_left_menu">
<ul id="menu">
<!-- <li class="childUlLi">
<a href="main.html" target="menuFrame"><i class="glyph-icon icon-home"></i>首页</a>
<ul>
<li><a href="user_add.html" target="menuFrame"><i class="glyph-icon icon-chevron-right"></i>用户添加</a></li>
</ul>
</li> -->
<li class="childUlLi">
<a target="menuFrame"> <i class="glyph-icon icon-reorder"></i>员工管理</a>
<ul>
<li><a href="${pageContext.request.contextPath }/emp_findAll.action" target="menuFrame"><i class="glyph-icon icon-chevron-right"></i>显示员工列表</a></li>
<li><a href="${pageContext.request.contextPath }/emp_addPage.action" target="menuFrame"><i class="glyph-icon icon-chevron-right"></i>添加员工</a></li>
<li><a href="${pageContext.request.contextPath }/emp_listPage.action?currenPage=1" target="menuFrame"><i class="glyph-icon icon-chevron-right"></i>分页查询</a></li>
</ul>
</li>
<li class="childUlLi">
<a target="menuFrame"> <i class="glyph-icon icon-reorder"></i>部门管理</a>
<ul>
<li><a href="${pageContext.request.contextPath }/dept_findAll.action" target="menuFrame"><i class="glyph-icon icon-chevron-right"></i>查看部门</a></li>
<li><a href="${pageContext.request.contextPath }/dept_addDeptPage.action" target="menuFrame"><i class="glyph-icon icon-chevron-right"></i>添加部门</a></li>
<li><a href="${pageContext.request.contextPath }/dept_listDeptPage.action?currenPage=1" target="menuFrame"><i class="glyph-icon icon-chevron-right"></i>分页查询</a></li>
</ul>
</li>
<!-- <li class="childUlLi">
<a href="#"> <i class="glyph-icon icon-location-arrow"></i>菜单管理</a>
<ul>
<li><a href="meunbox.html" target="menuFrame"><i class="glyph-icon icon-chevron-right"></i>平台菜单</a></li>
<li><a href="meunbox_add.html" target="menuFrame"><i class="glyph-icon icon-chevron-right"></i>运行商菜单</a></li>
<li><a href="#" target="menuFrame"><i class="glyph-icon icon-chevron-right"></i>服务站菜单</a></li>
<li><a href="#" target="menuFrame"><i class="glyph-icon icon-chevron-right"></i>商家菜单</a></li>
</ul>
</li> -->
</ul>
</div>
<!--菜单-->
<div id="layout_right_content" class="layout_right_content">
<div class="mian_content">
<div id="page_content">
<iframe name="menuFrame" src="jsp/welcome.jsp" style="overflow:visible;"
scrolling="yes" frameborder="no" width="100%" height="100%">

</iframe>
</div>
</div>
</div>
<div class="layout_footer">
<p>Copyright © 2014 - XXXX科技</p>
</div>
</body>
</html>

返回成功的话,我们就直接进入后台。

备注:数据库你可以提前插入几条数据,方便测试

运行可以看到效果如下:

Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之登录功能