当前位置: 首页 > news >正文

Tomcat学习

一、入门

在webapp里面必须先创建一个文件夹,文件夹里面放的内容,才会被访问到。

创建一个javaweb项目后

二、servlet

1.概述

2.servlet生命周期

3.servlet实例的创建时机

4.Servlet实例的初始化参数

5.HTTP状态码

6.servelet返回JSON数据

7.服务端设置跨域访问

8.HttpServletRequest常用api

9、HttpServletResponce常用api

还有一个

req.getParameterMap()    可以获得一个map,

Servelet问题:

1.其中@Webservelet的urlPatterns 和 value有什么区别

2.关于servlet生命周期的困惑

当我第一次访问一个网址时,servelet会实例化并调用init()和service()

当我重复访问该网址,servlet会反复调用service()

关闭服务器后Tomcat容器决定销毁一个servlet时,会调用destroy()方法

3.实际开发中,跨域问题的解决

三、

过滤器 设置 utf_8

监听器

session监听

mvc

三、Servlet会话跟踪基础

1.会话跟踪技术

1.1 什么是会话

客户端访问服务端发生的一系列请求和响应过程称之为会话。 通俗的说:从打开浏览器向服务器端发送请求开始,到客户端关闭浏览器结束访问为止,就是一个会话。

1.2 会话跟踪技术

HTTP 是一种“无状态”协议。也就是说:当一个请求响应结束后,不会留下任何痕迹。或者说:下一次请求响应不会获得上一次请求响应的任何信息。

但是,从开发角度考虑,我们希望上一次请求所传递的数据能够维持状态到下一次请求,并且辨认出是否相同的客户端所发送出来的。也就是说:服务器端业务是需要有状态的。比如:登陆一次后,在一个会话范围内,就不用再重复登陆了。

那么会话跟踪技术,就是一种在客户端与服务器间保持HTTP状态的解决方案,管理浏览器客户端和服务器端之间会话过程中产生的会话数据。

会话跟踪技术解决方案有:

  1. Cookie
  2. Session
  3. URL重写
  4. 隐藏表单域
  5. ... ...

       

1.3 Cookie

Cookie由服务器生成,然后发送给客户端浏览器,浏览器会将 Cookie保存到客户端内存中或者保存到客户端某个目录下的文本文件内。下次请求同一网站时就发送该 Cookie给 服务器(前提是浏览器设置为启用 Cookie)。

Cookie较为典型的应用就是:保存已成功登录过的用户的用户名信息,以便在 下一次登录此网站时,不需输入用户名,简化登录手续,完成自动登录等功能。

注意: 如果是通过ajax 访问,那么sevlet会使用out.print()向客户端响应数据,并且在Cookie中写入sessionid,返回给客户端。但是这样一来,这样就会将cookie中原有的值覆盖掉。也就是说:通过ajax的请求方式,服务器端将无法为客户端设置cookie。

所以,下面使用表单提交来演示Cookie。

前端index.html文件

<h3>登陆</h3>
<form action="http://localhost:8080/demo/login" method="post">用户名:<input type="text" name="userName"><br>密码:<input type="password" name="password"><br><input type="submit">
</form>    
<a href="http://localhost:8080/demo/login">自动登陆</a>

服务器端LoginServlet.java文件

package servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.ServletException;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
@WebServlet("/login")public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setHeader("Access-Control-Allow-Origin", "*"); boolean isLogin = false;//获取从客户端发送过来的Cookie(获取的是一个Cookie数组)Cookie[] cookieArr = request.getCookies();if(cookieArr!=null) {//遍历每一个cookie的名称(使用getName()方法)for(Cookie cookie : cookieArr) {if(cookie.getName().equals("user")) {System.out.println("自动登陆成功");isLogin = true;}}}if(!isLogin) {String userName = request.getParameter("userName");String password = request.getParameter("password");if(userName.equals("test")&&password.equals("111")) {System.out.println("登陆成功");//创建用户信息CookieCookie userCookie = new Cookie("user","ok");//设置Cookie过期时间为一周userCookie.setMaxAge(24*60*60); //向客户端发生Cookieresponse.addCookie(userCookie);}else {System.out.println("登陆失败");}}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);}}

cookie的缺点

1.4 session

Cookie虽然在持久保存(可以设置过期时间)客户端数据提供了方便,但在一个会话范围内维持状态却并无优势。所以,在基于Cookie的基础上,出现了Session技术。

Session较为典型的应用就是:当第一次登陆成功后,一个会话开始。在这个会话范围内,可以依靠Session维护登陆状态,直到此会话结束。

1.4.1 session原理

使用Session维护一个会话的登陆状态:

  1. 当第一次请求时,在服务器端创建一个Session对象,并且为此对象生成一个sessionId。
  2. 同时,使用Cookie将此sessionId返回给客户端,并存储在客户端的Cookie中。
  3. 当客户端发起下一次请求时,必须携带此sessionId发送给服务器端。
  4. 服务器端根据接收的sessionId,就能找回Session对象,从而获取了上一次请求的信息。

1.4.2 Session实例

填个坑:等看完黑马javaweb再来补充。

四、过滤器和监听器。

在学习过滤器时,比较困惑它是怎样按过滤链进行传递,机器人给了我答案。

执行的顺序的怎样的?是执行完本函数?

相关文章:

Tomcat学习

一、入门 在webapp里面必须先创建一个文件夹&#xff0c;文件夹里面放的内容&#xff0c;才会被访问到。 创建一个javaweb项目后 二、servlet 1.概述 2.servlet生命周期 3.servlet实例的创建时机 4.Servlet实例的初始化参数 5.HTTP状态码 6.servelet返回JSON数据 7.服务端设置…...

Linux系统上搭建高可用Kafka集群(使用自带的zookeeper)

本次在CentOS7.6上搭建Kafka集群 Apache Kafka 是一个高吞吐量的分布式消息系统&#xff0c;被广泛应用于大规模数据处理和实时数据管道中。本文将介绍在CentOS操作系统上搭建Kafka集群的过程&#xff0c;以便于构建可靠的消息处理平台。 文件分享&#xff08;KafkaUI、kafka…...

WebSocket在node端和客户端的使用

摘要 如果想要实现一个聊天的功能&#xff0c;就会想到使用WebSocket来搭建。那如果没有WebSocet的时候&#xff0c;我们会以什么样的思路来实现聊天功能呢&#xff1f; 假如有一个A页面 和 B页面进行通信&#xff0c;当A发送信息后&#xff0c;我们可以将信息存储在文件或者…...

ENVI IDL:如何将txt文本文件转化为GeoTIFF文件?

01 前言 此处的文本文件形式如下&#xff1a; 里面包含了众多点位信息&#xff08;不是站点数据&#xff09;&#xff0c;我们需要依据上述点的经纬度信息放到对应位置的像素点位置&#xff0c;放置完后如下&#xff1a; 可以发现&#xff0c;还存在部分缺失值&#xff0c;我们…...

北邮22级信通院数电:Verilog-FPGA(9)第九周实验(2)实现下降沿触发的JK触发器(带异步复位和置位功能)

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 JK.v module JK (input clk,input J,input K,input…...

pyqt5UI同步加载

问题记录&#xff1a;pyqt5 怎样实现修改ui而不改变py代码&#xff0c;例如一个文件存入ui代码&#xff0c;另一个文件引入ui代码 起因&#xff1a;由于在写一个漏扫工具&#xff0c;由于ui的平频繁改动导致主体代码结构变动&#xff0c;所以先有没有方法能够不改变主题代码&am…...

CentOS 7 安装 Redis 5 (单机 6379)

CentOS 7 安装 Redis 5 &#xff08;单机 6379&#xff09; 自己准备好 Redis 5 的安装包并上传至 /opt/ 下的 redis 文件夹下&#xff1a; cd /opt mkdir redis cd redis准备好 Redis 所需的编译环境&#xff1a; yum -y install gcc yum -y install gcc-c解压上传的 Redis…...

sqlplus set参数大区

通过设置不同的SET参数&#xff0c;可以定制SQLPlus的行为和输出格式&#xff1a; SET 参数描述SET AUTOTRACE显示SQL语句的执行计划和统计信息&#xff0c;用于性能优化。SET FEEDBACK控制是否显示SQL语句执行的行数&#xff0c;可提高结果可读性。SET LINESIZE设置每行的最大…...

从0到0.01入门React | 006.精选 React 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...

GeoTools实战指南: 处理矢量文件中多多边形的MultiPolygon空洞问题

目录 GeoTools实战指南: 处理矢量文件中多多边形的MultiPolygon空洞问题背景思路分析代码实现引入依赖读取并遍历矢量文件处理并“缝合”一个多边形的内外环结果保存到新的矢量文件中完整代码效果展示仓库代码地址GeoTools实战指南: 处理矢量文件中多多边形的MultiPolygon空洞问…...

javaSE学习笔记(五)集合框架-Collection,List,Set,Map,HashMap,Hashtable,ConcurrentHashMap

目录 四、集合框架 1.集合概述 集合的作用 集合和数组的区别 集合继承体系 数组和链表 数组集合 链表集合 2.Collection 方法 集合遍历 并发修改异常 3.List List集合的特有功能&#xff08;核心是索引&#xff09; 集合遍历 并发修改异常产生解决方案ListItera…...

web3 React dapp项目通过事件从区块链中拿到 已取消 已完成 和所有的订单数据 并存入redux中

好 上文web3通过antd 在React dapp中构建订单组件基本结构我们算是把一个基本的订单组件展示做出来了 然后 我们继续 起一下环境先 ganache 终端运行 ganache -dMetaMask 登录一下 然后 打开项目 发布一下合约 truffle migrate --reset然后 运行一下 测试脚本 转入交易所 E…...

25、Flink 的table api与sql之函数(自定义函数示例)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

MybatisPlus —注解汇总

本文将介绍 MybatisPlus 注解包相关类详解&#xff08;更多详细描述可点击查看源码注释&#xff09; 注解类包源码&#xff1a;&#x1f449; mybatis-plus-annotation(opens new window) 一、#TableName(opens new window) 描述&#xff1a;表名注解&#xff0c;标识实体类对…...

flink对状态ttl进行单元测试

背景 在处理键值分区状态时&#xff0c;使用ttl设置过期时间是我们经常使用的&#xff0c;但是任何代码的修改都需要首先进行单元测试&#xff0c;本文就使用单元测试来验证一下状态ttl的设置是否正确 测试状态ttl超时的单元测试 首先看一下处理函数&#xff1a; // 处理函…...

Mac电脑安装打印机驱动

1.在打印机背面找到型号&#xff0c;当想要安装的驱动在官网找不到时可直接搜索该系列&#xff1a;比如MF系列 2.安装完成后需要添加打印机 当打印机和电脑在同一个WiFi下的时候查找打印机IP&#xff0c;输入IP后可以查到对应的打印机&#xff0c;添加后即可使用...

C语言 每日一题 牛客网 11.13 Day17

找零 Z国的货币系统包含面值1元、4元、16元、64元共计4种硬币&#xff0c;以及面值1024元的纸币。 现在小Y使用1024元的纸币购买了一件价值为N(0 < N≤1024)的商品&#xff0c;请问最少他会收到多少硬币&#xff1f; 思路 运用if语句进行判断分类 代码实现 int main() {…...

python读取npy和dat文件信息

前言 python读取.dat 和 .npy 数据 Code import numpy as np def read_dat():print("read data .dat \n")path "./c1_input.dat"data np.fromfile(path, np.float16).reshape(4,38,800)print(fdata :{data}, data shape:{data.shape}, data dtype:{d…...

【Git】第四篇:基本操作(理解工作区、暂存区、版本库)

Git 工作区、暂存区和版本库 工作区&#xff1a;就是我们创建的本地仓库所在的目录暂存区&#xff1a; stage或index&#xff0c;一般放在.git(可隐藏文件)目录下的index文件&#xff08;.git/index&#xff09;中&#xff0c;所以我们把暂存区有时候也叫做索引&#xff08;in…...

Word转PDF简单示例,分别在windows和centos中完成转换

概述 本篇博客以简单的示例代码分别在Windows和Linux环境下完成Word转PDF的文档转换。 文章提供SpringBoot Vue3的示例代码。 文章为什么要分为Windows和Linux环境&#xff1f; 因为在如下提供的Windows后端示例代码中使用documents4j库做转换&#xff0c;此库需要调用命令行…...

FlaskBB数据库设计与模型:理解论坛底层架构

FlaskBB数据库设计与模型&#xff1a;理解论坛底层架构 【免费下载链接】flaskbb A classic Forum Software in Python using Flask. 项目地址: https://gitcode.com/gh_mirrors/fl/flaskbb FlaskBB作为一款基于Python Flask框架的经典论坛软件&#xff0c;其高效稳定的…...

leetcode 1624. 两个相同字符之间的最长子字符串-耗时100

Problem: 1624. 两个相同字符之间的最长子字符串 耗时100%&#xff0c;双指针&#xff0c;找到相同的以后直接break以及拿到最大值 Code class Solution { public:int maxLengthBetweenEqualCharacters(string s) {int n s.size(), mx -1;char ch;for(int i 0; i < n; i…...

SEO 系统培训班有哪些推荐_SEO 系统培训班包括哪些内容

SEO 系统培训班推荐及其内容详解 在当前数字化和信息化飞速发展的时代&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已经成为每一个网站和企业不可或缺的一部分。SEO系统培训班不仅能帮助你了解SEO的基本原理&#xff0c;还能深入探讨其实际应用和最新技巧。本文将详细…...

如何高效解析城通网盘链接:这款开源工具让下载速度提升10倍

如何高效解析城通网盘链接&#xff1a;这款开源工具让下载速度提升10倍 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet ctfileGet作为一款专注于城通网盘链接解析的开源工具&#xff0c;通过纯前端技术…...

SEO_新手必看的SEO优化入门教程与核心方法(271 )

SEO优化入门教程&#xff1a;新手必看的核心方法 在当今的数字时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为了每一个想要在互联网上站稳脚跟的人必不可少的技能。无论你是一个小企业的网站管理员&#xff0c;还是一个内容创作者&#xff0c;了解和掌握SE…...

嵌入式C++安全开发避坑指南,覆盖ARM Cortex-R/A系列、VxWorks与AUTOSAR OS的12类时序敏感漏洞

第一章&#xff1a;嵌入式C安全开发的工业级挑战与范式演进在工业控制、汽车电子与医疗设备等高可靠性领域&#xff0c;嵌入式C正面临前所未有的安全张力&#xff1a;资源受限性与功能安全性之间、实时确定性与抽象灵活性之间、遗留代码兼容性与现代语言特性之间&#xff0c;形…...

快马平台快速构建gitbash工作流原型:可视化模拟git命令助手

最近在尝试用InsCode(快马)平台快速验证一个Git工作流助手的原型&#xff0c;整个过程意外地顺畅。作为一个经常需要教新人使用Git的开发者&#xff0c;一直想做个可视化工具来降低学习门槛&#xff0c;但传统开发要配环境、写前后端&#xff0c;往往还没开始就放弃了。这次用快…...

Nanbeige 4.1-3B Streamlit WebUI效果展示:气泡时间戳与消息状态可视化

Nanbeige 4.1-3B Streamlit WebUI效果展示&#xff1a;气泡时间戳与消息状态可视化 1. 引言&#xff1a;当大模型遇见沉浸式聊天界面 想象一下&#xff0c;你正在本地部署一个强大的开源大语言模型&#xff0c;比如南北阁的4.1-3B版本。你通过命令行与它对话&#xff0c;看着…...

老游戏兼容性终极解决方案:让经典游戏在现代Windows系统重生

老游戏兼容性终极解决方案&#xff1a;让经典游戏在现代Windows系统重生 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/…...

ForgeAdmin实战:开源项目分布式幂等组件 v2.0 升级

我在开源项目重构了分布式幂等组件&#xff1a;支持三种策略、Token防重放、结果缓存 为什么要重构幂等组件&#xff1f; 在企业级开发中&#xff0c;幂等性是保障数据一致性必不可少的能力。之前我在 Forge Admin 开源项目中实现了一个基础版本的幂等组件&#xff0c;但随着使…...