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. 51nod 1428 贪心

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活动安排问题 基准时间限制:1 秒 空间限制:13107 ...

  2. Idea_学习_09_Idea 方法自动生成参数默认名

    一.方法 1.快捷键 生成方法后,还空着参数,可以使用 ctrl + alt + 空格 ,列出参数,然后选择参数即可. 2.使用插件 二.参考资料 1.Intellij Idea 方法自动生成参数默认 ...

  3. New Concept English there (60)

    33w/m 43 Punctuality is a necessary habit in all public affairs in civilized society. Without it, no ...

  4. Image Pyramid

    今天我们介绍图像处理邻域中比较常用的一种方法,image pyramid, 也叫图像金字塔.就是将图像进行一层一层的下采样,图像金字塔是为了构建图像的多尺度,让模型能够更好的适应图像的尺度变化,图像金 ...

  5. 洛谷 P3904 三只小猪

    题目背景 你听说过三只小猪的故事吗?这是一个经典的故事.很久很久以前,有三只小猪.第一只小猪用稻草建的房子,第二个小猪用木棍建的房子,第三个小猪则使用砖做为材料.一只大灰狼想吃掉它们并吹倒了稻草和木棍 ...

  6. 图的m着色问题 (回溯搜索)

    图的m着色问题 [问题描述]        给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的 ...

  7. C# 代码注释和Config文件中,特殊符号的书写方法。

    App.config: <?xml version="1.0" encoding="utf-8" ?> <configuration> ...

  8. 如何找回未保存过的 Excel 文件?

    如何找回未保存过的 Excel 文件? 同事做了一个文件,未保存直接关闭,正常是找不回来的. 但是 Excel 有一个强大的自动保存功能,对没有保存的文件也可以找回.

  9. 异常[PersistenceUnit: default] Unable to build Hibernate SessionFactory

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManage ...

  10. Nagios 里面监控MySQL事务一直RUNNING没有结束的报警Shell脚本 (转)

    序言:        业务报警订单提交异常,页面一直没有反应,排查后是事务没有提交或者回滚导致,想到如果及时监控事务的运行状态报警出来,那么就可以及时排查出问题所在,方便运营处理,所以自己就弄了一个s ...