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…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...