• ???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对象的方式

      4.1 通过工厂类获取对象

        

        注意:这种方法无需获得session对象,直接利用上下文对象就能够将数据存放到session中去

      4.2 通过注入方式获取对象:就是利用一个属性俩代替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 (实体类)
  • 相关阅读:
    71. Simplify Path
    68. Text Justification
    65. Valid Number
    64. Minimum Path Sum
    More Effective C++ 条款12 了解”抛出一个exception"与“传递一个参数”或“调用一个虚函数”之间的差异
    More Effective C++ 条款11 禁止异常流出destructor之外
    More Effective C++ 条款10 在构造函数内阻止内存泄露
    More Effective C++ 条款9 利用 destructor 避免泄露资源
    More Effective C++ 条款7 千万不要重载&&,||和,操作符
    More Effective C++ 条款6 区别 increment/decrement 操作符的前置(prefix)和后置(postfix)形式
  • 原文地址:https://www.cnblogs.com/NeverCtrl-C/p/7113303.html
Copyright © 2020-2023  润新知