Servlet(二)

news2025/1/12 5:08:46

目录

1.Cookie 和 Session

1.1HttpServletRequest 类中的相关方法

1.HttpSession getSession()

2.Cookie[] getCookies()

1.2HttpServletResponse 类中的相关方法

1.void addCookie(Cookie cookie)

1.3HttpSession 类中的相关方法

1.4Cookie 类中的相关方法

1.5网页登录

1.流程图

 2.步骤

2.上传文件

2.1方法

1.HttpServletRequest方法

2.Part类方法


1.Cookie 和 Session

Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定

1.1HttpServletRequest 类中的相关方法

1.HttpSession getSession()

参数如果为 true, 则当不存在会话时新建会话;

参数如果为 false, 则当不存在会话时返回 null

getSession():

1.创建会话

获取请求中的cookie的sessionId字段(相当于会话的身份标识)

        1.判断是否服务器存在,不存在,进入创建会话逻辑

        2.创建会话:创建HttpSession对象(作为value),生成sessionId(作为key),把键值对,存到服务器内存中

        3.服务器会返回一个HTTP响应,把sessionId通过Set-Cookie字段返回给服务器,浏览器就保存到sessionId到cookie.

2.获取会话

        1.获取请求中的sessionId

        2.判断是否在服务器存在过

        3.如果有,查询HttpSession对象,返回

2.Cookie[] getCookies()

请求cookie的数据,返回数组,每个元素是cookie对象,有两个属性

1.2HttpServletResponse 类中的相关方法

1.void addCookie(Cookie cookie)

添加cookie信息到响应报文中.添加的键值对,会作为http响应的set-cookie字段中表示

1.3HttpSession 类中的相关方法

方法

描述

Object getAttribute(Stringname)

该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null.

void setAttribute(Stringname, Object value)

该方法使用指定的名称绑定一个对象到该 session 会话

boolean isNew()

判定当前是否是新创建出的会话

1.4Cookie 类中的相关方法

每个 Cookie 对象就是一个键值对

方法

描述

String getName()

该方法返回 cookie 的名称。名称在创建后不能改变。(这个值是 SetCooke 字段设置给浏览器的)

String getValue()

该方法获取与 cookie 关联的值

void setValue(StringnewValue)

该方法设置与 cookie 关联的值。

1.5网页登录

1.流程图

 2.步骤

1.约定交互接口

        1.登录交互

                a.请求:

                        POST/login

                        Content-Type:application/x-www-form-urlencoded

                        username=zhang&password=123

                b.响应

                        302

                        Location:index

        2.主页的交互

                a.请求

                         GET/index

                b.响应

                        200

                        Content-Type:text/html

三次交互:

1.第一次:浏览器从服务器拿到登录页面

2.第二次:点击登录后,给服务器发送一个登录请求,服务器会响应主页

3.第三次:浏览器收到302后,向服务器发送请求,访问主页

会话可以保存任何信息,也可以实现记录当前用户访问的次数

1.编写页面,用form表单构造post请求

通过input实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
    <form action="login" method="post">
        <input type="text" name="username">
        <input type="password" name="password">
        <input type="submit" value="登录">
    </form>
</body>
</html>

 

 

2.编写servlet处理登录请求(处理用户请求)

        1.获取信息

        2.判断输入信息是否正确

        3.登录成功

                1.创建会话,保存身份信息

                2.在会话中存入身份信息,和登录次数

                3.跳转页面

        4. 登录失败

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String username=req.getParameter("username");
        String password=req.getParameter("password");
        //username放在equals中,如果为空直接返回false,避免因为为空引起异常
        if("zhang".equals(username)&&"123".equals(password)){
            HttpSession httpSession= req.getSession();
            httpSession.setAttribute("username",username);
            httpSession.setAttribute("count",0);
            resp.sendRedirect("index");
        }else{
            resp.getWriter().write("login failed!");
        }


    }
}

 

 

3.编写服务器返回主页的逻辑

        1.得到会话

        2.从HttpSession得到用户名和count

         3.count自增后放回到会话中

        4.设置类型

        5.输出

@WebServlet("/index")
public class IndexServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession httpSession=req.getSession(false);
        String username= (String) httpSession.getAttribute("username");
        Integer count= (Integer) httpSession.getAttribute("count");
        count++;
        httpSession.setAttribute("count",count);
        resp.setContentType("text/html;charset=utf8");
        resp.getWriter().write("<h3>欢迎你!"+username+"第"+count+"次访问页面<h3>");
    }
}

 

 

 

 

2.上传文件

2.1方法

1.HttpServletRequest方法

方法描述
Part getPart(String name)获取请求中给定名字的文件
Coolection<Part> getParts()获取所有文件

上传文件前端用form表单,要使用特殊的类型form-data,提交文件时,文件内容以form-data构造的HTTP请求中,服务器通过getPart中获取

2.Part类方法

方法描述
String getSubmittedFileName()获取提交文件名
String getContentType()获取提交的文件类型
long getSize()获取文件的大小
void write(String Path)

把提交的文件数据写入磁盘文件

上传文件

前端:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
   <form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="MyImage">
    <input type="submit" value="提交">
   </form>
</body>
</html>

后端:

上传文件要加注解

@MultipartConfig
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Part part= req.getPart("MyImage");
        System.out.println(part.getSubmittedFileName());
        System.out.println(part.getContentType());
        System.out.println(part.getSize());
        part.write("d:/java1/bbb.jpg");
        resp.setContentType("text/html;charset=utf8");
        resp.getWriter().write("上传成功");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/444267.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解Spring Security

目录 1.概述 2.登录 2.1.默认用户 2.2.自定义用户 2.3.加密 2.4.绕过加密 2.5.怎么传递用户信息 2.6.记住我 3.登出 4.使用数据库 4.1.jdbcAuthentication 4.2.userDetailsService 5.自定义处理器 6.更多细粒度的控制 7.原理简述 1.概述 Spring Security是一个…

使用 Kubernetes 运行 non-root .NET 容器

翻译自 Richard Lander 的博客 Rootless 或 non-root Linux 容器一直是 .NET 容器团队最需要的功能。我们最近宣布了所有 .NET 8 容器镜像都可以通过一行代码配置为 non-root 用户。今天的文章将介绍如何使用 Kubernetes 处理 non-root 托管。 您可以尝试使用我们的 non-root…

gateway报 netty堆外内存溢出问题解决io.netty.util.internal.OutOfDirectMemoryError

昨天线上网关突然无法访问。打开日志看到错误信息“io.netty.util.internal.OutOfDirectMemoryError” 堆外内存溢出。。这也没碰到过啊&#xff0c;看来今天准点下班的愿望又落空了。老规矩面向百度编程。先看看网上有没有其他兄弟碰到这个问题。一顿搜索之后发现&#xff0c;…

已解决windows pycocotools安装失败问题 —— 超简单

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,YOLO,活动领域博主爱笑的男孩。擅长深度学习,YOLO,活动,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect个人…

分库分表与分布式主键生成策略详解--一个无数人踩过却一直被人忽视的深坑

文章目录 一、从分库分表的一个神坑说起二、分布式主键要考虑哪些问题&#xff1f;三、主要的主键生成策略1、数据库策略2、应用单独生成3、第三方服务统一生成4、与第三方结合的segment策略 四、定制雪花算法1、如影随形的时钟回拨问题2、用主键生成策略优化分配工作进程位3、…

萤石“小步快走”,跨进智能家居生态圈

文丨智能相对论 作者丨Kinki 近日&#xff0c;萤石网络&#xff08;下称“萤石”&#xff09;举办了2023春季新品发布会&#xff0c;这是公司上市以来的首个新品发布会&#xff0c;除了拳头产品智能家居摄像机之外&#xff0c;还有智能入户产品、TV Studio等十多款新品&#…

NC65 集团业务参数 GLS01参数值的默认值作用是什么?

NC65 集团业务参数 GLS01参数值的默认值作用是什么&#xff1f; 用在总账系统的所有账簿。如果设置的期间个数大于12&#xff0c;还得要求所查询的账表支持跨年查询&#xff0c;比如科目余额表&#xff0c;不支持跨年&#xff08;注意&#xff1a;这里说的不支持跨年是指余额为…

4.2.1朴素模式匹配算法

什么是字符串的模式匹配&#xff1a; 从这段字符串里面搜索内容&#xff0c;被搜索的字符串我们称之为主串。 也可能匹配不到 主串长度为n&#xff0c;模式串长度为m。 朴素模式匹配算法&#xff1a;将主串中所有长度为m的字串依次与模式串对比&#xff0c;直到找到一个完全匹…

【JavaEE】File、InputStream和OutputStream的使用

1.File 在计算机中目录结构如下&#xff1a; 而File就表示一个目录或者一个普通文件。 File表示目录&#xff1a; File表示普通文件&#xff1a; 我们先来看File的构造方法&#xff1a; 构造器描述File(File parent, String child)根据父目录 孩子文件路径&#xff0c;创…

Linux权限提升—定时任务、环境变量、权限配置不当、数据库等提权

Linux权限提升—定时任务、环境变量、权限配置不当、数据库等提权 1. 前言1.1. 如何找编译好的EXP 2. 定时任务提权2.1. 查看定时任务2.2. 通配符注入提权2.2.1. 创建执行脚本2.2.2. 创建定时任务2.2.3. 查看效果2.2.4. 提权操作2.2.4.1. 切换普通用户2.2.4.2. 执行命令2.2.4.3…

优先、双端队列-我的基础算法刷题之路(八)

本篇博客旨在整理记录自已对优先队列、双端队列的一些总结&#xff0c;以及刷题的解题思路&#xff0c;同时希望可给小伙伴一些帮助。本人也是算法小白&#xff0c;水平有限&#xff0c;如果文章中有什么错误之处&#xff0c;希望小伙伴们可以在评论区指出来&#xff0c;共勉 &…

Netty 源码解析(下)

接上一篇博客 Netty 源码解析&#xff08;上&#xff09;继续分析 上一篇博客中已经分析了绝大部分 ChannelFuture cf bootstrap.bind(9000).sync(); 这一行代码&#xff0c;当这一行代码运行完时&#xff0c;Netty服务端就已经启动好了&#xff0c;接下来就是接收链接&#x…

Spring Security OAuth2.0(二)-----简化模式/密码模式/客户端模式/刷新 token

简化模式 代码示例 修改authorization_server授权服务模块 新增“implicit” 和修改回调地址为本次地址 修改第三方应用项目搭建新页面模拟 新建implicit.jsp <% page contentType"text/html;charsetUTF-8" language"java" isELIgnored"fals…

C++入门篇(二)

目录 一、引用1.1 什么是引用&#xff1f;1.2 引用的特性1.3 常引用1.4 引用的使用场景1.5 传值和传引用效率比较1.5.1 传值和传引用做参数的性能对比1.5.2 传值和传引用做返回值的性能对比 1.6 引用和指针之间的区别 二、内联函数2.1 什么是内联函数&#xff1f;2.2 内联函数的…

知识变现海哥|研究了100个项目,这个才是人生逆袭首选

&#xff08;本文源自公号跟海哥学知识变现&#xff0c;移步公号与100万知识变现/知识付费创业者&#xff0c;一起学知识变现知识付费干货&#xff0c;回‘领书’获取3本电子书&#xff1a;【知识付费秘籍】【知识创业者成长手册】【100个知识付费成功案例】) 经常有人问海哥&a…

什么是中断向量表?作用是什么?为什么需要偏移?

一、定义与特点 定义&#xff1a;中断向量表(interrupt vector table)包含中断服务程序地址的特定内存区域&#xff0c;这些服务程序是处理外部硬件中断请求的代码。 特点&#xff1a;这些中断服务程序(函数)在中断向量表中的位置是由半导体厂商定好的&#xff0c;当某个中断…

ESP32-C2开发板 Homekit烧录教程

准备 1.1硬件ESP32 C2开发板&#xff0c;如图1-1所示 图1-1 ESP32 C2开发板 1.2软件 CozyLife APP可以在各大应用市场搜索下载&#xff0c;也可以扫描二维码下载如图1-2所示 HomeKit flash download tool 烧录工具 esp32c2 homkit演示固件 烧录教程 打开flash_download_to…

以智求治,MapGIS打造公共安全治理新模式

随着我国城市人口和规模日益扩大&#xff0c;城市运行系统日趋复杂&#xff0c;各类风险隐患增多且呈现相互叠加、相互耦合态势&#xff0c;各类风险、事故灾害类事件造成的损失严重&#xff0c;公共安全防范压力不断增大。 党的二十大报告中指出&#xff1a;“建立大安全大应…

【容器化应用程序设计和开发】2.1 容器化基础知识和Docker容器

往期回顾&#xff1a; 第一章&#xff1a;【云原生概念和技术】 容器化应用程序设计和开发 2.1 容器化基础知识和Docker容器2.1.1 容器的创建2.1.2 容器的管理 容器化应用程序设计和开发是一种基于容器技术的应用程序设计和开发方法论。它将应用程序拆分为多个小型服务&#x…

Centos7安装MySQL-5.7.17详细教程

1、MySQL安装包可以在Oracle官网下载 下载链接:https://dev.mysql.com/downloads/mysql/5.7.html 也可以通过wget命令下载 wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz 下载完成之后解压tar包 命令&#xff1a;tar -zxvf…