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

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...