<% @ 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 /**对页面提交的元素进行验证,根据需要进行验证:在struts-config.xml中的 action-mapping配置设置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展现中对Action进行配置;我们在这里主要是针对登录进行开发.因此在action中需要完成以下步骤:
1、登录验证;验证用户名是否存在。验证该用户的密码是否正确。
2、增加cookie
3、提示登录成功。
在进行Action类的编写过程中,首先我们需要考虑到对数据的操作有如下步骤。
1、验证用户名是否存在,我们在service层需要提供一个接口:
1 Public boolean isExist(String user);
来判断用户名是否存在,同时要考虑该用户名对应的密码是否正确,需要提供接口:
1 Public UserBasicInfo findByUser(String user);
通过用户名来查找相关数据。
在Action中,我们同时要判断根据用户查找的用户密码是否正确。如果正确,增加cookie。并返回正常登录页面。如果用户不存在、该用户输入的密码与数据库中的密码不相符合。则在配置文件ApplicationResources_zh_CN.properties中,进行设置提示报错内容。并在页面中显示。
具体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 * 用户状态为新增未激活,返回登录页面。不允许登录。
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 * 用户状态为新增待核,返回登录页面。不允许登录。
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 * 用户状态为暂时锁定,返回登录页面。不允许登录。
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 * 用户状态为已删除,返回登录页面。不允许登录。
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 * 传递参数用户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 }
首先谢谢各位的关注,因最近项目比较紧张,一直没有更新该文章,有点对不住了。
下面我将service层的实现与Dao层的实现与配置写上。各位自己参考吧。
service接口实现
1 public boolean isExists(String userEmail) {
2
3 if (userBasicInfoDao.findByUserEmail(userEmail).size() == 0)
4 return false;
5 else
6 return true;
7 }
通过service层调用Dao层接口,进行判断用户是否存在。
Dao接口实现:
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>