📜  Struts 2 SessionAware接口示例

📅  最后修改于: 2021-01-11 06:32:43             🧑  作者: Mango

SessionAware接口示例

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

SessionAware接口的方法

它仅包含一个方法setSession。

Public and abstract Method Description
void setSession(Map map) struts framework calls this method by passing the instance of SessionMap class.

SessionMap类

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

SessionMap类的方法

SessionMap类的常用方法如下:

Methods Description
public Object put(Object key, Object value) stores an attribute in the HttpSession object.
public Object remove(Object key) removes the attribute for the specified key and returns the attribute value.
public Object get(Object key) return a value for the corresponding key from the HttpSession object.
public Set entrySet() returns a set object containing all the key and value objects set in the HttpSession object.
public void invalidate() invalidates the current HttpSession object.
public void clear() removes all the attributes set in the HttpSession object.

SessionAware接口示例

此示例包含三个链接loginlogoutprofile 。您必须先登录,然后才能单击个人资料页面。登录后,您可以进入个人资料页面。如果最终用户单击注销链接,则将无法访问个人资料页面。

步骤如下:

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

1)添加struts和servlet库

您需要添加struts 2和servlet库。

2)创建index.jsp作为输入

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

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

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

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










login.jsp



/login-success.jsp
/login-error.jsp



/logout-success.jsp

 
 
/profile-success.jsp
/profile-error.jsp


    

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

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

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

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 sessionMap;

//getters and setters

@Override
public void setSession(Map 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。

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
  • 登录错误.jsp
  • 注销成功.jsp
  • profile-success.jsp
  • profile-error.jsp

查看登录组件

该页面创建登录表单。

<%@ taglib uri="/struts-tags" prefix="s" %>






此页面显示带有用户名的欢迎消息。



<%@ taglib uri="/struts-tags" prefix="s" %> Welcome,

此页面显示错误消息。



Sorry, username or password error!

查看要注销的组件

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



You are successfully logged out!

查看配置文件的组件

此页面打印欢迎使用配置文件消息。



<%@ taglib uri="/struts-tags" prefix="s" %> Welcome to Profile,

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



Sorry, username or password error!

输出量

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

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

现在,您已成功登录

现在,单击配置文件。

推荐主题