???Struts2框架03 session的使用登录逻辑session工作原理

Posted 寻渝记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了???Struts2框架03 session的使用登录逻辑session工作原理相关的知识,希望对你有一定的参考价值。

 

1 登录逻辑

  1.1 获取登录数据(例如:用户民、密码)

  1.2 在控制层调用业务层来验证数据信息

  1.3 登录成功:保存用户信息(服务器用session、浏览器用cookie),跳转到主页满

  1.4 登录失败:留在登录页面,并给出错误提示信息

 

2 什么是session

  就是一个会话对象,有服务器创建,目的是为了共享数据(注意:每一个浏览器对应一个session对象)

 

3 session的工作原理

  待更新...

  2017年7月3日21:53:09

 

4 在struts2中获取session对象的方式

  通过工厂类获取对象:待更新...  2017年7月3日21:54:35

  通过注入方式获取对象:就是利用一个属性俩代替SessionAware接口中的 setSession 方法

 

5 如何使用session对象(以登录逻辑为例)

  5.1 控制器实现SessionAware接口,但是不用实现该接口的方法;通过创建一个session属性来代替

    利用

      private Map<String, Object> session;

    代替      

      public void setSession(Map<String, Object> arg0) {
        // TODO Auto-generated method stub

      }

  5.2 注入session对象(就是定义一个属性名为session的属性,并且实现set/get方法)

  5.3 调用sessionAP来保存数据

     session.put("loginPassword", user.getPassword());

技术分享
 1 <%@ page language="java" contentType="text/html; charset=utf-8"
 2     pageEncoding="utf-8"%>
 3     
 4 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 5     
 6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 7 <html>
 8 <head>
 9 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
10 <title>Insert title here</title>
11 </head>
12 <body>
13     <c:url var="url" value="/login3/toMain"></c:url> <!-- 会自动添加前面的部分 -->
14     <div>
15         <h1>${message }</h1> <!-- 登录失败后的提示信息 -->
16         <%-- 
17         <form action="http://localhost:8080/ssh01/login3/toMain" method="post">
18         --%>
19         <form action=${url } method="post"> <!-- 对上面一行代码的优化 -->
20             <div>
21                 用    户:<input type="text" name="user.username"/> <!-- 这里的user是控制器类中的一个属性 -->
22             </div>
23             <div>
24                 密    码:<input type="password" name="user.password" /> <!-- 这里的user是控制器类中的一个属性 -->
25             </div>
26             <div>
27                 <input type="submit" value="登录" />
28             </div>
29         </form>
30     </div>
31 </body>
32 </html>
login3.jsp (登录页面)
技术分享
 1 <%@ page language="java" contentType="text/html; charset=utf-8"
 2     pageEncoding="utf-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10     <h1>用户登录成功</h1>
11     <h2>欢迎${user.username },你已经进入到主页面啦!</h2> <!-- 获取服务器发送过来的用户名 -->
12     <h2>欢迎${loginName }</h2> <!-- 通过session中的数据来获取登录用户名 -->
13 </body>
14 </html>
main3.jsp (主页面)
技术分享
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <!DOCTYPE struts PUBLIC
 4     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 5     "http://struts.apache.org/dtds/struts-2.3.dtd">
 6 
 7 <struts>
 8     
 9     
10     <package name="login3" namespace="/login3" extends="struts-default"> <!-- 请求路径:login -->
11         <action name="toLogin"> <!-- 请求名:toLogin -->
12             <result name="success">
13                 /WEB-INF/login3.jsp
14             </result>
15         </action>
16         <action name="toMain" class="cn.xiangxu.action.LoginAction3"> <!-- 请求名:toMain -->
17             <result name="success">
18                 /WEB-INF/main3.jsp
19             </result>
20             <result name="error">
21                 /WEB-INF/login3.jsp
22             </result>
23         </action>
24     </package>
25     
26 </struts>
struts.xml (struts框架的配置文件)
技术分享
 1 package cn.xiangxu.action;
 2 
 3 import java.util.Map;
 4 
 5 import org.apache.struts2.interceptor.SessionAware;
 6 
 7 import cn.xiangxu.entity.User;
 8 
 9 /**
10  * 浏览器项服务器发送数据的控制器类(利用域模型传递实现)
11  * 该类进行了登录逻辑判断,登录成功后会将登录数据保存到session对象中,登录失败会返回登录页面并且给出错误提示
12  * @author 三少
13  *
14  */
15 public class LoginAction3 implements SessionAware {
16     
17     private String message;
18     
19     /**
20      * 该属性来代替 SessionAware接口 中的那个方法
21      */
22     private Map<String, Object> session;
23     
24     /**
25      * 该属性的属性值就是浏览器发送过来的数据
26      */
27     private User user;
28     
29     public String execute() {
30         // 判断用户名和密码,如果都正确就将用户名和密码存到session中
31         if(user.getUsername().trim().equals("fury") && user.getPassword().trim().equals("333")) {
32             session.put("loginName", user.getUsername());  // 将数据存入到session对象中,在浏览器端可以根据键来获取数据;例如:${loginName}就可以获取到session对象中的登录用户名数据
33             session.put("loginPassword", user.getPassword());
34             return "success";
35         }
36         message = "用户名或者密码错误";
37         return "error";
38     }
39 
40     public String getMessage() {
41         return message;
42     }
43 
44     public void setMessage(String message) {
45         this.message = message;
46     }
47 
48     public Map<String, Object> getSession() {
49         return session;
50     }
51 
52     public void setSession(Map<String, Object> session) {
53         this.session = session;
54     }
55 
56     public User getUser() {
57         return user;
58     }
59 
60     public void setUser(User user) {
61         this.user = user;
62     }
63 
64 }
LoginAction3.java (控制器类)
技术分享
package cn.xiangxu.entity;

/**
 * 登录信息实体类
 * @author 三少
 *
 */
public class User {
    private String username;
    private String password;
    
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password + "]";
    }
    
}
User.java (实体类)

 




以上是关于???Struts2框架03 session的使用登录逻辑session工作原理的主要内容,如果未能解决你的问题,请参考以下文章

SSH学习-Struts2中的session

struts2中我想把结果放入到session中ActionContext.getContext().getSession()

Struts2+DAO层实现实例03——添加监听器跟踪用户行为

struts2中的session使用

Struts2 (下)

Struts2笔记 - 03 拦截器