个性化阅读
专注于IT技术分析

Struts 2 SessionAware接口用法示例图解

  1. SessionAware接口示例
  2. SessionMap类
  3. SessionAware接口示例

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

SessionAware接口的方法

它仅包含一个方法setSession。

公共和抽象方法 Description
setSession(Map <String, Object>映射) struts框架通过传递SessionMap类的实例来调用此方法。

SessionMap类

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

SessionMap类的方法

SessionMap类的常用方法如下:

Methods Description
公共对象放置(对象键, 对象值) 将属性存储在HttpSession对象中。
公共对象删除(对象键) 删除指定键的属性并返回属性值。
公共对象的get(对象键) 从HttpSession对象返回相应键的值。
公共Set entrySet() 返回一个包含所有在HttpSession对象中设置的键和值对象的set对象。
公共无效invalidate() 使当前的HttpSession对象无效。
公共无效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库。

下载struts2 jar文件

下载servlet-api.jar文件


2)创建index.jsp作为输入

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

index.jsp

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

3)在struts.xml中定义动作并生成结果

该xml文件定义了一个包和4个动作。每个动作至少定义一个结果页面。

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

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.srcmini.Login" method="execute">
<result name="success">/login-success.jsp</result>
<result name="login">/login-error.jsp</result>
</action>

<action name="logout" class="com.srcmini.Login" method="logout">
<result name="success">/logout-success.jsp</result>
</action>
 
 <action name="profile" class="com.srcmini.Profile" method="execute">
<result name="success">/profile-success.jsp</result>
<result name="login">/profile-error.jsp</result>
</action>
</package>
</struts>

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

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

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

Login.java

package com.srcmini;

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.srcmini;

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
  • 登录错误.jsp
  • 注销成功.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"/>

登录错误.jsp

此页面显示错误消息。

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

查看要注销的组件

注销成功.jsp

该页面仅显示成功注销的消息。

<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"/>

profile-error.jsp

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

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

下载此示例(在不带jar的Eclipse IDE中开发)

下载此示例(在Myeclipse IDE中开发)


输出

struts 2 sessionaware示例输出1

如果单击概要文件链接, 那么你将被转发到profile-error.jsp

struts 2 sessionaware示例输出2

现在, 输入你的姓名作为名称, 并输入admin作为密码。

struts 2 sessionaware示例输出3

现在, 你已成功登录

struts 2 sessionaware示例输出4

现在, 单击配置文件。

struts 2 sessionaware示例输出5

推荐主题

Oracle数据库的登录和注销示例

赞(0) 打赏
未经允许不得转载:srcmini » Struts 2 SessionAware接口用法示例图解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏