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());

 <%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<c:url var="url" value="/login3/toMain"></c:url> <!-- 会自动添加前面的部分 -->
<div>
<h1>${message }</h1> <!-- 登录失败后的提示信息 -->
<%--
<form action="http://localhost:8080/ssh01/login3/toMain" method="post">
--%>
<form action=${url } method="post"> <!-- 对上面一行代码的优化 -->
<div>
用 户:<input type="text" name="user.username"/> <!-- 这里的user是控制器类中的一个属性 -->
</div>
<div>
密 码:<input type="password" name="user.password" /> <!-- 这里的user是控制器类中的一个属性 -->
</div>
<div>
<input type="submit" value="登录" />
</div>
</form>
</div>
</body>
</html>

login3.jsp (登录页面)

 <%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>用户登录成功</h1>
<h2>欢迎${user.username },你已经进入到主页面啦!</h2> <!-- 获取服务器发送过来的用户名 -->
<h2>欢迎${loginName }</h2> <!-- 通过session中的数据来获取登录用户名 -->
</body>
</html>

main3.jsp (主页面)

 <?xml version="1.0" encoding="UTF-8"?>

 <!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="login3" namespace="/login3" extends="struts-default"> <!-- 请求路径:login -->
<action name="toLogin"> <!-- 请求名:toLogin -->
<result name="success">
/WEB-INF/login3.jsp
</result>
</action>
<action name="toMain" class="cn.xiangxu.action.LoginAction3"> <!-- 请求名:toMain -->
<result name="success">
/WEB-INF/main3.jsp
</result>
<result name="error">
/WEB-INF/login3.jsp
</result>
</action>
</package> </struts>

struts.xml (struts框架的配置文件)

 package cn.xiangxu.action;

 import java.util.Map;

 import org.apache.struts2.interceptor.SessionAware;

 import cn.xiangxu.entity.User;

 /**
* 浏览器项服务器发送数据的控制器类(利用域模型传递实现)
* 该类进行了登录逻辑判断,登录成功后会将登录数据保存到session对象中,登录失败会返回登录页面并且给出错误提示
* @author 三少
*
*/
public class LoginAction3 implements SessionAware { private String message; /**
* 该属性来代替 SessionAware接口 中的那个方法
*/
private Map<String, Object> session; /**
* 该属性的属性值就是浏览器发送过来的数据
*/
private User user; public String execute() {
// 判断用户名和密码,如果都正确就将用户名和密码存到session中
if(user.getUsername().trim().equals("fury") && user.getPassword().trim().equals("333")) {
session.put("loginName", user.getUsername()); // 将数据存入到session对象中,在浏览器端可以根据键来获取数据;例如:${loginName}就可以获取到session对象中的登录用户名数据
session.put("loginPassword", user.getPassword());
return "success";
}
message = "用户名或者密码错误";
return "error";
} public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} public Map<String, Object> getSession() {
return session;
} public void setSession(Map<String, Object> session) {
this.session = session;
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} }

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工作原理】的更多相关文章

  1. PHP中的Session工作原理

    一直在使用session存储数据,一直没有好好总结一下session的使用方式以及其工作原理,今天在这里做一下梳理. 这里的介绍主要是基于php语言,其他的语言操作可能会有差别,但基本的原理不变. 1 ...

  2. session 的工作原理

    session.cookie_domain session.cookie_path session.name session.save_path session.use_cokies session_ ...

  3. session的工作原理与session用法

    一直在使用session存储数据,一直没有好好总结一下session的使用方式以及其工作原理,今天在这里做一下梳理. 这里的介绍主要是基于php语言,其他的语言操作可能会有差别,但基本的原理不变. 1 ...

  4. 基于Struts2框架实现登录案例 之 使用Struts2标签库简化表单+继承ActionSupport完成输入交验

    一,使用Struts2标签库简化表单 在文章[基于Struts2框架实现登录案例]的基础上,通过使用Struts标签库可以简化登录页面login2.jsp <%@ page language=& ...

  5. Django框架之cookie和session及开发登录功能

    1.cookie是什么? Web应用程序是使用HTTP协议传输数据的.HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接.这就意味着服务器无法从 ...

  6. struts2拦截器实现session超时返回登录页面(iframe下跳转到其父页面)

    需求:session超时时,返回登录页面,由于页面嵌套在iframe下,因此要跳转到登录页面的父页面,但是首页,登录页面等不需要进行跳转 实现: java文件:SessionIterceptor.ja ...

  7. [ SSH框架 ] Struts2框架学习之二

    一.Struts2访问Servlet的API 前面已经对 Struts2的流程已经执行完成了,但是如果表单中有参数如何进行接收又或者我们需要向页面保存一些数据,又要如何完成呢?我们可以通过学习 Str ...

  8. [ SSH框架 ] Struts2框架学习之四(自定义拦截器)

    一.Struts2的拦截器 1.1 拦截器概述 拦截器,在AOP( Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截 ...

  9. struts2框架学习之第一天

    day01 Struts2概述 1 什么是框架 试想一下,人与人之间不同之处多,还是相同之处多呢?当然是相同之处多,不同之处少!人都有头,而且头都在脖子上面! 软件之间也是相同之处多,不同之处少,框架 ...

随机推荐

  1. 关于js冒泡、捕获、以及阻止冒泡

    有如下html <ul> <li> <p> <a href="javascript:;">click me</a> &l ...

  2. Mac安装SSHFS挂载远程服务器上的文件夹到本地

    一.安装SSHFUS sshfs依赖于fuse,所以需要先安装fuse,这两个软件都可以在https://osxfuse.github.io/下载到. 注意安装顺序. 二.挂载文件夹到本地 输入一下命 ...

  3. bzoj3597 方伯伯运椰子

    有一个 DAG,有一个源点,一个汇点和很多条边,每条边有花费 $d_i$ 和最大流量 $c_i$,可以花 $b_i$ 的钱把最大流量增加 $1$,花 $a_i$ 的钱把最大流量减少 $1$ 现在要进行 ...

  4. Brackets Sequence(升级版)

    个人心得:又是途径问题,我怕是又炸了.看了题解他的意思就是找出最短的添加顺序的断点,则只要 根据断点添加就好了,注意递归的奥妙之处吧,暂时还真得是拿他没办法. 题目描述: 定义合法的括号序列如下: 1 ...

  5. LeetCode Find Mode in Binary Search Tree

    原题链接在这里:https://leetcode.com/problems/find-mode-in-binary-search-tree/#/description 题目: Given a bina ...

  6. EJB到底是什么,真的那么神秘吗?? (转)

    1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么 ...

  7. docker容器的服务发现:consul

    官网:https://www.consul.io 官网文档:https://www.consul.io/docs简介 consul是一个服务发现的组件,在docker世界中他比较流行,主要是consu ...

  8. poj 3421 X-factor Chains——质因数分解

    题目:http://poj.org/problem?id=3421 记忆化搜索竟然水过去了.仔细一想时间可能有点不对,但还是水过去了. #include<iostream> #includ ...

  9. es6字符串的扩展学习笔记

    1. 传统上,JavaScript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中.ES6又提供了三种新方法. includes():返回布尔值,表示是否找到了参数字符串. st ...

  10. ECMAScript 2016(ES7) 知多少

    ECMAScript 2016(ES7) 知多少 1. 数组方法 Array.prototype.includes(value : any) : boolean 2. 幂运算符 x ** y 扩展阅读 ...