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

Tomcat构建

软件架构

C/S:Client/Server.需要安装才能使用。

B/S:Brower/Server。有浏览器就可以。

资源分类

  • 动态资源:每个用户访问相同的资源后,得到的结果可能不一样,称为动态资源。动态资源被访问后,先转换为静态资源,再被浏览器解析。

  • 静态资源:所有的用户在访问后,得到的结果都是一样的,称为静态资源。静态资源可以直接被浏览器解析

服务器

  1. 服务器:安装了服务器软件的计算机。

  1. 服务器软件:接收用户的请求,处理请求,做出响应。(接请求,传参数,给响应)

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

  1. Tomcat早期是Sun公司。javaWEBServer
  1. 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的三种方式

  1. 实现javax.servlet.Servlet接口

  1. 继承javax.servlet.GenericServlet类

  1. 继承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匹配规则

  1. 精确匹配,每个servlet是可以处理多个请求的。

@WebServlet(urlPatterns = {"/haha","/haha1","/haha2"})

localhost:8080/javaweb20230214/haha2

  1. 路径匹配

@WebServlet(urlPatterns = {"/haha/*"})

localhost:8080/javaweb20230214/haha/aaa

  1. 扩展名匹配

@WebServlet(urlPatterns = {"*.do"})

localhost:8080/javaweb20230214/aaa.do

  1. 缺省匹配

@WebServlet(urlPatterns = {"/"})

注意:

不能出现/*.do

多看控制台

匹配顺序

  1. 精确匹配

  1. 路径匹配,先最长路径匹配,再最短路径匹配。 /user/* /user/add/*

  1. 扩展名匹配。

注意:扩展名匹配,前面不能有任何的路径,包括不能有/

/*和/的含义:
  • /*属于路径匹配。覆盖所有的扩展名匹配

  • /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。有浏览器就可以。资源分类动态资源&#xff1a;每个用户访问相同的资源后&#xff0c;得到的结果可能不一样&#xff0c;称为动态资源。动态资源被访问后&#xff0c;先转换为静态资源&#xff0c;再被浏览器解…...

入门深度学习——基于全连接神经网络的手写数字识别案例(python代码实现)

入门深度学习——基于全连接神经网络的手写数字识别案例&#xff08;python代码实现&#xff09; 一、网络构建 1.1 问题导入 如图所示&#xff0c;数字五的图片作为输入&#xff0c;layer01层为输入层&#xff0c;layer02层为隐藏层&#xff0c;找出每列最大值对应索引为输…...

预算砍砍砍,IT运维如何降本增效

疫情短暂过去&#xff0c;一个乐观的共识正在蔓延&#xff1a;2023年的互联网&#xff0c;绝对不会比2022年更差。 “降本”是过去一年许多公司的核心策略&#xff0c;营销大幅缩水、亏损业务大量撤裁&#xff0c;以及层出不穷的裁员消息。而2023年在可预期的经济复苏下&#…...

10.Jenkins用tags的方式自动发布java应用

Jenkins用tags的方式自动发布java应用1.配置jenkins&#xff0c;告诉jenkins&#xff0c;jdk的安装目录&#xff0c;maven的安装目录2.构建一个maven项目指定构建参数&#xff0c;选择Git Paramete在源码管理中&#xff0c;填写我们git项目的地址&#xff0c;调用变量构建前执行…...

2023新华为OD机试题 - 相同数字的积木游戏 1(JavaScript)

相同数字的积木游戏 1 题目 小华和小薇一起通过玩积木游戏学习数学。 他们有很多积木,每个积木块上都有一个数字, 积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同且所处位置最远的 2 块积木块,计算他们的距离。 小薇请你帮忙替她…...

重构之改善既有代码的设计(一)

1.1 何为重构&#xff0c;为何重构 第一个定义是名词形式&#xff1a; 重构&#xff08;名词&#xff09;&#xff1a;对软件内部结构的一种调整&#xff0c;目的是在不改变「软件可察行为」前提下&#xff0c;提高其可理解性&#xff0c;降低修改成本。 「重构」的另一个用…...

Kotlin data class 数据类用法

实验数据 {"code":1,"message":"成功","data":{"name":"周杰轮","gender":1} }kotlin数据类使用方便提供如下内部Api&#xff1a; equals()/hashCode()对 toString() componentN()按声明顺序与属性相…...

随笔-老子不想牺牲了

18年来到这个项目组&#xff0c;当时只有8个人&#xff0c;包括经常不在的架构师和经理。当时的工位在西区1栋A座&#xff0c;办公桌很宽敞。随着项目的发展&#xff0c;入职的人越来越多&#xff0c;项目的工位也是几经搬迁。基本上每次搬迁时&#xff0c;我的工位都是挑剩下的…...

三种查找Windows10环境变量的方法

文章目录一.在设置中查看二. 在我的电脑中查看三. 在资源管理器里查看一.在设置中查看 在系统中搜索设置 打开设置&#xff0c;在设置功能里&#xff0c;点击第一项 系统 在系统功能里&#xff0c;左侧菜单找到关于 在关于的相关设置里可以看到高级系统设置 点击高级系…...

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&#xff0c;以2.82.16.35为例 2、进入Tomcat下目录webapps下&#xff0c;创建FIND目录&#xff0c;进入FIDN目录 3、下载findweb插件&#xff0c;解压缩 4、登录页面&#xff0c;配置 5、添加日志路径 三、…...

手写现代前端框架diff算法-前端面试进阶

前言 在前端工程上&#xff0c;日益复杂的今天&#xff0c;性能优化已经成为必不可少的环境。前端需要从每一个细节的问题去优化。那么如何更优&#xff0c;当然与他的如何怎么实现的有关。比如key为什么不能使用index呢&#xff1f;为什么不使用随机数呢&#xff1f;答案当然…...

【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译

文章目录【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译摘要1. 简介2. 方法2.1 半监督框架概述2.2 监督局部对比学习2.3 下采样和块划分3. 实验4. 结论【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译 论文题目&#xff1a;Semi-supervised Contrastive Learning for Labe…...

vivo官网App模块化开发方案-ModularDevTool

作者&#xff1a;vivo 互联网客户端团队- Wang Zhenyu 本文主要讲述了Android客户端模块化开发的痛点及解决方案&#xff0c;详细讲解了方案的实现思路和具体实现方法。 说明&#xff1a;本工具基于vivo互联网客户端团队内部开源的编译管理工具开发。 一、背景 现在客户端的业…...

Python基础-数据类型之数字类型

变量中的变量值是用来存储事物状态的&#xff0c;事物的状态分成不同的种类&#xff08;例如&#xff1a;人的姓名、年龄&#xff0c;身高、职位、工资等&#xff09;&#xff0c;因此变量值有多种不同的数据类型。 age 18 # 用整型记录年龄 salary 3.1 # 用浮点型记录…...

基于Web的6个完美3D图形WebGL库

现代前端、游戏和Web开发正是WebGL可以转化为数字杰作的东西。使用GPU绘制在浏览器屏幕上生成的矢量元素&#xff0c;WebGL创建交互式Web图形&#xff0c;从而获得用户体验。视觉元素的质量和复杂性使该工具在HTML或CSS等其他方法中脱颖而出。WebGL基础WebGL不是一个图形套件。…...

界面组件DevExpress Reporting v22.2 - 增强的Web报表组件UI

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。DevExpress Reporting v22.2版本已正式发布&…...

初学vector

目录 string的收尾 拷贝构造的现代写法&#xff1a; 浅拷贝&#xff1a; 拷贝构造的现代写法&#xff1a; swap函数&#xff1a; 内置类型有拷贝构造和赋值重载吗&#xff1f; 完善拷贝构造的现代写法&#xff1a; 赋值重载的现代写法&#xff1a; 更精简的现代写法&…...

Windows10 安装wsl2、Ubuntu相关操作

Windows10 安装wsl2、Ubuntu相关操作 安装wsl2 查看本机windows版本&#xff1a; 键盘上按下winr,输入winver&#xff0c;查看系统版本。必须运行 windows 10 版本 2004 及更高版本&#xff08;内部版本 19041 及更高版本&#xff09;或 windows 11。满足版本要求后&#xf…...

SpringBoot简单使用MongoDB

MongoDB介绍 SpringBoot简单使用MongoDB 一、配置步骤 1、application.yml 2、pom 3、entity 4、mapper 二、案例代码使用 1、库 前期准备上一篇安装MongoDB地址http://t.csdn.cn/G4oYJ 跟关系型数据库概念对比 Mysql MongoDB Database&#xff08;数据库&#xff09; Datab…...

Oracle Data Guard 角色转换(Role Transitions)

查询视图V$DATABASE的DATABASE_ROLE列可以看到数据库当前的角色。 1&#xff0e;角色转换介绍 Oracle Data Guard让你可以使用SQL语句或者通过Oracle Data Guard broker界面来动态更改数据库的角色&#xff0c;Oracle Data Guard支持以下的角色转换&#xff1a; 1&#xff0…...

opencv的TrackBar控件

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…...

关于基线长度对双天线GNSS测姿精度的影响

文章目录一、GNSS测姿原理1. 载波相位双差求解基线向量2. GNSS姿态角表示二、基线长度对GNSS测姿精度的影响三、GNSS定向产品精度描述实例四、参考文献在GNSS定向模块或者板卡的指标参数中&#xff0c;我们一般会看到航向的测量精度和基线的长度相关。在实际使用&#xff0c;用…...

口交换机睿易 RG-NBS1826GC 24 口

接口形态不将就&#xff0c;标配光纤接口传输性能不将就&#xff0c;标配千兆上联口和大缓存设计端口数量不将就&#xff0c;8/16/24 三种选择楼宇对讲交换机不将就&#xff0c;保证开锁指令品质服务不将就&#xff0c;监控专用交换机接口形态不将就&#xff0c;标配光纤接口非…...

如何在Excel中向下拉列表中添加条件

在Excel中向下拉列表中添加条件 创建矩阵型数据集创建下拉列表创建第一个下拉列表创建第二个下拉列表你可以使用Microsoft Excel下拉列表来显示一个简单的列表,尽管有时需要更多的控制。假设你的人员分散在四个地区:北部、南部、东部和西部。你希望按地区与人员合作,而不是与…...

自定义bean 加载到spring IOC容器中

自定义bean加载到spring容器中的两种方式&#xff1a; 1.在类上添加注解Controller、RestController&#xff08;本质是Controller&#xff09;、Service、Repository、Component2.使用Configuration和Bean 这篇文章主要介绍第二种方式原理&#xff08;因为在实际使用中&#…...

[python入门㊻] - python装饰器和类的装饰器

目录 ❤ python装饰器介绍 ❤ 什么是装饰器 ❤ 装饰器的流程 ❤ 定义装饰器时通常会涉及以下3个函数 无参装饰器 有参装饰器 多重装饰器 ❤ 装饰器的用法(闭包) ❤ 装饰器语法糖 ❤ 时间计时器 ❤ 装饰器中wraps作用 不使用wraps装饰器 使用wraps装饰器解…...

企业级信息系统开发学习1.1 初识Spring——采用Spring配置文件管理Bean

文章目录一、Spring容器演示——采用Spring配置文件管理Bean&#xff08;一&#xff09;创建Maven项目&#xff08;二&#xff09;添加Spring依赖&#xff08;三&#xff09;创建杀龙任务类&#xff08;四&#xff09;创建勇敢骑士类&#xff08;五&#xff09;采用传统方式让勇…...

CSS盒子模型

盒子模型 CSS三大特性 继承性、层叠性、优先级 优先级比较 继承 < 通配符选择器 < 标签选择器 < 类选择器 < id选择器 < 行内样式 < !important 注意&#xff1a;!important不能提升继承的优先级&#xff0c;只要是继承优先级最低 复合选择器权重叠加计…...

Python基础学习笔记 —— 数据结构与算法

数据结构与算法1 数据结构基础1.1 数组1.2 链表1.3 队列1.4 栈1.5 二叉树2 排序算法2.1 冒泡排序2.2 快速排序2.3 &#xff08;简单&#xff09;选择排序2.4 堆排序2.5 &#xff08;直接&#xff09;插入排序3 查找3.1 二分查找1 数据结构基础 本章所需相关基础知识&#xff1a…...

个人网站论坛展示/seo攻略

本文转载自&#xff1a;数据库精讲SQL优化——优化必备的 EXPLAIN 命令索引优化 一、优化必备的 EXPLAIN 命令 EXPLAIN 是用来查询 SQL 的执行计划&#xff0c; 用法&#xff1a; EXPLAIN SELECT [字段...] FROM TABLE;结果&#xff1a; -----------------------------------…...

wordpress 维护插件/企业网站建设服务

1 //1 必须包含头文件2 #include <afxwin.h>3 //2 必须定义一个CWinApp的派生类4 class MyApp:public CWinApp5 {6 public:7 //3 必须重写InitInstance这个虚函数8 virtual BOOL InitInstance()9 { 10 //4 可以创建一个窗口 11 CFrameWnd *p…...

有限公司英文/整站优化seo

1.震动是系统的服务,首先需添加震动权限 <uses-permission android:name"android.permission.VIBRATE" /> 2.实现震动方法代码 public static void sendVibrater(Context mContext) { // 间隔震动Vibrator mVibrator (Vibrator) mContext.getSystemService(m…...

新疆疫情发布会最新消息/免费网站推广优化

一、创建表空间以及数据库用户 --创建表空间和用户脚本 create tablespace 表空间名 datafile 数据文件路径 size 数据文件初始大小 autoextend on maxsize 最大值; create user 用户名 identified by 密码 limit 密码策略 default tablespace 表空间名称; grant 权限类型 to 用…...

关于做美食的网站/沪深300指数是什么意思

git clone git://124.193.128.166/nsd1804.git[rootroom9pc01 ~]# brctl show– virsh net-list [--all]是一样的...

wordpress更新以后进不去了/百度大搜推广和百度竞价

...