上手Servlet程序
创始人
2025-05-30 19:10:04

目录

1、手动打包

1.1、创建项目

1.2、引入依赖

1.3、创建目录

1.4、编写代码

1.5、打包程序

1.6、部署

1.7、验证

2、非手动打包

3、解决部分问题

3.1、端口问题

3.2、运行问题

3.3、smart tomcat工作原理

3.4、出现404

3.5、出现405

3.6、出现空白页

3.7、出现无法访问页面


Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app
网页被分为两类:

<1>静太页面:页面内容始终是固定不变的(静态页面就只是单纯HTML)

<2>动态页面:页面内容随着输入参数的不同而改变(动态则是HTML+数据)

如何使用Servlet连用Tomcat,写一个hello world

基本思想:写一个Servlet 程序,部署到tomcat上

操作以下7个步骤 ,告诉你如何是用Servlet

1、手动打包

1.1、创建项目

创建首次使用Maven,项目创建好了后,下面会有一个读条,从中央仓库架加载一些Maven的依赖

<1>需要网络 (有网才能下载)

<2>Maven仓库不在国内,网络不一定稳定,,这里的进度条可能会比较慢(时间短的话很快,如果慢的话就可能有一个小时)

注:创建好以后它会自动下载;只有第一次使用才会下载东西,后面就不会了,也会很快;如果报错失败了,过两天再尝试一下

对Maven重新理解:Maven是个单独的程序,但是IDEA中已经自带了(不需要任何插件)

 1.2、引入依赖

创建好以后,首先我们先了解以上创建好的目录里都有什么

接下来看怎么添加,如何添加,在哪添加

Servlet对应有jar包,放在pom.xml文件中

跟着以下操作来就行(以下是给出的中央仓库:用来找Servlet的jar包)

Maven 存储库:搜索/浏览/探索 (mvnrepository.com)

 1.3、创建目录

虽然Maven已经自动帮我们创建好一些目录了,但是还不够,这就是为啥还是廷难的“hello world”

<1>在main目录下 (和java ,resources并列),创建一个webapp目录(tomcat的规范格式)

<2>在webapp下创建 WEB-INF目录

<3>再在WEB-INF目录下创建一个web.xml文件

 <4>写web.xml文件内容


Archetype Created Web Application

复制该内容就行

注:这个代码是固定的,当前阶段不需要调整,自己保存下来即可,针对为啥会标红,不一定是错误,Idea对其他代码解析出现了问题,但是不是真错了

那说说为什么写web.xml文件??

其实也不是很明了为啥要写这个文件,我们不是引入了servlet依赖嘛,那他又在程序里起到了什么作用,有什么特殊的,如果没有涉过相关服务器的代码,所以程序都是要依赖main方法才能运行的(main方法就是这些程序的老大,我跑了,大家才能跑也就是其他在main方法内的小弟们),这里引入servlet依赖就是小弟,Tomcat就是老大,我们把写好的servlet程序扔到webapp目录下就相当于是tomcat门下的小弟了,那怎么辨认你是我门的小弟呢,那就是依靠目录WEB-INF/web.xml,这样就让tomcat知道了,tomcat运行(老大干活)就会把servlet(作为小弟的我们带上)代码加载并运行启动

1.4、编写代码

解释代码是干什么的:

我们这里写了一个doGet方法,不需要咱们手动调用,会交给Tomcat来调用,Tomcat收到get请求,就会触发doGet方法,Tomcat会构造好两个参数(此处代码里的参数)req 和 resp 

req : TCP socket中读出来的字符串,按照HTTP协议解析得到的对象,对象的属性就是HTTP请求报文格式相对应的;Tomcat针对请求,已经解析构造好的

resp :空的对象(不是纯空的,都new有对象,相当于占了空间,但是里面的各种属性还没有设置)

注:doGet此处就是为根据请求 req 结合咱们自己的业务逻辑构造出一个resp对象

@WebServlet("/hello")
public class Hello_Servlet2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//super访问父类是要直接pass掉的,因为什么也没有,请求啥// super.doGet(req, resp);// 这个是在服务器的     控制台   里打印.System.out.println("hello world");// 要想把 hello world 返回到客户端, 需要使用下面的代码.// getWriter 会得到一个 Writer 对象. 针对字符流写的操作resp.getWriter().write("hello world");}
}

代码解释:

此处的writer对象是从属于resp对象的,此时进行的write操作其实是往resp的body部分进行写入(也可能是直接写入网卡中),等resp对象整个构造好了,tomcat会统一的转成HTTP响应的格式,再写socket

在文件中提到了流对象,一般流对象我们看做针对硬盘写入,但是不是一定就得写到硬盘中,也可以写到内存缓冲区里

一个Servlet程序中,可以有很的Servlet类,每个Servlet类会关联不同的路径,会对应到不同的请求和响应,可以通过Servlet实现不同的功能(路径和Servlet类之间是一对一的关系

1.5、打包程序

打包过程怎么解释???

把程序编译好(得到一些.class文件),在把这些.class打成压缩包,jar就是一种.class构成的压缩包,jar包比较常见,但是此处要打的是war包,jar只是一个普通的java程序,war包则是tomcat专属的用来描述webapp的程序,一个war就是一个webapp。

这里打包借助Maven内,直接点击既可

 pom.xml文件内要添加的代码

war
hello_servlet2

 为啥要这么麻烦的打包,其实是可以不打包,但是为什么要这样,其实临时检测一个服务器是否能用就需要手动打包

idea很强大,但是不能依赖

注:开发环境(自己写的代码的电脑)和运行环境(另一个服务器)很可能不在一个环境,直接使用三角号,运行是本地运行,而不是另一个服务器上运行

1.6、部署

把刚才打包好的war拷贝到tomcat的webapps目录中即可

注:tomcat是在同一个电脑上还是不同电脑上,拷贝都有用

然后启动tomcat即可

1.7、验证

打开浏览器,输入url,访问写好的这个代码

 总结:刚才在浏览器地址栏中输入url之后,浏览器就构造了一个对应的HTTP,GET请求,发给了Tomcat就根据第一级路径,确定了具体的webapp,根据第二级路径,确定了是调用哪个类

2、非手动打包

下载安装tomcat

相比手动打包更加简单

idea中提供了一些API,开发插件,IDEA现有功能进行扩展,很多程序都有插件功能

 运行刚刚idea操作的插件

 3、解决部分问题

3.1、端口问题

Tomcat运行以后 可以查看谁占据了8080端口(在cmd打开的命令行中输入)

 netstat -ano | findstr 8080

这个25472就是表示PId可以去任务管理器中结束该端口

注:在没有启动服务器的情况下,是不会出现当前情况,自然这个命令也不会有什么用

3.2、运行问题

 运行后下面有一行蓝色显示行

重要提醒:不要点,不要点,不要点!!!不包含servlet path直接点击肯定404

3.3、smart tomcat工作原理

非手动打包,不是说自动把war包拷贝了(webapps里是不变的)是通过了另一种方式启动tomcat的,tomcat支持启动的时候显示指定一个特定的webapp目录,相当于是让tomcat加载单个webapp运行,idea直接调用tomcat,让tomcat加载当前项目中的目录

注:该过程,没有war包,也没有拷贝,也没有解压缩过程

3.4、出现404

<1>路径写错了

第一个就是 :url写错了

第二个就是:第一级路径写错了(一定要跟下面这个context path路径相同)

 第三个就是:servlet path路径(也就是第二路径写错了)注解

 <2>webapp没有正确被部署

web.xml内容错误、文件名错误、文件路径错误、文件位置错误

3.5、出现405

<1>比如浏览器发送GET请求,但是代码没有重写doGet就会出现网页页面405

<2>super.doGet没有删除 (为啥会这样呢)

3.6、出现空白页

代码中没有写resp.getWriter.write();

3.7、出现无法访问页面

tomcat没有启动

相关内容

热门资讯

Git Actions自动发布... Git Actions自动发布部署,非最完善但足够完善和上手的一篇 文章最后附带完整...
【Java (一:12-4 D... DTD&schema 笔记记录一、DTD&schema1. xml约束分类DTD&schema1.1...
#ubuntu# #perf#... 关于 perf相关内容,抓取命令较多,当需要大量数据时每次输入命令会比较...
计算机图形学 | 可编程渲染管... 计算机图形学 | 可编程渲染管线计算机图形学 | 可编程渲染管线3.1 从固定到可编程图形编程的发展...
【FPGA实验2】二进制转为格... 关于FPGA入门实验2——二进制到格雷码的转换的一个记录 实验中作用到的仪器信息: 芯...
代码随想录算法训练营第四十九天... LeetCode 121 买卖股票的最佳时机题目链接:https://leetcode...
损失2亿美元后续,Euler正... 损失金额约2亿美元的Euler finance 闪电贷攻击已经成为2023年最大的去中心化金融黑客攻...
pb清空数组 1、 清空数组 string a[],b[] a[1] = '1';a[1] = '2';a[1] ...
嘉兴市联合上海证券交易所举办科... 为进一步拓宽科创企业融资渠道、优化发行机制,全力支持科技创新,5月30日,嘉兴市联合上海证券交易所举...
全网最详细,python接口自... 目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目...
专业、简单、稳定,融云重新定义... 艾瑞咨询《2023 年全球互联网通信云行业研究报告》(下简称《报告》)显...
没有Unity,没想到居然还有... 搞什么硬件,当然搞得是安卓手机当然多年前,哥是有去过中兴面试的ÿ...
OJ练习第52题——插入区间 插入区间 力扣链接:57.插入区间 题目描述 给你一个 无重叠的 ,按照...
【分享】为什么我设计的PCB很... 同事都很奇怪,为什么我设计的PCB都很少出错,而他们设计的PCB...
神经科学年鉴 | 全面综述情绪... 导读情绪是经历和行为的基础,影响和激励我们生活的方方面面。几个世纪以来,...
雅克比矩阵学习笔记 前置 假设f:Rn→Rmf:R_n\to R_mf:Rn​→Rm​是从nnn维欧氏空间线性映射到到m...
国产操作系统第一股,杨涛的麒麟... 文丨熔财经作者|星影随着chatGPT和AI技术的火热,国产芯片和操作系统能否适应人机...
原创 扛... 据报道,外交部副部长马朝旭与美国常务副国务卿兰多通电话的消息引发关注。尽管中美双方新闻稿内容简洁,但...
重大违法,强制退市,周五停牌 每天三分钟 公告很轻松 双林股份拟定增募资不超15亿元;光洋股份:终止购买银球科技100%股权等事项...
基于C++的AI五子棋游戏项目... 项目资源下载 基于C++的AI五子棋游戏项目源码压缩包下载地址基于C+...
人工智能能否取代软硬件开发工程... 版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog....
CGI编程 1.什么是CGI?   CGI是通用网关接口(Common Gateway Interface);是...
windows下远程连接aws... 一:安装或更新kubectlKubectl 是一个命令行工具,用于与 K...
jemeter-arthas做... jemeter-arthas做接口压测 一、jemeter 是一款压力测试工具,使用如...
maven的pom依赖配置介绍... 依赖模板 ch.qos.logbacklogback-classic1.4.4test
知识点梳理2408482-09... 基础产品数据(Basic Product Data):CA...
牛顿-拉弗森算法 这是一种迭代算法,为了求解多变量方程f⃗(x⃗)=0⃗\vec{f}(\vec...
linux clash部署 linux clash部署linux clash 部署使用一 环境二 下载1 下载2 解压三 配置1...
国科大计算机算法分析与设计1—... 写在前面 国科大算法复习的时候,想着复习一下平常的作业题,也正好记录一下...
提前涨停!这一A股控制权生变 ... 【导读】实控人丁福如筹划公司股份协议转让事宜,菲林格尔股票停牌中国基金报记者 牛思若5月30日,菲林...