随笔-42  评论-578  文章-1  trackbacks-0

用户登录几乎是每一个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中显示一句“登录成功”,代码略。

这些的目录结构如下:

image

运行一下吧:

image

image

image

一点提醒:本项目网页的排版以精简为主,在真实的网站开发中,建议用Dreamweaver可视化排版,再作必要的修改和嵌入必要的动态标签。

“Struts 2.1.6 精简实例系列教程(2):用户登录模块的实现” 讲解就到此,你也试一下吧,好,敬请关注下文!



本文原创,转载请注明出处,谢谢!http://www.blogjava.net/rongxh7(心梦帆影JavaEE技术博客)
    

posted on 2009-07-21 00:14 心梦帆影 阅读(5852) 评论(2)  编辑  收藏 所属分类: Struts2.1.6系列教程

评论:
# re: Struts 2.1.6 精简实例系列教程(2):用户登录模块的实现[未登录] 2009-07-26 16:35 | 小毅
建议把登录模块改一下:变成 ajax+json 来验证 错误提示也用ajax方式来显示 不要刷新页面  回复  更多评论
  
# re: Struts 2.1.6 精简实例系列教程(2):用户登录模块的实现 2009-07-26 17:18 | 心梦帆影
@小毅
我的教程安排中会一节“重写用户登录模块”和“用户注册模块”(整合Jquery+JSON),在新闻发布模块完成之后,敬请关注!  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: