<%
@ 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進行自動生成,在建立時,如下圖,可直接生成對應的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>
對應生成的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ù)需要進行驗證:在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進行配置;我們在這里主要是針對登錄進行開發(fā).因此在action中需要完成以下步驟:
1、登錄驗證;驗證用戶名是否存在。驗證該用戶的密碼是否正確。
2、增加cookie
3、提示登錄成功。
在進行Action類的編寫過程中,首先我們需要考慮到對數(shù)據(jù)的操作有如下步驟。
1、驗證用戶名是否存在,我們在service層需要提供一個接口:
1 Public boolean isExist(String user);
來判斷用戶名是否存在,同時要考慮該用戶名對應的密碼是否正確,需要提供接口:
1 Public UserBasicInfo findByUser(String user);
通過用戶名來查找相關(guān)數(shù)據(jù)。
在Action中,我們同時要判斷根據(jù)用戶查找的用戶密碼是否正確。如果正確,增加cookie。并返回正常登錄頁面。如果用戶不存在、該用戶輸入的密碼與數(shù)據(jù)庫中的密碼不相符合。則在配置文件ApplicationResources_zh_CN.properties中,進行設(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 * 登錄成功,第一次登錄,需要填寫詳細資料。
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層接口,進行判斷用戶是否存在。
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>