用户登录几乎是每一个Web系统的必需模块,本期教程就通过用户登录模块来讲解Struts2.1.6的Action和Result的Annotation配置。
上期的Struts 2.1.6 精简实例系列教程(1):环境的搭建与HelloSimple中,我们建的package名为“cn.simple.action”,这些包名有一个规则的,只要包含“action,actions,struts,struts2”都会默认被扫描到为Action类,也就是说,我们只要配置了如“cn.simple.action”、“cn.simple.struts”、“cn.simple.action.admin”等包名,就可以不用在配置文件struts.xml(Struts2.0的配置文件)中配置这些Action类了。当然,这些包名,也可以是别的,但要写一点点配置,我们就用默认的吧。关于这方面的详细说明,还是强烈建议大家先看官方的文档http://struts.apache.org/2.1.6/docs/convention-plugin.html。
好,我们开始写我们的用户登录模块吧。先写个loginform.jsp,记得,不要忘记我们把JSP文件放在Web-Inf/content/目录下
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!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>登录页</title> </head> <body> <s:fielderror></s:fielderror> <form action="login.action" method="post"> 账号<input type="text" name="loginName" value="${loginName}"/><br/> 密码<input type="password" name="password"><br/> <input type="submit" value="登录"/> </form> </body> </html> |
大家如果想用Struts 2的标签库的话,也可以用Struts 2的Form标签,用之前,要在JSP头配置上Struts 2标签库,换成Struts 2标签的版本后,即:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!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>Insert title here</title> </head> <body> <s:fielderror></s:fielderror> <s:form action="login"> <s:textfield name="loginName"></s:textfield> <s:password name="password"></s:password> <s:submit value="登录"></s:submit> </s:form> </body> </html> |
接着,我们写一个登录处理的Action类:loginAction.java,代码如下:
package cn.simple.action; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import com.opensymphony.xwork2.ActionSupport; @Results({ @Result(name="success", location="admin/index.action", type="redirect"), @Result(name="input", location="loginform.jsp", type="dispatcher") }) public class LoginAction extends ActionSupport { private String loginName; private String password; @Override public String execute() throws Exception { return SUCCESS; } @Override public void validate() { if( ! "simple".equals(loginName)){ addFieldError("loginName", "登录名不正确!"); }else if(! "simple".equals(password)){ addFieldError("password", "密码不正确!"); } } //*******Getter和Setter方法***********// public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } |
解释一下这个类吧:
execute 这个方法是重写了父类ActionSupport的方法,是Action默认会执行的方法,即访问…/login.action或者…/login,它默认会执行这个方法。 validate 在执行execute方法之前,它会先执行validate这个方法,检查登录框是否输入正确,这个方法也是重写了父类的validate方法。 getter和setter,有了setter方法,才能使action能拿到上一个JSP页面传过来的Request域的数据;有了getter方法,下一个转发(dispatcher)过去的页面才能拿到此Action的Request域的数据。 执行过程是这样:表单提交给LoginAction,LoginAction先执行validate方法,检验loginName和password是否符合要求,如果不符合,就会addFieldError (把错误信息放到Field栈里),如果Field栈里有错误信息的话,它就不会再执行execute方法,直接转发(Dispatcher)到INPUT即“input”所指定的错误处理页面,这里为location="loginform.jsp",即让它返回到表单登录页去,如果刚才validate方法中验证正确,即Field栈中没有错误信息,就会执行execute方法。在这里execute返回SUCCESS,即“success”,根据Result注解,就会重定向到admin/index.action这个action。 |
返回SUCCESS重定向到的后台主页,其实简单,admin/index.jsp,代码很简单,就在HTML中显示一句“登录成功”,代码略。
这些的目录结构如下:
运行一下吧:
一点提醒:本项目网页的排版以精简为主,在真实的网站开发中,建议用Dreamweaver可视化排版,再作必要的修改和嵌入必要的动态标签。
“Struts 2.1.6 精简实例系列教程(2):用户登录模块的实现” 讲解就到此,你也试一下吧,好,敬请关注下文!
本文原创,转载请注明出处,谢谢!http://www.blogjava.net/rongxh7(心梦帆影JavaEE技术博客)
posted on 2009-07-21 00:14
心梦帆影 阅读(5871)
评论(2) 编辑 收藏 所属分类:
Struts2.1.6系列教程