【Servlet】 一

news2024/11/25 1:53:00

本文主要介绍了如何在tomcat部署一个webapp 以及 如何借助maven用servlet编写一个hello world .

一.Tomcat

Tomcat是一个Java里广泛使用的http服务器

HTTP服务器有很多实现,其中最知名的是Nginx;而在Java里,最知名的是Tomcat

一个Tomcat服务器上可以部署多个网站 ; 后续学习的servlet,就是依赖tomcat

1.在Tomcat官网下载Tomcat

Apache

apache最早是一个开源的http服务器,后来吸引了很多开源开发者,,这些人构成了一个名为apache的社区,这个社区做了很多知名的程序,Tomcat就是其中一个

tomcat自身也是使用Java写的(跨平台),所以要想运行Tomcat的前提是电脑上必须有jdk!!

2.tomcat各层目录结构

>Tomcat目录

>bin(binary二进制  )

一般是可执行程序(有一些jar包,也有一些脚本文件)

注意框出的这两个文件:

bat后缀:windows上的批处理脚本,在windows上运行这个文件,就可以启动tomcat

sh后缀:linux上的shell脚本,在linux上运行这个文件,就可以启动tomcat

脚本:也就是编程语言,描述了先做什么再做什么.

有的工作需要多个命令配合执行,就需要使用脚本把多个要执行的命令串起来

>Conf(configuration配置)

放了tomcat的配置文件

Server.xml是最主要的配置文件,使用xml格式

很多程序都有配置文件,通过配置来开关/选择/设置某个功能

>lib

都是jar包,也就是tomcat程序运行过程中会使用的内容

>Logs

tomcat的日志文件

>webapps

放网站,把网站放在这个目录下,就可以加载运行这个网站

3.启动tomcat

>双击bin目录下的startup.bat

乱码怎么办?

乱码原因 : tomcat使用的是utf8,而windows cmd默认是gbk

但是改编码方式还是不好操作的,所以当前就凑合用,后续使用idea中的终端来展示tomcat日志就可以避免乱码了

闪退怎么办?

多半是因为没有找到jdk路径

找原因:把startup拖到cmd中,出错就不会闪退,而是会告诉报错信息,根据错误信息配置环境变量即可

环境变量:操作系统维护的一种变量,往往是用于多个进程相互配合的时候,

有一些数据需要交互,就可以使用环境变量(本质上也可以认为是一种进程间通信的手段)

当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。

服务器:

* 可能是服务器主机:就是一个电脑,在上面运行着服务器程序,保持开机

* 可能是服务器程序:就是一个程序,绑定了一个端口号,客户端就可以通过ip+端口给服务器发请求

启动服务器,目的就是为了让客户端来对服务器发起请求 ; http服务器的客户端就是浏览器

tomcat默认端口是两个8000,8005(一个服务器可以绑定多个端口)

* 8000是业务端口,http请求就应该发到这个端口上

* 8005是管理端口,则是进行一些管理上的操作

服务器启动之后,我们在浏览器上输入:127.0.0.1:8080就可以访问到tomcat的欢迎页面!

4.部署一个webapp

我们可以给tomcat部署一个简单的webapp

在webapps目录下新建一个文件夹,文件夹中有一个简单的html页面

1.直接双击这个html文件,相当于通过浏览器直接访问磁盘文件打开的网页

2.通过网络的方式访问

通过网络的方式访问:是可以跨主机的。

tomcat对于Java有一定的支持,方便程序员编写后端的程序,比如他提供了一系列的api接口,这些api背后已经把一些基础的工作做好了,java程序员只要调用上述api通过少量的代码,就可以完成基本的http服务器的核心功能

tomcat把这组api称为Servlet

二.Servlet

20年前是网站开发的一种主力技术;现在已经逐渐被spring代替了

虽说如此,Servle仍然有学习的价值,因为

1.spring作为一个框架,底层仍然是需要调用servlet里的一些api

熟悉servlet有助于理解spring工作原理 ; 包括spirng有些接口也会暴露servlet一些影子

2.学习servlet,不仅仅是学习servlet api本身,更主要是学习web开发!


动态页面 静态页面

 * 静态页面:页面内容始终不变(这种已经比较少了)

 * 动态页面:页面结构相似,但是页面内容是不同的 , 往往是在请求发起的时候,由服务器通过一系列运算,动态生成的页面

servlet主要解决的问题就是为了实现动态页面

难点:编写一个最简单的servlet的hello world!


三.编写hello world 

1.创建项目

我们创建一个maven项目 ( maven是一个构建工具 )

程序编写过程中,往往涉及到一些第三方库的依赖,另外需要针对程序打包部署 , 这两个工作我们可以交给maven来完成 ! 

maven的意义:方便的进行依赖管理和打包

2.引入依赖

当前的代码要使用servlet开发,而servlet并不是java标准库自带的,所以就需要让maven能把servlet的依赖获取过来

>先找到maven的中央仓库 , 复制对应版本的servlet依赖

https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api

servlet的版本和tomcat的版本是对应的 , 根据自己的tomcat版本下载对应的servlet版本( 具体对应表百度一下~) 

Tomcat8使用servlet3.1

>手动创建一个依赖标签,把坐标复制进去,此时idea会自动通过maven从中央仓库下载这里的依赖 (第一次进去可能是红的,因为没下载完,此时也可以手动刷新)

3.手动创建一些必要的目录/文件

tomcat对于Servlet项目,是有一些额外的要求

maven可以管理的不仅仅是servlet项目,还有其他的 , 因此对于servlet项目,可以创建出一些特定的目录/文件

web.xml内容固定,只需要从别的项目复制就行 , 下面是一个范例:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

   
</web-app>

4.编写代码

这个方法不需要手动调用

doget本质是一个回调函数

把这个方法写好之后就会交给Tomcat,tomcat在收到一个合适的GET请求就会自动调用doget

调用doget的时候,tomcat就会解析这次HTTP请求,生成一个httpServletRequest对象

这个对象的属性啥的都是和http协议格式匹配的(相当于tomcat帮我们把http请求解析好了)

同时,tomcat会构造出一个空的HttpServletResponse 对象, 这个对象也会传递到doget里面 ;

 doget所做的事情 : 根据这次请求,计算出响应;

doGet : 根据req里不同的参数的细节,生成一个具体的resp对象(往空对象里设置属性)tomcat根据这个响应对象,转换成符合http协议的响应报文,返回给浏览器了

Tomcat在合适的时机自动调用doGet

1.请求的方法,是否是GET

一般来说不同的请求方法,在Servlet也会有对应的方法

2.请求的路径 url后面带有层次结构的路径

一个Servlet程序里,可能有多个Servlet类 ; 这些Servlet类,就需要在不同的情况下被执行

添加这个注解:

当请求的路径中带有hello时,才能执行到HelloServlet的代码,不同的Servlet类就可以关联到不同的路径 ! ! ! 

总结:

doget要做的事情,就是根据请求计算响应


疑问:

为什么不需要main 方法?

Servlet程序,不需要main方法

实际上,main方法其实是在tomcat里面,我们写的doGet方法都是让tomcat调用的


5.打包程序

程序需要放到tomcat上运行,就需要对程序进行打包(达成一个能被tomcat识别的格式)

打包,也是借助maven完成的.

Maven -> LifeServlet -> 双击package

>打包成功

>查看

maven中默认打包方式生成的是jar包(里面就是一些.class文件)

但是tomcat需要的是war包(本质和jar差不多,里面会包含一些前端代码/tomcat配置) , 所以需要在pom.xml里面修改一些东西

>修改之后再重新打包

>war包生成成功,查看

6.部署

把这个war包放到webappa里面

可这个war包复制到tomcat的webapps目录下,tomcat就会识别并且自动对这个war包进行解压

7.验证程序能能否正常工作

通过浏览器发起http get请求,触发刚才的servlet代码

在浏览器输入以下这个路径:

 * java108test:称为context path/application path ,用来区分一个webapp

  * hello: servler path , 和@WebServlet注解是对应的

通过上述七个步骤,hello world就编写完了 !

注意:

如果浏览器一直转圈圈,很有可能是cmd的问题

总结上述步骤:


看起来还是比较麻烦的 , 好在上述的过程spring做出了简化的效果 ! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1161595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql数据库【基础】

本教程适合有一定基础的人&#xff0c;我是用来复习mysql数据&#xff0c;跟着教程走一遍熟悉一下mysql的语句 数据准备 下面的数据库查询语句都是基于此表进行查询的 员工表 创建表&#xff1a; -- 创建表 drop table if exists emp; create table emp (id int …

vue基于ElementUI/Plus自定义的一些组件

vue3-my-ElementPlus 源码请到GitHub下载使用MyTable、MySelect、MyPagination 置顶|Top | 使用案例&#xff1a; 1.0 定义表格数据&#xff08;测试使用&#xff09; data() {return {tableData: [],value:[],valueList: [],}; },// 构造表格测试数据// 1 第一行&#xf…

什么是 Windows 时间服务?

文章目录 Windows时间服务概述Windows时间服务包括的组件Windows时间服务&#xff08;W32Time&#xff09;时间同步协议时间服务器时间配置事件日志 时间协议的重要性推荐阅读 Windows时间服务概述 Windows 时间服务 (W32Time) 为计算机提供网络时钟同步&#xff0c;默认无需进…

09 _ 队列:队列在线程池等有限资源池中的应用

我们知道,CPU资源是有限的,任务的处理速度与线程个数并不是线性正相关。相反,过多的线程反而会导致CPU频繁切换,处理性能下降。所以,线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来事先设置的。 当我们向固定大小的线程池中请求一个线程时,如果线程池中没…

uniapp使用抖音微信自定义组件

tt.vue中使用video-player组件 用到的目录如下&#xff1a; pages.json {"path": "pages/Tabbar/tt/tt","style": {"navigationBarTitleText": "","enablePullDownRefresh": false,// 使用自定义组件"using…

基于springboot实现在线考试平台项目【项目源码+论文说明】

基于springboot实现在线考试平台管理系统演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把在线考试管理与现在网络相结合&#xff0c;利用java技术建设在线考试系统&#xff0c;实现在线考试的信息化。则对于进一步提高在线考试管理发展&#xff0c;丰富在线考试管理经…

python脚本-探查存活主机

python脚本-探查存活主机 代码 from scapy.all import * import logging logging.getLogger("scapy.runtime").setLevel(logging.ERROR) net"10.9.47." # 此处修改目标网段 for host in range(1,255):ipf"{net}{host}"# print(f"[-]Trin…

API接口的定义|电商API接口的接入测试和参数说明【附代码实例教程】

一 . API接口的定义 API全称Application Programming Interface&#xff0c;即应用程序编程接口&#xff0c;是一些预先定义的函数&#xff0c;或指软件系统不同组成部分衔接的约定&#xff0c;用于传输数据和指令&#xff0c;使应用程序之间可以集成和共享数据资源。 简单来…

CFCA证书

1&#xff0c;什么是CFCA证书&#xff1f; CFCA证书是中国金融认证中心颁发的数字证书&#xff0c;用于验证网络通信中的身份和数据完整性。它采用了公钥基础设施&#xff08;PKI&#xff09;技术&#xff0c;能够为用户和服务提供商提供可信的身份认证和数据加密服务&#xf…

污水处理环保设备怎么选

要选择合适的污水处理环保设备&#xff0c;可以考虑以下几个方面&#xff1a; 1. 根据自身的项目需求来设定预算&#xff0c;不要盲目追求大型或昂贵的设备&#xff0c;符合项目要求的设备才是最合适的选择。 2. 注意设备所使用的材质&#xff0c;通常情况下&#xff0c;碳钢…

JSON比较:如何轻松判断数据格式是否相同?

目录 一、JSON概述 二、比较JSON数据格式的必要性 三、比较JSON数据格式的方法 1. 基于字符串的比较 2. 基于结构的比较 四、注意事项 五、总结 本文将深入探讨如何判断两个JSON数据格式是否相同。我们将介绍JSON的基本概念&#xff0c;探讨比较JSON数据格式的必要性&am…

lua-resty-request库写入爬虫ip实现数据抓取

根据提供的引用内容&#xff0c;正确的库名称应该是lua-resty-http&#xff0c;而不是lua-resty-request。使用lua-resty-http库可以方便地进行爬虫&#xff0c;需要先安装OpenResty和lua-resty-http库&#xff0c;并将其引入到Lua脚本中。然后&#xff0c;可以使用lua-resty-h…

从「码农」到管理者,E人程序员的十年蜕变

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 当我们谈论程序员创业时&#xff0c;常常会首先想到一些传统观念认为的挑战&#xff1a;沟通技巧不佳、逻…

Python如何读取Excel中的数据?

目录 一、为什么需要读取Excel数据 二、使用pandas读取Excel数据 三、使用openpyxl读取Excel数据 四、注意事项 结论 本文将深入探讨如何使用Python读取Excel中的数据。我们会介绍为何需要读取Excel数据&#xff0c;以及如何使用Python中的pandas和openpyxl这两个强大的库…

使用treq库下载Python程序

好的&#xff0c;以下是一个使用treq库下载视频的Python下载器程序&#xff0c; # 导入需要的库 import treq from twisted.internet import reactor ​ # 设置服务器信息 proxy_host "" proxy_port ​ # 定义下载任务 def download_video(url):# 创建treq Reque…

【LeetCode刷题-哈希】--454.两数相加II

454.两数相加II 方法&#xff1a;使用哈希映射分治的思想 将四个数组分为两个部分&#xff1a; 首先计算nums1nums2对应的值&#xff0c;写入哈希映射 然后再计算nums3nums4对应的值 class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nu…

基于FPGA的IIC程序设计

IIC通信协议在实际的工程项目中应用很多&#xff0c;作为一名FPGA工程师是必须要掌握IIC&#xff0c;下面就开始学习吧&#xff0c;lets go&#xff01; 第一&#xff0c;E2PROM简介 作为初学者会购买一块FPGA开发板进行学习&#xff0c;开发板上一般都有E2PROM这个器件设备&am…

智能PDU电源管理器在高密度IDC机房部署中的重要性

智能电源管理是一种利用信息技术手段&#xff0c;优化电力的分配和使用&#xff0c;随着数据中心进行虚拟化部署和为提高计算效率而整合设备&#xff0c;平均机架功率密度在持续增长&#xff0c;几年前&#xff0c;一个普通机柜需要3-4千瓦电力&#xff0c;如今已变成低密度环境…

自定义微信公众号源码系统 带完整搭建教程

在我们现在的互联网时代&#xff0c;越来越多的人开始尝试通过微信公众号来传播自己的信息、提供服务或者进行营销。但是&#xff0c;市面上的微信公众号平台往往功能有限&#xff0c;不能满足部分用户的需求。这时&#xff0c;自定义微信公众号源码系统就成为了解决问题的最佳…