猿教程 Logo

SessionAware接口

SessionAware接口必须由Action类来实现,用于将信息存储在会话范围内。


SessionAware接口方法

它只包含一个setSession方法。

方法描述
void setSession(Map<String,Object> map)struts框架通过传递SessionMap类的实例来调用此方法。

SessionMap类

struts 2框架传递org.apache.struts2.dispatcher.SessionMap的实例。 它扩展了实现java.util.Map.SessionMap的java.util.AbstractMap类。 SessionMap类有很多有用的方法。


SessionMap类的方法

SessionMap类常用的方法如下:

方法描述
public Object put(Object key, Object value)在HttpSession对象中存储一个属性。
public Object remove(Object key)删除指定键的属性并返回属性值。
public Object get(Object key)从HttpSession对象返回相应键的值。
public Set entrySet()返回一个包含HttpSession对象中设置的所有键和值对象的集合对象。
public void invalidate()使当前的HttpSession对象无效。
public void clear()删除HttpSession对象中设置的所有属性。

SessionAware接口示例

此示例包含三个链接登录,注销和配置文件。 您无法点击个人资料页面,直到您登录。登录后,您可以访问个人资料页面。 如果最终用户点击退出链接,他将无法访问该配置文件页面。

步骤如下:

  1. 添加struts和servlet库
  2. index.jsp用于提供登录,注销和配置文件的链接。
  3. 用于定义结果和操作的struts.xml。
  4. Login.java用于定义登录和注销逻辑。
  5. Profile.java用于检查用户是否登录。
  6. 查看显示结果的组件。

1)添加struts和servlet库

您需要添加struts 2和servlet库。


2)创建index.jsp进行输入

这个jsp页面创建三个用于登录,注销和配置文件的链接。

index.jsp

<a href="loginform">Login</a>|  
<a href="logout">Logout</a>|  
<a href="profile">Profile</a>



3)在struts.xml中定义action和result

这个xml文件定义了一个package和4个action。 每个action定义至少一个结果页。

对于loginprocess和logout操作,我们使用相同的action类,但调用方法不同。

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">  
<struts>  
  
<constant name="struts.devMode" value="true"></constant>  
  
<package name="abc" extends="struts-default" >  
  
<action name="loginform">  
<result>login.jsp</result>  
</action>  
  
<action name="login" class="com.javatpoint.Login" method="execute">  
<result name="success">/login-success.jsp</result>  
<result name="login">/login-error.jsp</result>  
</action>  
  
<action name="logout" class="com.javatpoint.Login" method="logout">  
<result name="success">/logout-success.jsp</result>  
</action>  
   
 <action name="profile" class="com.javatpoint.Profile" method="execute">  
<result name="success">/profile-success.jsp</result>  
<result name="login">/profile-error.jsp</result>  
</action>  
</package>  
</struts>



4)创建用于登录和注销的action类

此操作类实现SessionAware接口,并覆盖setSession方法以将信息存储在会话范围中。

对于注销,我们只是调用SessionMap的invalidate()方法。

Login.java

package com.javatpoint;

import java.util.Map;

import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;

public class Login implements SessionAware{
private String name,password;
private SessionMap<String,Object> sessionMap;

//getters and setters

@Override
public void setSession(Map<String, Object> map) {
	sessionMap=(SessionMap)map;
}

public String execute(){
if(password.equals("admin")){
	sessionMap.put("login","true");
	sessionMap.put("name",name);
	
	return "success";
}
else{
	return "login";
}
}

public String logout(){
	if(sessionMap!=null){
		sessionMap.invalidate();
	}
	return "success";
}

}

5)创建Profile类

该类从会话范围获取信息,如果在会话范围中发现任何信息与登录名,则返回成功否则为false。

Profile.java

package com.javatpoint;

import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;

public class Profile{

	public String execute(){
		HttpSession session=ServletActionContext.getRequest().getSession(false);
		if(session==null || session.getAttribute("login")==null){
			return "login";
		}
		else{
			return "success";
		}
	}
}

6)创建视图组件

有很多视图组件:

  • login.jsp

  • login-success.jsp

  • login-error.jsp

  • logout-success.jsp

  • profile-success.jsp

  • profile-error.jsp

此页面创建登录表单。

login.jsp

<%@ taglib uri="/struts-tags" prefix="s" %>  
  
<s:form action="login">  
<s:textfield name="name" label="Name"></s:textfield>  
<s:password name="password" label="Password"></s:password>  
<s:submit value="login"></s:submit>  
</s:form>

此页面打印带有用户名的欢迎信息。

login-success.jsp

<jsp:include page="index.jsp"></jsp:include>  
<hr>  
<%@ taglib uri="/struts-tags" prefix="s" %>  
  
Welcome, <s:property value="#session.name"/>

此页面显示错误消息。

login-error.jsp

<jsp:include page="index.jsp"></jsp:include>  
<hr>  
Sorry, username or password error!  
<jsp:include page="login.jsp"></jsp:include>


此页面只显示成功注销的消息。

<jsp:include page="index.jsp"></jsp:include>  
<hr>  
<p>You are successfully logged out!</p>



查看配置文件的组件

此页面打印欢迎来到个人资料消息。

profile-success.jsp

<jsp:include page="index.jsp"></jsp:include>  
<hr>  
<%@ taglib uri="/struts-tags" prefix="s" %>  
  
Welcome to Profile, <s:property value="#session.name"/>

此页面打印需要先登录的消息,并包括login.jsp页面。

profile-error.jsp 

<jsp:include page="index.jsp"></jsp:include>  
<hr>  
Sorry, username or password error!  
<jsp:include page="login.jsp"></jsp:include>



输出


如果您点击配置文件链接,您将被转发到profile-error.jsp


现在输入您的姓名和管理员密码。


现在,您已成功登录


现在,点击配置文件。



版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Struts/struts-2-SessionAware-interface-example.html