Session实现用户登录(九)

2023-10-29

(一)创建登录页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/Project01/LoginServlet"  method="post">

  用户名:<input  name="username" type="text"><br/><br/>
  密      码:<input  name="password" type="password"><br/><br/>
 <input  type="submit"  value="提交">
</form>

</body>
</html>

(二)使用HttpServletRequest对象处理登陆数据

package com.Test;

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;
//此类处理login.html表单提交
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        String username=request.getParameter("username");
        String password=request.getParameter("password");
        PrintWriter out=response.getWriter();
        //1.把账号、密码分别设置为root、123
        if(username.equals("root")&&password.equals("123")){
            //2.创建User对象保存账号、密码
            User user=new User();
            user.setUsername(username);
            user.setPassword(password);

            //3.创建Session对象保存User对象
            request.getSession().setAttribute("user", user);

            //4.登陆成功跳转指定页面
            response.sendRedirect("/Project01/IndexServlet");
        }
        else{
            out.println("账号或密码错误,请从新输入....");
        }
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doGet(request, response);
    }

}

(三)验证登录成功跳转到IndexServlet类

package com.Test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
//1.创建IndexServlet显示网站的首界面 
public class IndexServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //2.response解决乱码问题
        response.setContentType("text/html;charset=utf-8");
        //3.创建Session对象保存用户信息
        HttpSession session=request.getSession();
        //4.方法体中的参数要与setAttribute()键一致
        User user=(User) session.getAttribute("user");
        if(user==null){
            response.getWriter().print("您还未登陆,请<a href='/Project01/login.html'>登陆</a>");
        }else{
            response.getWriter().print("您已登陆,欢迎您 "+user.getUsername());
            response.getWriter().print("<a href='/Project01/LogoutServlet'>退出</a>");

            //5.创建Cookie对象用来保存Session的id
            Cookie cookie=new Cookie("JSESSIONID",session.getId());
            cookie.setMaxAge(30*60);
            cookie.setPath("/Project01");
            response.addCookie(cookie);
        }


    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doGet(request, response);
    }

}

(四)LogoutServlet 类用于完成用户注销

package com.Test;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//此类用于处理用户注销
public class LogoutServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //1.Session对象删除保存User对象
        request.getSession().removeAttribute("user");
        response.sendRedirect("/Project01/IndexServlet");
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doGet(request, response);
    }

}

(五)配置各个Servlet类

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Project01</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>IndexServlet</display-name>
    <servlet-name>IndexServlet</servlet-name>
    <servlet-class>com.Test.IndexServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>IndexServlet</servlet-name>
    <url-pattern>/IndexServlet</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>LoginServlet</display-name>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.Test.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>LogoutServlet</display-name>
    <servlet-name>LogoutServlet</servlet-name>
    <servlet-class>com.Test.LogoutServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LogoutServlet</servlet-name>
    <url-pattern>/LogoutServlet</url-pattern>
  </servlet-mapping>
</web-app>

结果演示:

这里写图片描述


这里写图片描述


这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Session实现用户登录(九) 的相关文章

随机推荐

  • [LeetCode] Valid Triangle Number 合法的三角形个数 (Java)

    题目 Given an array consists of non negative integers your task is to count the number of triplets chosen from the array t
  • 使用Mask-RCNN训练自己的数据集看这一篇就够了,从制作数据集开始一步步教你如何玩转Mask-RCNN(保姆级教程)

    一 安装labelme 深度学习算法等基于神经网络的算法都是基于数据驱动的 数据的好坏会影响你最后生成的模型的好坏 在使用Mask RCNN时 第一件事就是标注数据集 这里我们默认你已经配置好了anaconda的环境 如果你没有配置好可以参
  • 大一上--数科作业(连载完结篇)

    说明 read me please 本篇目旨在讲解 所附代码为片段截取式 每一个片段侧重于展现一项功能 不同片段各有省略和重合部分 完整项目代码详见GitHub哦 注意看代码注释 可以说是 相 当 之 详 细 不吹 目录 功能要求 流程概况
  • python3 杀死进程

    在windows10杀死进程 exe os system taskkill f im s exe 转载于 https www cnblogs com shaosks p 10112934 html
  • Idea HTTP Proxy代理设置

    我们开发项目时 经常会和第三方接口打交道 有些第三方项目为了安全起见 会把项目部署在 内网 环境 不对外暴露 通常会提供VPN代理才能访问到资源 以IDEA开发举例 配置HTTP代理的方式如下 左上角File gt Setting 找到如下
  • veracrypt源码编译

    环境准备 1 windows7 旗舰版 64位 2 vs2010专业版 VS2010 旗舰版和专业版 下载 3 Microsoft Visual C 1 52 microsoft visual c 1 52 编译16位程序VC版本 16位
  • 查询及删除重复记录的方法

    一 1 查找表中多余的重复记录 重复记录是根据单个字段 peopleId 来判断 select from people where peopleId in select peopleId from people group by peopl
  • Fabric-商业票据项目说明

    商业票据项目 PaperNet network PaperNet是一个商业票据网络 允许适当授权的参与者发行 交易 赎回和评级商业票据 PaperNet 商业票据网络 6个机构参与 行为有 发行 购买 出售 赎回 评级 MagentoCor
  • 最长公共子序列-动态规划-python

    题目描述 给定一个长度为 N 数组 a 和一个长度为 M 的数组 b 请你求出它们的最长公共子序列长度为多少 输入描述 输入第一行包含两个整数 N M 分别表示数组 a 和 b 的长度 第二行包含 N 个整数 a1 a2 an 第三行包含
  • matlab相关性分析

    相关性分析 一 皮尔逊相关系数 person 计算公式 样本协方差 C o v x y
  • 三个可长期发展的网络副业,稳定的兼职渠道,不再为网络做苦力

    绝大多数互联网从业者 实际上脑中想得仅有一件事 没脑子的打金月入破万 不否认这类第二职业也是有 但是也是必须必要条件的 你必须早期非常辛苦 后边才可能保证大批量躺着赚钱 而与一开始就听话照做 这也是两回事 我一直都不太建议去做这些稳准狠项目
  • 【shell重试脚本示例】

    handle interrupt echo Received Ctrl C to terminate the command exit 1 log info echo e echo e e 1 32m INFO e 0m 1 echo e
  • ssh远程登录协议和tcp wappers

    目录 SSH服务 优点 SSH客户端和服务端 SSH端口 配置文件 ssh原理 公钥传输原理 ssh加密通讯原理 配置OpenSSH服务端 服务监听选项 登录 scp远程复制 TCP Wrappers 策略的配置格式 轻量级自动化运维工具p
  • Qt中文手册 之 QTreeWidgetItem

    头文件 include
  • umi 导航菜单的空白页问题

    主思路 routes里的上级菜单必须设定path 否则下一个二级菜单会出现空白页 详情 umi的导航菜单是在 config routes ts 里设定的 比如 export default name home path home compo
  • 在计算机睡眠时主机关闭,电脑为什么睡眠后就关机怎么办

    1 电脑睡眠后再次启动时就关机怎么办 桌面 属性 屏幕保护程序 在下方有个 在按下计算机睡眠按钮时 你选中 待机 补充 再按下待机按钮啊 补充 你待机后 想重新打开电脑就再按下电源按钮就行了啊 不行的话桌面 属性 屏幕保护程序 电源 高级
  • MongoDB 查看集合中所有的数据

    找到mongodb的安装路径下bin目录 运行mongo exe 输入show dbs 命令 查看数据库 进入要使用的数据库 命令 use 数据库名字 查看该数据库中的集合 命令 show collections 查看里面所有的数据 命令
  • css预处理器

    一 为什么会出现css预处理器 CSS不是一种编程语言 仅仅只能用来编写网站样式 在web初期时 网站的搭建还比较基础 所需要的样式往往也很简单 但是随着用户需求的增加以及网站技术的升级 css一成不变的写法也渐渐不再满足于项目 没有类似j
  • 高并发+海量数据下如何实现系统解耦?【中】

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 一 前情提示 二 清晰划分系统边界 三 引入消息中间件解耦 四 利用消息中间件削峰填谷 五 手动流量开关配合数据库运维 六 支持多系统同时订阅数据 七 系统解耦
  • Session实现用户登录(九)

    一 创建登录页面