Tomcat构建
软件架构
C/S:Client/Server.需要安装才能使用。
B/S:Brower/Server。有浏览器就可以。
资源分类
动态资源:每个用户访问相同的资源后,得到的结果可能不一样,称为动态资源。动态资源被访问后,先转换为静态资源,再被浏览器解析。
静态资源:所有的用户在访问后,得到的结果都是一样的,称为静态资源。静态资源可以直接被浏览器解析
服务器
服务器:安装了服务器软件的计算机。
服务器软件:接收用户的请求,处理请求,做出响应。(接请求,传参数,给响应)
web服务器软件:接收用户的请求,处理请求,做出响应。(接请求,传参数,给响应)
在web服务器软件中,可以部署web项目。让用户通过浏览器来访问这些项目。
常见的服务器软件
动态服务器:
webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
webSphere:IBM公司。大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
JBOSS:JBOSS公司。大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
Tomcat:Apache基金组织,中小型的javaEE服务器,仅仅支持少量的JavaEE规范servle/JSP。开源免费。(300左右的并发)
静态服务器:
nginx:代理,极高的并发
apache:Apache基金组织。PHP领域。
Tomcat
Tomcat早期是Sun公司。javaWEBServer
Tomcat4.0,里程碑版本。实现了Servlet
Tomcat的目录结构
bin:存放的是Tomcat的启动,停止批量处理脚本文件
startup.bat,startup.sh:启动tomcat的脚本文件
shutdown.bat,showdown.sh:停止tomcat的脚本文件
conf:用来存放Tomcat的相关配置文件
Catania:用来存储每个虚拟机的context配置
Context.xml:定义所有的web应用需要加载的context配置
Catalina.properties:Tomcat的环境变量
Logging.properties:Tomcat的日志配置文件,修改Tomcat的日志级别。
server.xml:Tomcat的核心配置文件
lib:Tomcat服务器的依赖包
logs:Tomcat默认的日志存放目录
webapps:Tomcat默认的web应用部署目录
work:Web应用jsp代码生成和编译的临时目录。
Servlet
servlet就是一个Java程序,一个java类。用来处理请求和响应。
Servlet的生命周期
init():Servelt进行初始化。
在tomcat启动的时候就会对所有的Servelt进行初始化
init方法只初始化一次
单例模式。
service():处理请求
可以处理GET,POST,PUT,DELETE请求
destroy():释放资源
创建servlet的三种方式
实现javax.servlet.Servlet接口

继承javax.servlet.GenericServlet类
继承javax.servlet.HttpServlet类
Servlet注册的两种方式
通过配置文件web.xml方式注册----Servlet3.0之前

WEB-INF:加密路径,不允许在地址栏
在web.xml进行注册servlet
<!---注册servlet--><servlet><servlet-name>myServlet</servlet-name><!--写全类名--><servlet-class>com.jsoft.morning.Myservlet1</servlet-class></servlet><servlet-mapping><servlet-name>myServlet</servlet-name><!--url pattern 当发起什么样的请求的时候,才让myServlet去处理--><url-pattern>/hello</url-pattern></servlet-mapping>通过注解方式进行注册√
@WebServlet("/haha")
public class MyServlet3 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("MyServlet3 doGet....");}Servlet的参数
HttpServletRequest:
简称request,代表请求对象,当请求来的时候,request会自动实例化
HttpServletResponse:
简称response
response代表响应,当请求来的时候,response会自动实例化。
如果写中文,需要设置相应的字符集
响应头:增加一个响应头,并且解决字符集问题。
response.setCharacterEncoding("utf-8");response.addHeader("content-type","text/html;charaset=utf-8"); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("MyServlet3 doGet....");//向页面打印回去一句话//服务器和客户端之间的通信依然是使用的流response.setCharacterEncoding("utf-8");response.addHeader("content-type","text/html;charaset=utf-8");PrintWriter out = response.getWriter();//把后台想要给出的响应写会去out.write("我收到了你的请求!!!");}URL匹配规则
精确匹配,每个servlet是可以处理多个请求的。
@WebServlet(urlPatterns = {"/haha","/haha1","/haha2"})localhost:8080/javaweb20230214/haha2
路径匹配
@WebServlet(urlPatterns = {"/haha/*"})localhost:8080/javaweb20230214/haha/aaa
扩展名匹配
@WebServlet(urlPatterns = {"*.do"})localhost:8080/javaweb20230214/aaa.do
缺省匹配
@WebServlet(urlPatterns = {"/"})注意:
不能出现/*.do
多看控制台
匹配顺序
精确匹配
路径匹配,先最长路径匹配,再最短路径匹配。 /user/* /user/add/*
扩展名匹配。
注意:扩展名匹配,前面不能有任何的路径,包括不能有/
/*和/的含义:
/*属于路径匹配。覆盖所有的扩展名匹配
/servlet中的特殊匹配模式
会拦截静态资源!!!
启动时初始化:
<servlet-class>com.jsoft.morning.Myservlet1</servlet-class><load-on-startup>1</load-on-startup>Request
request功能分为以下几种:
封装请求头:
封装一些正文数据。如果是get请求,没有正文。
request实际上是一个域对象,可以把它当成map来添加和获取数据。
request提供请求转发功能。
常用的方法:
getRemoteaddr():获取客户端的IP地址。
@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// System.out.println(request.getRemoteAddr());System.out.println(request.getRemoteHost());if(Objects.equals(request.getRemoteHost(),"127.0.0.1")){response.getWriter().write("your Ip is closed!!!");}}获取请求参数
常见的客户端传参方式:
浏览器地址栏直接输入:GET请求
超链:GET请求
表单:可以是GET,可以是POST。
Ajax:可以是GET,可以是POST
GET请求和POST请求的区别?
GET请求:
请求参数会在浏览器地址栏显示,所以不安全
请求的参数长度在1k以内。
GET请求没有请求体
POST请求:
请求参数不会显示在浏览器的地址栏,相对安全
请求参数没有限制
有请求体
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");response.addHeader("content-type","text/html;charset=utf-8");PrintWriter out = response.getWriter();// System.out.println("username:"+username+",password:"+password);//调用service,调用dao,返回一个结果boolean flag=true;if(flag){out.write("登录成功,欢迎你"+username);}}<form action="login" method="post">
username:<input type="text" name="username">
password:<input type="password" name="password">
<input type="submit" value="登录">
</form>登录注册:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");String[] hobbies = request.getParameterValues("hobby");System.out.println(Arrays.toString(hobbies));Enumeration<String> names= request.getParameterNames();while(names.hasMoreElements()){System.out.println(names.nextElement().toString());}Map<String, String[]> parameterMap = request.getParameterMap();for(Map.Entry entry:parameterMap.entrySet()){System.out.println(entry.getKey()+"-->"+Arrays.toString((String[])entry.getValue()));};response.addHeader("content-type","text/html;charset=utf-8");PrintWriter out = response.getWriter();// System.out.println("username:"+username+",password:"+password);//调用service,调用dao,返回一个结果boolean flag=true;if(flag){out.write("登录成功,欢迎你"+username);}}<form action="login" method="post">
账号:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
性别:<input type="radio" name="gender" value="man">男<input type="radio" name="gender" value="woman" >女<br>
爱好:<input type="checkbox" name="hobby" value="swimming">游泳<input type="checkbox" name="hobby" value="readding">读书<input type="checkbox" name="hobby" value="writting">写字<br>复选:<select name="select" multiple><option value="a">a</option><option value="b">b</option><option value="c">c</option></select>
<input type="submit" value="登录">
</form>
相关文章:
Tomcat构建
软件架构C/S:Client/Server.需要安装才能使用。B/S:Brower/Server。有浏览器就可以。资源分类动态资源:每个用户访问相同的资源后,得到的结果可能不一样,称为动态资源。动态资源被访问后,先转换为静态资源,再被浏览器解…...
入门深度学习——基于全连接神经网络的手写数字识别案例(python代码实现)
入门深度学习——基于全连接神经网络的手写数字识别案例(python代码实现) 一、网络构建 1.1 问题导入 如图所示,数字五的图片作为输入,layer01层为输入层,layer02层为隐藏层,找出每列最大值对应索引为输…...
预算砍砍砍,IT运维如何降本增效
疫情短暂过去,一个乐观的共识正在蔓延:2023年的互联网,绝对不会比2022年更差。 “降本”是过去一年许多公司的核心策略,营销大幅缩水、亏损业务大量撤裁,以及层出不穷的裁员消息。而2023年在可预期的经济复苏下&#…...
10.Jenkins用tags的方式自动发布java应用
Jenkins用tags的方式自动发布java应用1.配置jenkins,告诉jenkins,jdk的安装目录,maven的安装目录2.构建一个maven项目指定构建参数,选择Git Paramete在源码管理中,填写我们git项目的地址,调用变量构建前执行…...
2023新华为OD机试题 - 相同数字的积木游戏 1(JavaScript)
相同数字的积木游戏 1 题目 小华和小薇一起通过玩积木游戏学习数学。 他们有很多积木,每个积木块上都有一个数字, 积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同且所处位置最远的 2 块积木块,计算他们的距离。 小薇请你帮忙替她…...
重构之改善既有代码的设计(一)
1.1 何为重构,为何重构 第一个定义是名词形式: 重构(名词):对软件内部结构的一种调整,目的是在不改变「软件可察行为」前提下,提高其可理解性,降低修改成本。 「重构」的另一个用…...
Kotlin data class 数据类用法
实验数据 {"code":1,"message":"成功","data":{"name":"周杰轮","gender":1} }kotlin数据类使用方便提供如下内部Api: equals()/hashCode()对 toString() componentN()按声明顺序与属性相…...
随笔-老子不想牺牲了
18年来到这个项目组,当时只有8个人,包括经常不在的架构师和经理。当时的工位在西区1栋A座,办公桌很宽敞。随着项目的发展,入职的人越来越多,项目的工位也是几经搬迁。基本上每次搬迁时,我的工位都是挑剩下的…...
三种查找Windows10环境变量的方法
文章目录一.在设置中查看二. 在我的电脑中查看三. 在资源管理器里查看一.在设置中查看 在系统中搜索设置 打开设置,在设置功能里,点击第一项 系统 在系统功能里,左侧菜单找到关于 在关于的相关设置里可以看到高级系统设置 点击高级系…...
STM32单片机DS18B20测温程序源代码
OLED液晶屏电路接口DS18B20电路接口STM32单片机DS18B20测温程序源代码#include "sys.h"#define LED_RED PBout(12)#define LED_GREEN PBout(13)#define LED_YELLOW PBout(14)#define LED_BLUE PBout(15)#define DS18B20_IO_IN() {GPIOA->CRL&0XFFFFFFF0;GPIOA…...
java日志查看工具finder介绍
目录 一、finder介绍 二、单节点部署 1、服务器需要安装Tomcat,以2.82.16.35为例 2、进入Tomcat下目录webapps下,创建FIND目录,进入FIDN目录 3、下载findweb插件,解压缩 4、登录页面,配置 5、添加日志路径 三、…...
手写现代前端框架diff算法-前端面试进阶
前言 在前端工程上,日益复杂的今天,性能优化已经成为必不可少的环境。前端需要从每一个细节的问题去优化。那么如何更优,当然与他的如何怎么实现的有关。比如key为什么不能使用index呢?为什么不使用随机数呢?答案当然…...
【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译
文章目录【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译摘要1. 简介2. 方法2.1 半监督框架概述2.2 监督局部对比学习2.3 下采样和块划分3. 实验4. 结论【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译 论文题目:Semi-supervised Contrastive Learning for Labe…...
vivo官网App模块化开发方案-ModularDevTool
作者:vivo 互联网客户端团队- Wang Zhenyu 本文主要讲述了Android客户端模块化开发的痛点及解决方案,详细讲解了方案的实现思路和具体实现方法。 说明:本工具基于vivo互联网客户端团队内部开源的编译管理工具开发。 一、背景 现在客户端的业…...
Python基础-数据类型之数字类型
变量中的变量值是用来存储事物状态的,事物的状态分成不同的种类(例如:人的姓名、年龄,身高、职位、工资等),因此变量值有多种不同的数据类型。 age 18 # 用整型记录年龄 salary 3.1 # 用浮点型记录…...
基于Web的6个完美3D图形WebGL库
现代前端、游戏和Web开发正是WebGL可以转化为数字杰作的东西。使用GPU绘制在浏览器屏幕上生成的矢量元素,WebGL创建交互式Web图形,从而获得用户体验。视觉元素的质量和复杂性使该工具在HTML或CSS等其他方法中脱颖而出。WebGL基础WebGL不是一个图形套件。…...
界面组件DevExpress Reporting v22.2 - 增强的Web报表组件UI
DevExpress Reporting是.NET Framework下功能完善的报表平台,它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。DevExpress Reporting v22.2版本已正式发布&…...
初学vector
目录 string的收尾 拷贝构造的现代写法: 浅拷贝: 拷贝构造的现代写法: swap函数: 内置类型有拷贝构造和赋值重载吗? 完善拷贝构造的现代写法: 赋值重载的现代写法: 更精简的现代写法&…...
Windows10 安装wsl2、Ubuntu相关操作
Windows10 安装wsl2、Ubuntu相关操作 安装wsl2 查看本机windows版本: 键盘上按下winr,输入winver,查看系统版本。必须运行 windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 windows 11。满足版本要求后…...
SpringBoot简单使用MongoDB
MongoDB介绍 SpringBoot简单使用MongoDB 一、配置步骤 1、application.yml 2、pom 3、entity 4、mapper 二、案例代码使用 1、库 前期准备上一篇安装MongoDB地址http://t.csdn.cn/G4oYJ 跟关系型数据库概念对比 Mysql MongoDB Database(数据库) Datab…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
