原创作者: 饕尽天下   阅读:11062次   评论:5条   更新时间:2011-06-01    

在本章我们将通过Session创建一个login/logout程序.该程序会对用户进行身份验证.每当你运行的时候它将获取用户id和密码(用户名/密码都是"admin").当两个字段都是正确的,显示欢迎页面.

struts.xml中创建Action映射.这就是要添加到struts.xml中的代码 :

<action name="login" class="net.roseindia.loginAction" >
        <result name="success" type="dispatcher">/pages/uiTags/Success.jsp</result>
       <result name="error" type="redirect">/pages/uiTags/Login.jsp</result>
</action>

<action name="logout" class="net.roseindia.logoutAction" >
       <result name="success" type="redirect">/pages/uiTags/checkLogin.jsp</result>
</action>

创建一个Action类来处理login请求.struts2框架提供了一个基础的ActionSupport,它实现了常用的框架接口.在我们的Action类中(loginAction.java)我们继承了ActionSupport.

这就是"loginAction"的代码 :

package net.roseindia;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import java.util.*;

public class loginAction extends ActionSupport {
  private String userId;
  private String password;
  public String execute() throws Exception{

    if ("admin".equals(userId) && "admin".equals(password)) {
      Map session = ActionContext.getContext().getSession();
      session.put("logged-in","true");
            return SUCCESS;
        }
    else{
       return ERROR;
    }
    }

    public String logout() throws Exception {

    Map session = ActionContext.getContext().getSession();
    session.remove("logged-in");
        return SUCCESS;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }
} 

同样,创建一个Action类来处理登出操作.该类(logoutAction)继承了ActionSupport

这是logoutAction的代码

package net.roseindia;
import javax.servlet.http.HttpSession;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import java.util.*;

public class logoutAction extends ActionSupport {
  public String execute() throws Exception { 
    Map session = ActionContext.getContext().getSession();
    session.remove("logged-in"); 
    return SUCCESS;
    }
} 

创建Login表单:该程序的用户界面由login表单组成(Login.jsp). "Login.jsp"向用户显示了登录页面.

这是login.jsp文件的代码 :

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page language="java" contentType="text/html"%>

<html>
    <head>
        <title>Insert Data here!</title>
     <link href="<s:url value="/css/main.css"/>" rel="stylesheet"
          type="text/css"/>  
  </head>
    <body>
    <s:form action="/roseindia/login.action" method="POST">
      <s:textfield name="userId" label="Login Id"/><br>
      <s:password name="password" label="Password"/><br>
         <s:submit value="Login" align="center"/>
    </s:form>
  </body>
</html>

当用户得到了成功的身份验证,"Success.jsp"页面显示的登录的成功信息(Welcome, you have logged-in.)session(Session Time: Wed Aug 01 11:26:38 GMT+05:30 2007 and Logout ).如果你点击"Logout",将再次显示login页面.

这是Success.jsp文件的代码 :

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page language="java" contentType="text/html" import="java.util.*"%>
<jsp:include page="/struts2tags/pages/uiTags/loginCheck.jsp" />

<html>
    <head>
        <title>Welcome, you have logined!</title>
  </head>
    <body>
    Welcome, you have logined. <br />
    <b>Session Time: </b><%=new Date(session.getLastAccessedTime())%>
      <br /><br />
      <a href="<%= request.getContextPath() %>/roseindia/logout.action">Logout</a>
      <br />
    </body>
</html>

该页面登出合法用户.

checkLogin.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page language="java" contentType="text/html" import="java.util.*"%>
<html>
    <head>
        <title>Check validate!</title>
  </head>
    <body>
      <s:if test="#session.login != 'admin'">
      <jsp:forward page="/pages/uiTags/Login.jsp" />  
      </s:if>
    </body>
</html>

输出 :

运行程序获得登录页面 :

login页面输入错误的用户id和密码 :

你将得到下面的输出 :

输入正确的用户id和密码 :

你将获得如下输出 :

点击"Logout",你将获得如下输出 :

  • 大小: 7.6 KB
  • 大小: 6.6 KB
  • 大小: 6.9 KB
  • 大小: 5.9 KB
  • 大小: 4.9 KB
评论 共 5 条 请登录后发表评论
5 楼 leodenlee 2011-04-18 17:39
4 楼 sine5544844 2011-03-29 10:42
跳不过去。。。。
3 楼 zengzitao823 2011-03-16 10:27
if ("admin".equals(userId) && "admin".equals(password))
这句话应该这样写吧  if ("admin".equals(getUserId()) && "admin".equals(getPassword()))
2 楼 mdqy195905 2009-07-06 21:35
如果不填dispatcher字段,struts2默认就是dispatcher,转发的意思,会把请求参数等相关参数传递下去,而redirect是直接跳转,会丢失请求参数。
1 楼 aguai0 2009-06-23 14:23
dispatcher和redirect 有啥区别啊

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics