使用tomcat里的API - servlet

一、创建一个新的Maven空项目 

首次创建maven项目的时候,会自动从maven网站上下载一些依赖组件(这个过程需要保证网络稳定,否则后续打包一些操作会出现一些问题)

ps:校园网可能会屏蔽一些网站,可能会导致maven的依赖下载失败(可以切换到手机热点试试)

可以看到这里的目录

二、引入依赖

servlet是tomcat提供的api,不是jdk提供的,属于第三方库

(不是jdk自带的,需要手动安装引入)

通常一个项目依赖的内容非常多,手动管理就很麻烦,而maven就可以很方便的解决这个问题

1)打开maven中央仓库,找到需要servlet的jar包

https://mvnrepository.com/

选择3.1.0这个版本(因为我的tomcat是8这个版本,刚好和这个servlet匹配) 

复制代码粘贴到

这个dependecies标签,可以包含很多个依赖,其中我们粘贴进去的dependency标签就是其中一个依赖 复制完之后刷新(右上方会有一个蓝色的m按钮,点一下就可以安装了)

安装成功是这样(安装好之后,后面使用就不用再安装了)

安装失败,会标红(亲测,校园网不太行,第一次失败了,后来用热点才弄好的)

可以看一些这个下载的包在哪

再根据这个信息

找到了这个jar包

 三、创建目录(创建一个tomcat结构的目录)

maven项目是普适的,使用于各种场景,不仅仅是tomcat

而我写的代码最总要放到tomcat上,就必须遵循tomcat的要求

创建一个tomcat结构的目录

其中这个web.xml不能空着,里面必须有东西,不然tomcat无法识别,

这里用一个模板复制粘贴进去即可。

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app><display-name>Archetype Created Web Application</display-name>
</web-app>

IDEA只对Java语言精准报错,对其他语言的报错只能作为参考(不一定准,可以不用管)

实在看不惯这个标红,可以alt+enter键 选择 ignore这个报错也可以


 以上几个步骤都是固定式操作,需要多操作几次才能熟悉

预备工作做完之后,接下来才是真正编写代码

四、编写代码

在Java目录中创建一个类,继承HttpServlet这个父类(该类就是前面安装的jar包里的类,不是jdk自带的)

main文件夹下的java里创建类

不是在test下

后面写的时候发现问题了(在这里创建没用的,tomcat网页上查看不到hello world)

重写父类的doget方法

doGet是处理HTTP GET请求的方法

重写,是为了给原有的代码实现自定义的功能

当tomcat收到一个GET请求的时候,有可能会执行到子类这个方法中,这个方法的两个参数分别是

HTTP请求 ,HTTP响应

根据服务器的主要逻辑,大概是三个步骤

1.读取请求并解析

        HTTP 请求本身是个字符串,此处就是解析HTTP请求字符串,构造成HttpServletRequest对象(tomcat自动完成)

2.根据请求计算响应(doGet要做的事情,我们要编写的地方)

3.返回响应给客户端

(tomcat会自动,把响应对象组织成HTTP格式的字符串)

 doGet方法创建了这个HttpServletResponse resp对象,但目前只是个空壳,需要我们进行计算

这个对象里的各种属性还需要进行设置

五、打包代码

1)在 pom.xml 里写入代码

packaging标签里设置打包的类型,默认打包 jar包。

build标签以及里面的finalname标签,设置包的名字。

(java中通用的打包方式,任何程序都可以打包成 jar 包,jar包里最重要的文件就是 .class文件)

tomcat要求的是 war包

(tomcat专属的压缩包 是 war 包,里面不仅有 .class文件,还有一些tomcat要求的配置文件web.xml等,还有一些代码html,css,js)

2)打包

如果看到build success 就说明打包成功了

可以再左边的目录里,看到target文件,里面出现了java109的war包

失败会显示一些报错原因:

1)可能是网络不顺畅。导致首次打包过程中,下载的一些第三方的jar包,maven下载出现问题。

(首次打包,容易出现问题。这些依赖下载好之后,后续就不用再下载了)

2)配置文件编写错误。例如 pom.xml。

六、部署程序

右键java109这个jar包,在open in 这里,点击explorer

复制目录中的 java109.jar文件,到tomcat的webapps中

启动 tomcat

在tomcat的文件里面, bin下找到startup.bat(windows点bat,linux点sh)启动

启动成功

七、验证程序

通过浏览器,访问tomcat,获取到我们写的代码中的hello world

由于安装了smart tomcat插件,所以路径稍微有点变化

原本访问的是 http://127.0.0.1:8080/109java/hello

后面装了插件,路径是 http://127.0.0.1:8080/hello_servlet/hello

109java对应的路径是,之前导入的这个109java.jar包

hello对应的是

最后成功访问

在tomcat的日志中也能看到,获取到的get请求

 八、如果修改了代码

1.普通的修改代码 - 需要重新打包,重新部署

加入代码中有些地方需要修改,修改后,刷新是看不到变化的

需要重新打包,重新部署

 

重新启动tomcat之后,内容就刷新了

2.安装了Smart Servlet这个插件之后,直接重新启动就可以了 

 

在网页刷新之后,就能看到修改后的内容了(简洁方便) 

 

九、关于编码方式

当我们把内容修改成中文的时候,发现浏览器上显示的中文字符乱码了

 

分析原因

乱码的情况,有可能是字符编码方式和解码方式不同导致的

常见的字符编码有utf-8和 gbk  ,如果编码utf-8而解码使用的gbk那就可能导致乱码,同样编码用gbk,解码用utf-8也会乱码

查看IDEA的编码方式 是 utf-8

而浏览器的默认编码方式是 windows-1252

编码方式与解码方式不同,所以乱码了 

解决问题

在HTTP响应报文中,显式的告诉浏览器,返回的body字符集是啥样的

在编码的时候,就指定ContentType,让浏览器根据这个内容类型来解码,这样就能保证编码和解码方式一致,同时我们指定这个类型是utf-8,因为这个编码方式是主流

重新启动smart servlet之后,刷新页面,内容正确显示出来了 

 

十、初学过程中 常见错误

1)404错误 - 找不到页面

1.url网址错误(路径错误)

 确保一级路径和二级路径的正确性

 

路径写错了(可能是一级路径、可能是二级路径)

 

2.webapp没有正确加载

例如文件目录错误,没有按照正确的tomcat目录要求

正确应该是

例如web.xml代码没写或者写错了

正确应该是

2)405错误 - 方法没有被实现

例如发送的是http的get请求,但是servlet没有重写doGet这个方法,或者写错方法了写成了doPost方法 

如果写错

 

例如,在重写doGet方法中,没有删掉原有的super(调用父类的方法) 

 

3)500 - 服务器内部错误

一般是代码中报出异常了

这里是空指针异常

可以在这个网页里,看到异常是什么

 

4)页面空白

可能是代码里没有写正文的响应的内容 

5)无法访问此网站

tomcat没开或者挂掉了

关掉smart servlet之后

无法访问了

 

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

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

相关文章

Chat2DB

序言 日常开发中&#xff0c;我们可能会用到MyBatis Generator自动生成Entity实体类、DAO接口以及对应的Mapper文件可以减少一部分的冗余代码开发量&#xff0c;随着AI的发展&#xff0c;可以将自然语言转换为SQL语句&#xff0c;例如ChatSQL、阿里的Chat2DB等。 Chat2DB简介…

Stable Diffusion模型基于 TensorFlow 或 PyTorch 训练

安装必要的软件和库&#xff1a; 安装 Python&#xff08;建议使用 Python 3.x 版本&#xff09;。安装 TensorFlow 或 PyTorch&#xff0c;具体版本取决于你的模型是基于哪个框架训练的。安装其他可能需要的依赖&#xff0c;如 NumPy、Matplotlib 等。 获取模型代码和权重&…

git Failed to connect to 你的网址 port 8282: Timed out

git Failed to connect to 你的网址 port 8282: Timed out 出现这个问题的原因是&#xff1a;原来的仓库换了网址&#xff0c;原版网址不可用了。 解决方法如下&#xff1a; 方法一&#xff1a;查看git用户配置是否有如下配置 http.proxyhttp://xxx https.proxyhttp://xxx如果…

蓝桥杯第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组题解

1.幸运数 题目链接&#xff1a;0幸运数 - 蓝桥云课 (lanqiao.cn) #include<bits/stdc.h> using namespace std; bool deng(string& num){int n num.size();int qian 0,hou 0;for(int i0;i<n/2;i) qian (num[i]-0);for(int in/2;i<n;i) hou (num[i]-0);r…

数据库体系概述:详述其基本概念、多样分类、关键作用及核心特性

数据库是一个用于存储、管理和检索数据的系统&#xff0c;它按照特定的数据结构和模式组织数据&#xff0c;确保数据的一致性、安全性和高效访问。以下是关于数据库的详细介绍&#xff1a; 介绍&#xff1a; 数据库&#xff08;Database, DB&#xff09;是一个长期存储在计算…

ubuntu 设置时区

设置东八区&#xff08;UTC8&#xff09; timedatectl set-timezone Asia/Shanghai2.修改/etc/default/locale&#xff0c;设置24小时制 LC_TIMEen_DK.UTF-8执行tzselect&#xff0c;在国内选择亚洲 Asia确认之后选择中国&#xff08;China)接着选择北京(Beijing)最后选择(Ye…

算法汇总啊

一些常用算法汇总 算法思想-----数据结构动态规划(DP)0.题目特点1.【重点】经典例题(简单一维dp&#xff09;1.斐波那契数列2.矩形覆盖3.跳台阶4.变态跳台阶 2.我的日常练习汇总(DP)1.蓝桥真题-----路径 算法思想-----数据结构 数据结构的存储方式 : 顺序存储(数组) , 链式存储…

1.docker

Docker 是一种容器化平台&#xff0c;可以在不同的操作系统中轻松运行和管理应用程序。它使用容器技术来打包应用程序及其所有依赖关系&#xff0c;使其可以在任何环境中运行。 Docker 的基本概念包括以下几个部分&#xff1a; 镜像&#xff08;Image&#xff09;&#xff1a;…

RTX RTOS操作实例分析之---邮箱(mailbox)

0 Preface/Foreword 1 邮箱&#xff08;mailbox&#xff09; 1.1 mailbox ID定义 static osMailQId app_mailbox NULL; 1.2 定义mailbox结构体变量 #define osMailQDef(name, queue_sz, type) \ static void *os_mail_p_##name[2]; \ const char mail_##name[] #name; \ con…

conda创建虚拟环境太慢,Collecting package metadata (current_repodata.json): failed

(省流版&#xff1a;只看加粗红色&#xff0c;末尾也有哦) 平时不怎么用conda&#xff0c;在前公司用服务器的时候用的是公司的conda源&#xff0c;在自己电脑上直接用python创建虚拟环境完事儿&#xff0c;所以对conda的配置并不熟悉~~【狗头】。但是python虚拟环境的最大缺点…

U盘属性0字节,数据恢复全攻略

U盘&#xff0c;这个我们日常生活中常用的数据存储工具&#xff0c;有时却会突然显示出“属性0字节”的诡异状况。面对这种突如其来的故障&#xff0c;许多用户都感到束手无策&#xff0c;甚至误以为数据已经彻底丢失。那么&#xff0c;U盘属性0字节究竟是怎么回事&#xff1f;…

Linux学习 - 文件内容操作

Linux学习 - 文件内容操作 常用的文件内容操作有文件压缩解压缩、文件大小行数统计、文件内容查询等。 gzip: 压缩文件; gunzip: 解压缩文件 # gzip -c 把压缩的文件输出到标准输出 (一般是屏幕) # > 输出重定向&#xff0c;输出写入文件ctehbio:~/ehbio_project$ gzip -…

OpenCV 使用freetype在图像上写中文

​​​​​​ #include "opencv2/opencv.hpp" #include "opencv2/freetype.hpp"static cv::Ptr<cv::freetype::FreeType2> getFreeType() {static cv::Ptr<cv::freetype::FreeType2> ft2;if (ft2.empty()){ft2 cv::freetype::createFreeType…

小红书商业IP变现策略与实操经验分享

一、个人介绍与背景 1. 创业者背景 作为连续创业者&#xff0c;我创立了树叶有光品牌&#xff0c;并在多个领域有所涉猎&#xff0c;如人生陪跑师、财富卡点爆破师等。这些多重身份让我在创业过程中积累了丰富的经验和独特的视角。 二、小红书账号运营经验 1. 运营成果 经…

Ubuntu 22.04安装新硬盘并启动时自动挂载

方法一 要在Ubuntu 22.04系统中安装一个新硬盘、对其进行格式化并实现启动时自动挂载&#xff0c;需要按以下步骤操作&#xff1a; 1. 安装硬盘 - 确保你的硬盘正确连接到计算机上&#xff08;涉及硬件安装&#xff09;。 2. 发现新硬盘 - 在系统启动后&#xff0c;打开终端…

30天拿下Rust之实战Web Server

概述 随着互联网技术的飞速发展&#xff0c;Web服务器作为承载网站与应用的核心组件&#xff0c;其性能、稳定性和安全性都显得至关重要。Rust语言凭借其独特的内存安全保证、高效的性能以及丰富的生态系统&#xff0c;成为了构建现代Web服务器的理想选择。 新建项目 首先&…

c++类设计

C++ 中的类(Class)是一种用户自定义的数据类型,用于封装数据和函数成员。它是面向对象编程(OOP)的基本概念之一,用于实现抽象数据类型(ADT)和对象的行为。 设计C++类的成员变量和成员函数通常需要考虑以下几个方面: 封装性(Encapsulation):类的成员变量应该被定义…

适合户外运动的开放式耳机选哪款?五款开放式耳机推荐

开放式蓝牙耳机由于其开放式设计&#xff0c;适合在户外运动、工作场所等需要保持警觉的场合使用。在户外活动中&#xff0c;能够听到周围环境的声音对于安全和警惕性非常重要。同时&#xff0c;这种耳机在运动或工作时不容易产生不适感&#xff0c;也不会阻碍佩戴者与他人的交…

高等数学基础篇(数二)之二重积分(解析版)

二重积分&#xff1a; 一、二重积分的概念及性质 1.二重积分的概念 2.二重积分的性质 二、二重积分的计算 1.利用直角坐标计算 2.利用极坐标计算 3.利用函数的奇偶性计算 4.利用变量的轮换对称性计算 目录 一、二重积分的概念及性质 1.二重积分的概念 2.二重积分的性…

如何确定开多少个线程合适

任务性质&#xff1a;首先要明确任务的性质&#xff0c;是CPU密集型、IO密集型还是混合型。对于CPU密集型任务&#xff0c;线程数通常不宜过多&#xff0c;以免过多的上下文切换导致性能下降&#xff1b;对于IO密集型任务&#xff0c;可以适当增加线程数以充分利用等待IO的时间…