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. New Concept English three (52)

    My cousin, Harry, keeps a large curiously-shaped bottle on permanent display in his study. Despite t ...

  2. fiddler抓包

    1.fiddler安装 下载exe安装文件,傻瓜式安装 2.fiddler配置 点击Tools -->Telerik Fiddler Options -->Https,进入以下对话框 Ht ...

  3. mysql更改数据文件目录及my.ini位置。

    需求:更改mysql数据数据文件目录及my.ini位置. 步骤: 1.查找my.ini位置,可通过windows服务所对应mysql启动项,查看其对应属性->可执行文件路径,获取my.ini路径 ...

  4. PHP Smarty template for website

    /****************************************************************************** * PHP Smarty templat ...

  5. RedHat5.8 编译内核驱动 合成initrd.img

    /******************************************************************* * RedHat5.8 编译内核驱动 合成initrd.img ...

  6. python 类的定义和继承

    python 2 中类 一.类定义: ? 1 2 class <类名>:   <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性如果直接使用类 ...

  7. UVA - 11925 Generating Permutations (思维,构造)

    给你一个长度为n(n<=300)的排列,有两种操作,第一种是交换前两个数,第二种是把第一个数放到最后,让你用不超过2n^2次的操作把一个初始为1-n升序的排列变为该排列. 一开始被紫薯蛋疼的翻译 ...

  8. WPF之X名称空间学习

    WPF的X名称空间都有什么呢?首先,盗用张图来说明: 我将就图表中的内容进行总结: 1.x:Array具有一个Iteams属性,它能暴漏一个ArratList实例,ArratList实例的内部成员类型 ...

  9. Net Core 中使用 Consul 来存储配置

    Net Core 中使用 Consul 来存储配置 https://www.cnblogs.com/Rwing/p/consul-configuration-aspnet-core.html 原文: ...

  10. 51nod 1685 第K大区间2

    定义一个长度为奇数的区间的值为其所包含的的元素的中位数.中位数_百度百科 现给出n个数,求将所有长度为奇数的区间的值排序后,第K大的值为多少. 样例解释: [l,r]表示区间的值[1]:3[2]:1[ ...