【struts2+hibernate+spring项目实战】实现用户登录功能(ssh)
一、概述
從今天才開始有時間來總結(jié)總結(jié)以前自己練習(xí)的一些東西,希望總結(jié)出來對以后可以更加便捷的來學(xué)習(xí),也希望可以幫助到正需要這些東西的同行人,一起學(xué)習(xí),共同進(jìn)步。
二、 登錄功能總結(jié)
2.1、登錄功能概述
這個技術(shù)主要是運(yùn)用Struts2+hibernate+spring的技術(shù)來進(jìn)行登錄功能的實(shí)現(xiàn)的,并且是在一個具體的項(xiàng)目中來實(shí)現(xiàn)的,對于以后的借鑒能夠提供便捷。
2.2、具體實(shí)現(xiàn)
2.2.1、登錄頁面的實(shí)現(xiàn)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link href="css/index.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="js/jquery-1.8.3.js"></script> <title>贛師大qualitycontrol-系統(tǒng)登錄頁</title> <script>$(function() {$("#login_ok").click(function() {$("form:first").submit();});});function MM_swapImage(srcObj,image_src){srcObj.src=image_src;} </script> </head> <body><s:actionerror/><div class="container-login"><div class="login-pic"><div class="login-text"><s:form action="emp_login" method="post"><table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td width="19%" height="28">用戶名:</td><td colspan="2"><s:textfield name="em.userName" size="18" value="admin"/></td></tr><tr><td height="31">密 碼:</td><td colspan="2"><s:textfield name="em.pwd" size="18" value="admin"/></td></tr><tr><td height="30">驗(yàn)證碼:</td><td width="43%"><input type="text" size="9" /></td><td width="32%"><img src="images/test.gif" /></td></tr><tr><td height="30"> </td><td colspan="2"><a href="javascript:void(0)" id="login_ok"><img src="images/denglu_bg_03.gif" name="Image1" width="40" height="22" border="0" onmouseover="MM_swapImage(this,'images/denglu_h_03.gif')" onmouseout="MM_swapImage(this,'images/denglu_bg_03.gif')" /></a><a href="#"><img src="images/giveup_bg_03.gif" name="Image2" width="42" height="22" border="0" onmouseover="MM_swapImage(this,'images/giveup_h_03.gif')" onmouseout="MM_swapImage(this,'images/giveup_bg_03.gif')" /></a></td></tr></table></s:form></div></div></div> </body> </html>在這里的一部分,主要是頁面的回顯和驗(yàn)證碼的顯示s:textfield name="em.userName" size="18" value="admin"/>。
2.2.2、action的實(shí)現(xiàn)
//登錄public String login(){HttpServletRequest request = getRequest();String loginIp = request.getHeader("x-forwarded-for"); if(loginIp == null || loginIp.length() == 0 || "unknown".equalsIgnoreCase(loginIp)) { loginIp = request.getHeader("Proxy-Client-IP"); } if(loginIp == null || loginIp.length() == 0 || "unknown".equalsIgnoreCase(loginIp)) { loginIp = request.getHeader("WL-Proxy-Client-IP"); } if(loginIp == null || loginIp.length() == 0 || "unknown".equalsIgnoreCase(loginIp)) { loginIp = request.getRemoteAddr(); }EmpModel loginEm = empEbi.login(em.getUserName(),em.getPwd(),loginIp);if(loginEm == null){this.addActionError("對不起,用戶名密碼錯誤!");return "loginFail";}else{//在登錄成功的時候,查詢該用戶的所有權(quán)限List<ResModel> resList = resEbi.getResByEm(loginEm.getUuid());StringBuilder sbf = new StringBuilder();for (ResModel rm : resList) {sbf.append(rm.getText());sbf.append(",");} // System.out.println("11111111111111"); // System.out.println(sbf.toString()+"=="+loginEm.getUuid()); // System.out.println("11111111111111");loginEm.setResAll(sbf.toString());putSession(EmpModel.EMP_LOGIN_USER_OBJECT_NAME, loginEm);return "loginSuccess";}}2.2.3、service實(shí)現(xiàn)
public EmpModel login(String userName, String pwd,String lastLoginIp) {//MD5加密pwd = MD5Utils.md5(pwd);//調(diào)用數(shù)據(jù)層EmpModel loginEm = empDao.getByUserNameAndPwd(userName,pwd);if(loginEm != null){//登錄成功//添加登錄信息//登錄次數(shù)+1loginEm.setLoginTimes(loginEm.getLoginTimes()+1);//最后登錄時間loginEm.setLastLoginTime(System.currentTimeMillis());//最后登錄IPloginEm.setLastLoginIp(lastLoginIp);//快照更新}return loginEm;}2.2.4、dao的實(shí)現(xiàn)
dao主要是通過用戶名和密碼來查詢這個用戶是否存在
2.2.5、用戶實(shí)體類
package org.sihai.qualitycontrol.auth.emp.vo;import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Set;import org.sihai.qualitycontrol.auth.dep.vo.DepModel; import org.sihai.qualitycontrol.auth.role.vo.RoleModel; import org.sihai.qualitycontrol.util.format.FormatUtil;public class EmpModel {public static final String EMP_LOGIN_USER_OBJECT_NAME = "loginEm";//數(shù)據(jù)結(jié)構(gòu)思想應(yīng)用public static final Integer EMP_GENDER_OF_MAN = 1;public static final Integer EMP_GENDER_OF_WOMAN = 0;public static final String EMP_GENDER_OF_MAN_VIEW = "男";public static final String EMP_GENDER_OF_WOMAN_VIEW = "女";public static final Map<Integer, String> genderMap = new HashMap<Integer, String>();static{genderMap.put(EMP_GENDER_OF_MAN, EMP_GENDER_OF_MAN_VIEW);genderMap.put(EMP_GENDER_OF_WOMAN, EMP_GENDER_OF_WOMAN_VIEW);}private Long uuid;private String userName;private String name;private String pwd;private String email;private String tele;private String address;private String lastLoginIp;private Integer loginTimes;private Long lastLoginTime;private Integer gender;private String resAll;public String getResAll() {return resAll;}public void setResAll(String resAll) {this.resAll = resAll;}/*//Long:記錄的是毫秒值 //Date:對long的包裝 優(yōu)點(diǎn):格式好,缺點(diǎn):計算時間略有復(fù)雜性現(xiàn)在的時間是2020年4月31日180天前是幾號?現(xiàn)在的long System.currentTimeMillis()-180*24*60*60*1000long-long >0Date 2014年1月4日 14:21Date 2014年1月4日 14:22 */private Long birthday;private Set<RoleModel> roles;//多對多public Set<RoleModel> getRoles() {return roles;}public void setRoles(Set<RoleModel> roles) {this.roles = roles;}//視圖值:視圖值是一種用于界面顯示的變量值,該值不具體對應(yīng)某個數(shù)據(jù)庫字段,它服務(wù)于某個數(shù)據(jù)庫字段//當(dāng)數(shù)據(jù)庫中的某個字段值不便于直接顯示時,為該字段添加視圖值,用于顯示對應(yīng)的信息//1.定義一個String類型的變量,變量名是無法合理顯示的字段的字段名+View//2.提供其get方法//3.在其對應(yīng)的變量的set方法中對這個View值進(jìn)行初始化private String birthdayView;private String genderView;private String lastLoginTimeView;public String getLastLoginTimeView() {return lastLoginTimeView;}public String getLastLoginIp() {return lastLoginIp;}public void setLastLoginIp(String lastLoginIp) {this.lastLoginIp = lastLoginIp;}public Integer getLoginTimes() {return loginTimes;}public void setLoginTimes(Integer loginTimes) {this.loginTimes = loginTimes;}public Long getLastLoginTime() {return lastLoginTime;}public void setLastLoginTime(Long lastLoginTime) {this.lastLoginTime = lastLoginTime;this.lastLoginTimeView = FormatUtil.formatDate(lastLoginTime);}public String getGenderView() {return genderView;}public String getBirthdayView() {return birthdayView;}//多對一private DepModel dm;public Long getUuid() {return uuid;}public void setUuid(Long uuid) {this.uuid = uuid;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getTele() {return tele;}public void setTele(String tele) {this.tele = tele;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public Integer getGender() {return gender;}public void setGender(Integer gender) {this.gender = gender;this.genderView = genderMap.get(gender);}public Long getBirthday() {return birthday;}public void setBirthday(Long birthday) {this.birthday = birthday;this.birthdayView = FormatUtil.formatDate(birthday);}public DepModel getDm() {return dm;}public void setDm(DepModel dm) {this.dm = dm;}}2.2.5.1、視圖值的用法
在實(shí)體類中通過對數(shù)據(jù)的轉(zhuǎn)化成頁面需要顯示的形式到頁面來顯示。
實(shí)體類中:
private String genderView; //數(shù)據(jù)結(jié)構(gòu)思想應(yīng)用public static final Integer EMP_GENDER_OF_MAN = 1;public static final Integer EMP_GENDER_OF_WOMAN = 0;public static final String EMP_GENDER_OF_MAN_VIEW = "男";public static final String EMP_GENDER_OF_WOMAN_VIEW = "女";public static final Map<Integer, String> genderMap = new HashMap<Integer, String>();static{genderMap.put(EMP_GENDER_OF_MAN, EMP_GENDER_OF_MAN_VIEW);genderMap.put(EMP_GENDER_OF_WOMAN, EMP_GENDER_OF_WOMAN_VIEW);}//通過set方法,把性別的原本的0/1,轉(zhuǎn)為男或女在頁面顯示public void setGender(Integer gender) {this.gender = gender;this.genderView = genderMap.get(gender);}頁面顯示:
${genderView}2.2.5.2、Struts2中對map的取值
<s:select name="eqm.gender" list="@org.sihai.qualitycontrol.auth.emp.vo.EmpModel@genderMap" cssStyle="width:190px" headerKey="-1" headerValue="----請-選-擇----"></s:select>這里的list的取值首先用額是Struts2的標(biāo)簽,然后運(yùn)用ognl表達(dá)式來在頁面上對map取值。
2.2.5.3、Struts2中對list的取值
<s:select name="eqm.dm.uuid" list="depList" listKey="uuid" listValue="name" cssStyle="width:190px" headerKey="-1" headerValue="----請-選-擇----"></s:select>總結(jié)
以上是生活随笔為你收集整理的【struts2+hibernate+spring项目实战】实现用户登录功能(ssh)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【struts2+hibernate+s
- 下一篇: 【struts2+hibernate+s