package com.loaderman.demo;

import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 用户主页的逻辑
*
*/
public class IndexServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
String html = "";
/**
* 接收request域对象的数据
*/
/*
String loginName = (String)request.getAttribute("loginName");
*/
/**
* 二、在用户主页,判断session不为空且存在指定的属性才视为登录成功!才能访问资源。
* 从session域中获取会话数据
*/
//1.得到session对象
HttpSession session = request.getSession(false);
if(session==null){
//没有登录成功,跳转到登录页面
response.sendRedirect(request.getContextPath()+"/login.html");
return;
}
//2.取出会话数据
String loginName = (String)session.getAttribute("loginName");
if(loginName==null){
//没有登录成功,跳转到登录页面
response.sendRedirect(request.getContextPath()+"/login.html");
return;
}
html = "<html><body>欢迎回来,"+loginName+",<a href='"+request.getContextPath()+"/logout'>安全退出</a></body></html>";
writer.write(html);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
} }
package com.loaderman.demo;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 处理登录的逻辑
* @author APPle
*
*/
public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//1.接收参数
String userName = request.getParameter("userName");
String userPwd = request.getParameter("userPwd"); //2.判断逻辑
if("admin".equals(userName)
&& "123456".equals(userPwd)){
//登录成功
/**
* 分析:
* context域对象:不合适,可能会覆盖数据。
* request域对象: 不合适,整个网站必须得使用转发技术来跳转页面
* session域对象:合适。
*/
/*
request.setAttribute("loginName", userName);
//request.getRequestDispatcher("/IndexServlet").forward(request, response);
response.sendRedirect(request.getContextPath()+"/IndexServlet");
*/ /**
* 一、登录成功后,把用户数据保存session对象中
*/
//1.创建session对象
HttpSession session = request.getSession();
//2.把数据保存到session域中
session.setAttribute("loginName", userName);
//3.跳转到用户主页
response.sendRedirect(request.getContextPath()+"/index"); }else{
//登录失败
//请求重定向
response.sendRedirect(request.getContextPath()+"/fail.html");
}
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
} }
package com.loaderman.demo;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 退出逻辑
*
*/
public class LogoutServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 三、安全退出:
* 删除掉session对象中指定的loginName属性即可!
*/
//1.得到session对象
HttpSession session = request.getSession(false);
if(session!=null){
//2.删除属性
session.removeAttribute("loginName");
}
//2.回来登录页面
response.sendRedirect(request.getContextPath()+"/login.html");
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

web.xml配置:

 <servlet>
<!-- servlet的内部名称,自定义。尽量有意义 -->
<servlet-name>IndexServlet</servlet-name>
<!-- servlet的类全名: 包名+简单类名 -->
<servlet-class>com.loaderman.demo.IndexServlet</servlet-class>
</servlet> <servlet-mapping>
<!-- servlet的内部名称,一定要和上面的内部名称保持一致!! -->
<servlet-name>IndexServlet</servlet-name>
<!-- servlet的映射路径(访问servlet的名称) -->
<url-pattern>/index</url-pattern>
</servlet-mapping>
<servlet>
<!-- servlet的内部名称,自定义。尽量有意义 -->
<servlet-name>LoginServlet</servlet-name>
<!-- servlet的类全名: 包名+简单类名 -->
<servlet-class>com.loaderman.demo.LoginServlet</servlet-class>
</servlet> <servlet-mapping>
<!-- servlet的内部名称,一定要和上面的内部名称保持一致!! -->
<servlet-name>LoginServlet</servlet-name>
<!-- servlet的映射路径(访问servlet的名称) -->
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<!-- servlet的内部名称,自定义。尽量有意义 -->
<servlet-name>LogoutServlet</servlet-name>
<!-- servlet的类全名: 包名+简单类名 -->
<servlet-class>com.loaderman.demo.LogoutServlet</servlet-class>
</servlet> <servlet-mapping>
<!-- servlet的内部名称,一定要和上面的内部名称保持一致!! -->
<servlet-name>LogoutServlet</servlet-name>
<!-- servlet的映射路径(访问servlet的名称) -->
<url-pattern>/logout</url-pattern>
</servlet-mapping>

fail.xml

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>信息提示页面</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body>
<font color='red' size='3'>亲, 你的用户名或密码输入有误!请重新输入!</font><br/>
<a href="/login.html">返回登录页面</a>
</body>
</html>

login.xml

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登录页面</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body>
<form action="/login" method="post">
用户名:<input type="text" name="userName"/>
<br/>
密码:<input type="text" name="userPwd"/>
<br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>

ok ,运行服务器,访问index,就可以模拟实现用户登录了~~~

Session案例-用户登录场景的更多相关文章

  1. .net MVC使用Session验证用户登录(转载)

    .net MVC使用Session验证用户登录   用最简单的Session方式记录用户登录状态 1.添加DefaultController控制器,重写OnActionExecuting方法,每次访问 ...

  2. Asp.Net使用加密cookie代替session验证用户登录状态 源码分享

    首先 session 和 cache 拥有各自的优势而存在.  他们的优劣就不在这里讨论了. 本实例仅存储用户id于用户名,对于多级权限的架构,可以自行修改增加权限字段   本实例采用vs2010编写 ...

  3. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

  4. 学习记录 java session保存用户登录

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  5. 【4】 .net MVC使用Session验证用户登录

    用最简单的Session方式记录用户登录状态 1.添加DefaultController控制器,重写OnActionExecuting方法,每次访问控制器前触发 public class Defaul ...

  6. springMVC+request.session实现用户登录和访问权限控制

    用springmvc mybatis实现用户登录登出功能,使用session保持登录状态,并实现禁止未登录的用户访问.感谢谷歌资源,在这里做个学习记录加深自己的印象. 原文在我的https://my. ...

  7. SSM整合案例--用户登录

    实现用户登录案例,并进行非法拦截 实现当用户未登录时,无法跳转到出登录页面以外的任何页面,拦截用户仍在登陆页面:当用户登录成功即可跳转到其他页面 (1)导入依赖 <!-- https://mvn ...

  8. Java 之 request 案例——用户登录

    用户登录案例需求: 1.编写login.html登录页面 username & password 两个输入框 2.使用Druid数据库连接池技术,操作mysql,db1数据库中user表 3. ...

  9. Python模拟用户登录场景

    简单模拟登录场景,将已知的用户名及密码固化,通过用户输入内容和已固化的内容比较进行判断用户名和密码是否输入正确. 在用户输入时,将密码隐藏需要导入模块getpass import getpass _u ...

随机推荐

  1. 十三,k8s集群web端管理工具dashboard部署

    目录 部署 dashboard 由于会被墙, 所以要加一步拉取镜像 正式开始安装dashboard 查看 开放访问 配置dashboard用户 1. token 令牌认证 创建一个 serviceAc ...

  2. 2.2.EJB_Bean

    1.EJB中的三种Bean 1.会话bean(sessionbean) 负责与客户端交互.是编写业务逻辑的地方.在会话Bean中可以通过jdbc直接操作数据厍.但大多数情况下都是通过实体bean来完 ...

  3. PXE+Kickstart实现批量化无人值守安装

    centos7下进行kickstart配置 配置kickstart时需要pxe芯片,为获取ip地址 1.先安装dhcpd服务器 yum install -y dhcpd 1-1.配置dhcp的配置文件 ...

  4. 【vuex】mutation和action的区别

    const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } ...

  5. 记一下拷贝windows下文件到linux下的方法

    去官网下载的Putty中包含了如下文件: 其中pscp.exe是一个远程复制文件的工具. 官网:https://www.chiark.greenend.org.uk/~sgtatham/putty/l ...

  6. CSS基础学习-11.CSS伸缩盒(新版本)

  7. cmd_memo

    1. bind host or ip:port #指定域名 curl -H 'Host:www.tsuiz.com' http://10.14.54.131:8080/check.do #指定ip和端 ...

  8. BZOJ 4031: [HEOI2015]小Z的房间 (矩阵树定理 板题)

    背结论 : 度-邻 CODE1 O(n3logn)O(n^3logn)O(n3logn) #include <bits/stdc++.h> using namespace std; typ ...

  9. [Functional Programming] Examples: When and Unless

    /** * When */ const _branch = (x) => { const result = (x && x.isPublic) ? dissoc('private ...

  10. js实现移动端悬浮图标拖拽

    /** * Created by Administrator on 2019/5/23. */ window.onload = function () { var oDiv = document.ge ...