<%@?taglib?uri="http://struts.apache.org/tags-bean"?prefix="bean"?%>
<%@?taglib?uri="http://struts.apache.org/tags-html"?prefix="html"?%>
<%@?taglib?uri="http://struts.apache.org/tags-logic"?prefix="logic"?%>
<%@?taglib?uri="http://struts.apache.org/tags-tiles"?prefix="tiles"%>?
<HTML>
<HEAD>
<TITLE>test<TITLE>
<HEAD>
<BODY>
<html:form?action="/login"?method="post">
?用戶名:<html:text?property="username"?size="15"/>?<br>
?密??碼:<html:password?property="password"?size="15"/><br>
?<html:submit?property="submit1"?style="FONT-WEIGHT:bold;COLOR:red">
??????????登??錄
<html:submit>
?<html:form>
?<BODY>
?<HTML>
3、配置struts-config.xml文件;建立action、formbean;
改配置可以自動生成,使用eclipse進(jìn)行自動生成,在建立時,如下圖,可直接生成對應(yīng)的action類和formbean類。
?1?<?xml?version="1.0"?encoding="UTF-8"?>
?2?<!DOCTYPE?struts-config?PUBLIC?"-//Apache?Software?Foundation//DTD?Struts?Configuration?1.1//EN"?"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
?3?
?4?<struts-config>
?5?????<data-sources?/>
?6?????<form-beans>
?7?????????<form-bean?name="LoginForm"?type="com.test.web.form.LoginForm"?/>
?8?
?9?????</form-beans>
10?
11?????<global-exceptions?/>
12?????<global-forwards?/>
13?????<action-mappings>
14?????????<action?attribute="LoginForm"?input="/login.jsp"?name="LoginForm"?path="LoginAction"?scope="request"?type="com.test.web.action.LoginAction" validate="true">
15?????????????<forward?name="faile"?path="faile.jsp"?/>
16?????????????<forward?name="success"?path="success.jsp"?/>
17?????????</action>
18?
19?????</action-mappings>
20?
21?????<message-resources?parameter="ApplicationResources"?/>
22?</struts-config>
對應(yīng)生成的formbean如下代碼所示:
?1?import?javax.servlet.http.HttpServletRequest;
?2?import?org.apache.struts.action.ActionErrors;
?3?import?org.apache.struts.action.ActionForm;
?4?import?org.apache.struts.action.ActionMapping;
?5?
?6??/**?
?7???*?MyEclipse?Struts
?8???*?Creation?date:?11-10-2005
?9???*?
10???*?XDoclet?definition:
11???*?@struts.form?name="LoginForm"
12???*/
13??public?class?LoginForm?extends?ActionForm?{
14??
15??????/**?password?property?*/
16??????private?String?password;
17??
18??????/**?username?property?*/
19??????private?String?username;
20??
21??
22??????/**?
23???????*?Method?validate
24???????*?@param?mapping
25???????*?@param?request
26???????*?@return?ActionErrors
27???????*/
28??????public?ActionErrors?validate(
29??????????ActionMapping?mapping,
30??????????HttpServletRequest?request)?{
31??????????
32??????????/**對頁面提交的元素進(jìn)行驗證,根據(jù)需要進(jìn)行驗證:在struts-config.xml中的 action-mapping配置設(shè)置validate="true"
33????????????????*?以下驗證才會在頁面加載時生效.
34?????????????????*/
35????????????????ActionErrors?errors?=?new?ActionErrors();
36???????????????if(username==null||username.equals(""))
37???????????????{
38????????????????errors.add("username",new?ActionMessage("username.errors"));
39???????????????????????????return?errors;
40????????????????}
41????????????????if(password==null||password.equals(""))
42???????????????{
43?????????????????errors.add("password",new?ActionMessage("password.errors"));
44????????????????????????????return?errors;
45???????????????}
46?????????????????return?errors;
47??????}
48??
49??????/**?
50???????*?Method?reset
51???????*?@param?mapping
52???????*?@param?request
53???????*/
54??????public?void?reset(ActionMapping?mapping,?HttpServletRequest?request)?{
55??
56??
57??????}
58??
59??????/**?
60???????*?Returns?the?password.
61???????*?@return?String
62???????*/
63??????public?String?getPassword()?{
64??????????return?password;
65??????}
66??
67??????/**?
68???????*?Set?the?password.
69???????*?@param?password?The?password?to?set
70???????*/
71??????public?void?setPassword(String?password)?{
72??????????this.password?=?password;
73??????}
74??
75??????/**?
76???????*?Returns?the?username.
77???????*?@return?String
78???????*/
79??????public?String?getUsername()?{
80??????????return?username;
81??????}
82??
83??????/**?
84???????*?Set?the?username.
85???????*?@param?username?The?username?to?set
86???????*/
87??????public?void?setUsername(String?username)?{
88??????????this.username?=?username;
89??????}
90??
91?}
FormBean中驗證后的提示需要在ApplicationResources_zh_CN.properties中配置提示錯誤信息.
1?username.null.error=\u5462\u79f0\u4e0d\u80fd\u4e3a\u7a7a
2?password.null.error=\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a
下面我們需要對WEB展現(xiàn)中對Action進(jìn)行配置;我們在這里主要是針對登錄進(jìn)行開發(fā).因此在action中需要完成以下步驟:
1、登錄驗證;驗證用戶名是否存在。驗證該用戶的密碼是否正確。
2、增加cookie
3、提示登錄成功。
在進(jìn)行Action類的編寫過程中,首先我們需要考慮到對數(shù)據(jù)的操作有如下步驟。
1、驗證用戶名是否存在,我們在service層需要提供一個接口:
1?Public?boolean?isExist(String?user);
來判斷用戶名是否存在,同時要考慮該用戶名對應(yīng)的密碼是否正確,需要提供接口:
1?Public?UserBasicInfo?findByUser(String?user);
通過用戶名來查找相關(guān)數(shù)據(jù)。
在Action中,我們同時要判斷根據(jù)用戶查找的用戶密碼是否正確。如果正確,增加cookie。并返回正常登錄頁面。如果用戶不存在、該用戶輸入的密碼與數(shù)據(jù)庫中的密碼不相符合。則在配置文件ApplicationResources_zh_CN.properties中,進(jìn)行設(shè)置提示報錯內(nèi)容。并在頁面中顯示。
具體Action代碼如下:
?
??1?public?ActionForward?execute(
??2?????????ActionMapping?mapping,
??3?????????ActionForm?form,
??4?????????HttpServletRequest?request,
??5?????????HttpServletResponse?response)?{
??6?????????ActionMessages?errors?=?new?ActionMessages();
??7?????????/**
??8??????????*?取得登錄用戶名與密碼
??9??????????*/
?10?????????LoginForm?lf=(LoginForm)form;
?11?????????UserBasicInfoMgr?uu?=?(UserBasicInfoMgr)getBean("userBasicInfoManager");
?12?????????/**
?13??????????*?驗證用戶名是否存在
?14??????????*/
?15?????????if(uu.isExists(lf.getUsername()))
?16?????????{
?17?????????????/**
?18??????????????*?驗證該用戶密碼是否正確
?19??????????????*/
?20?????????????if(uu.getBasicInfoByName(lf.getUsername()).getUserpwd().equals(StringUtil.encodePassword(lf.getPassword().trim(),"MD5")))
?21?????????????{
?22?????????????????/**
?23??????????????????*?用戶狀態(tài)為新增未激活,返回登錄頁面。不允許登錄。
?24??????????????????*/
?25?????????????????if(uu.getBasicInfoByName(lf.getUsername()).getUserstatus().toString().equals("1"))
?26?????????????????{
?27?????????????????????errors.add("useract",new?ActionMessage("user.activate.error"));
?28?????????????????????saveErrors(request,errors);
?29?????????????????????return?mapping.findForward("relogin");
?30?????????????????}
?31?????????????????/**
?32??????????????????*?用戶狀態(tài)為新增待核,返回登錄頁面。不允許登錄。
?33??????????????????*/
?34?????????????????if(uu.getBasicInfoByName(lf.getUsername()).getUserstatus().toString().equals("3"))
?35?????????????????{
?36?????????????????????errors.add("usercheck",new?ActionMessage("user.check.error"));
?37?????????????????????saveErrors(request,errors);
?38?????????????????????return?mapping.findForward("relogin");
?39?????????????????}
?40?????????????????/**
?41??????????????????*?用戶狀態(tài)為暫時鎖定,返回登錄頁面。不允許登錄。
?42??????????????????*/
?43?????????????????if(uu.getBasicInfoByName(lf.getUsername()).getUserstatus().toString().equals("5"))
?44?????????????????{
?45?????????????????????errors.add("userlock",new?ActionMessage("user.lock.error"));
?46?????????????????????saveErrors(request,errors);
?47?????????????????????return?mapping.findForward("relogin");
?48?????????????????}
?49?????????????????/**
?50??????????????????*?用戶狀態(tài)為已刪除,返回登錄頁面。不允許登錄。
?51??????????????????*/
?52?????????????????if(uu.getBasicInfoByName(lf.getUsername()).getUserstatus().toString().equals("6"))
?53?????????????????{
?54?????????????????????errors.add("userdel",new?ActionMessage("user.del.error"));
?55?????????????????????saveErrors(request,errors);
?56?????????????????????return?mapping.findForward("relogin");
?57?????????????????}
?58???????????????????/**
?59??????????????????*?判斷cookie時間。并保存cookie
?60??????????????????*/
?61?????????????????Cookie?cookies?=?new?Cookie("username",?lf.getUsername());
?62?????????????????cookies.setPath("/");
?63?????????????????if(lf.getCookieDate()?!=?null)
?64?????????????????{
?65?????????????????????if(lf.getCookieDate().equals("0"))
?66?????????????????????????cookies.setMaxAge(-1);
?67?????????????????????if(lf.getCookieDate().equals("1"))
?68?????????????????????????cookies.setMaxAge(0x15180);
?69?????????????????????if(lf.getCookieDate().equals("2"))
?70?????????????????????????cookies.setMaxAge(0x278d00);
?71?????????????????????if(lf.getCookieDate().equals("3"))
?72?????????????????????????cookies.setMaxAge(0x1e13380);
?73?????????????????}
?74?????????????????response.addCookie(cookies);
?75?????????????????if(!cookies.getValue().equals(uu.getBasicInfoByName(lf.getUsername()).getUseremail()))
?76?????????????????????return?mapping.findForward("relogin");
?77?????????????????CoreUserbasicinfo?cub?=?uu.getBasicInfoByName(lf.getUsername());
?78?????????????????cub.setLastipaddress(request.getRemoteAddr());
?79?????????????????cub.setLastlogindate(new?Date());
?80?????????????????uu.regUserBasicInfo(cub);
?81?????????????????String?username?=?cookies.getValue();
?82?????????????????HttpSession?session?=?request.getSession(false);
?83?????????????????if(session?==?null)
?84?????????????????????session?=?request.getSession(true);
?85?????????????????if(username?!=?null?&&?!username.equals(""))
?86?????????????????{
?87?????????????????????onLineUser?on?=?onLineUser.getInstance();
?88?????????????????????if(!on.existUser(username))
?89?????????????????????????session.setAttribute(username,?on);
?90?????????????????}
?91?????????????????/**
?92??????????????????*?傳遞參數(shù)用戶id
?93??????????????????*/
?94?????????????????request.setAttribute("uid",cub.getUserid());
?95?????????????????/**
?96??????????????????*?登錄成功,第一次登錄,需要填寫詳細(xì)資料。
?97??????????????????*/
?98?????????????????if(cub.getActsetting()==null||cub.getActsetting().equals(""))
?99?????????????????{
100?????????????????????return?mapping.findForward("login");
101?????????????????}
102?????????????????return?mapping.findForward("index");
103?????????????}else{
104?????????????????errors.add("userpwderror",?new?ActionMessage("password.error"));
105?????????????????saveErrors(request,?errors);
106?????????????????return?mapping.findForward("relogin");
107?????????????}
108?????????}else{
109??????????????errors.add("usernoterror",?new?ActionMessage("username.not.error"));
110??????????????saveErrors(request,?errors);
111??????????????return?mapping.findForward("relogin");
112?????????}
113?
114?????}
首先謝謝各位的關(guān)注,因最近項目比較緊張,一直沒有更新該文章,有點對不住了。
下面我將service層的實現(xiàn)與Dao層的實現(xiàn)與配置寫上。各位自己參考吧。
service接口實現(xiàn)
1?public?boolean?isExists(String?userEmail)?{
2?
3?????????if?(userBasicInfoDao.findByUserEmail(userEmail).size()?==?0)
4?????????????return?false;
5?????????else
6?????????????return?true;
7?????}
通過service層調(diào)用Dao層接口,進(jìn)行判斷用戶是否存在。
Dao接口實現(xiàn):
1?public?List?findByUserEmail(String?userEmail)?{
2?
3?????????return?getHibernateTemplate().find(
4?????????????????"from?CoreUserbasicinfo?cc?where?cc.useremail=?",?userEmail);
5?
6?????}
接下來,我們就需要配置spring的配置文件
applicationContext-service.xml
?1?<bean?id="userBasicInfoManager"?parent="txProxyTemplate">
?2?????????<property?name="target">
?3?
?4?????????????<bean
?5?????????????????class="包路徑.service.Impl.UserBasicInfoMgrImpl">
?6?????????????????<property?name="userBasicInfoDao">
?7?????????????????????<ref?bean="UserBasicInfoDao"?/>
?8?????????????????</property>
?9?????????????????<property?name="mailsender">
10?????????????<ref?bean="mailSender"?/>
11?????????</property>
12?????????<property?name="message">
13?????????????<ref?bean="mailMessage"?/>
14?????????</property>
15?????????????</bean>
16?????????</property>
17?????</bean>