通过Session 登入/登出

本文介绍如何使用Struts2框架实现基本的登录和注销功能。通过配置struts.xml文件和编写Action类处理用户登录请求,同时利用Session管理用户的登录状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

地址: http://struts2.group.iteye.com/group/wiki/1654-18-through-session-login-logout

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

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

Xml代码 复制代码 收藏代码
  1. <action name="login" class="net.roseindia.loginAction" > 
  2.         <result name="success" type="dispatcher">/pages/uiTags/Success.jsp</result> 
  3.        <result name="error" type="redirect">/pages/uiTags/Login.jsp</result> 
  4. </action> 
  5.  
  6. <action name="logout" class="net.roseindia.logoutAction" > 
  7.        <result name="success" type="redirect">/pages/uiTags/checkLogin.jsp</result> 
  8. </action> 
<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"的代码 :

Java代码 复制代码 收藏代码
  1. package net.roseindia; 
  2. import com.opensymphony.xwork2.ActionSupport; 
  3. import com.opensymphony.xwork2.ActionContext; 
  4. import java.util.*; 
  5.  
  6. public class loginAction extends ActionSupport { 
  7.   private String userId; 
  8.   private String password; 
  9.   public String execute() throws Exception{ 
  10.  
  11.     if ("admin".equals(userId) && "admin".equals(password)) { 
  12.       Map session = ActionContext.getContext().getSession(); 
  13.       session.put("logged-in","true"); 
  14.             return SUCCESS; 
  15.         } 
  16.     else{ 
  17.        return ERROR; 
  18.     } 
  19.     } 
  20.  
  21.     public String logout() throws Exception { 
  22.  
  23.     Map session = ActionContext.getContext().getSession(); 
  24.     session.remove("logged-in"); 
  25.         return SUCCESS; 
  26.     } 
  27.  
  28.     public String getPassword() { 
  29.         return password; 
  30.     } 
  31.  
  32.     public void setPassword(String password) { 
  33.         this.password = password; 
  34.     } 
  35.  
  36.     public String getUserId() { 
  37.         return userId; 
  38.     } 
  39.  
  40.     public void setUserId(String userId) { 
  41.         this.userId = userId; 
  42.     } 
  43. }  
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的代码

Java代码 复制代码 收藏代码
  1. package net.roseindia; 
  2. import javax.servlet.http.HttpSession; 
  3. import com.opensymphony.xwork2.ActionSupport; 
  4. import com.opensymphony.xwork2.ActionContext; 
  5. import java.util.*; 
  6.  
  7. public class logoutAction extends ActionSupport { 
  8.   public String execute() throws Exception {  
  9.     Map session = ActionContext.getContext().getSession(); 
  10.     session.remove("logged-in");  
  11.     return SUCCESS; 
  12.     } 
  13. }  
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文件的代码 :

Html代码 复制代码 收藏代码
  1. <%@ taglib prefix="s" uri="/struts-tags" %> 
  2. <%@ page language="java" contentType="text/html"%> 
  3.  
  4. <html> 
  5.     <head> 
  6.         <title>Insert Data here!</title> 
  7.      <link href="<s:url value="/css/main.css"/>" rel="stylesheet" 
  8.           type="text/css"/>   
  9.   </head> 
  10.     <body> 
  11.     <s:form action="/roseindia/login.action" method="POST"> 
  12.       <s:textfield name="userId" label="Login Id"/><br> 
  13.       <s:password name="password" label="Password"/><br> 
  14.          <s:submit value="Login" align="center"/> 
  15.     </s:form> 
  16.   </body> 
  17. </html> 
<%@ 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文件的代码 :

Html代码 复制代码 收藏代码
  1. <%@ taglib prefix="s" uri="/struts-tags" %> 
  2. <%@ page language="java" contentType="text/html" import="java.util.*"%> 
  3. <jsp:include page="/struts2tags/pages/uiTags/loginCheck.jsp" /> 
  4.  
  5. <html> 
  6.     <head> 
  7.         <title>Welcome, you have logined!</title> 
  8.   </head> 
  9.     <body> 
  10.     Welcome, you have logined. <br /> 
  11.     <b>Session Time: </b><%=new Date(session.getLastAccessedTime())%> 
  12.       <br /><br /> 
  13.       <a href="<%= request.getContextPath() %>/roseindia/logout.action">Logout</a> 
  14.       <br /> 
  15.     </body> 
  16. </html> 
<%@ 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

Html代码 复制代码 收藏代码
  1. <%@ taglib prefix="s" uri="/struts-tags" %> 
  2. <%@ page language="java" contentType="text/html" import="java.util.*"%> 
  3. <html> 
  4.     <head> 
  5.         <title>Check validate!</title> 
  6.   </head> 
  7.     <body> 
  8.       <s:if test="#session.login != 'admin'"> 
  9.       <jsp:forward page="/pages/uiTags/Login.jsp" />   
  10.       </s:if> 
  11.     </body> 
  12. </html> 
<%@ 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"后,你将获得如下输出 :

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值