认识Servlet---2

简介: 认识Servlet---2

hi,大家好,今天我们继续来认识Servlet


1.更方便的部署方式


2.访问出错的问题分析


3.Servlet的API之HttpServlet


🍨🍨🍨🍨

🍭1.更方便的部署方式

在上一期的讲解中,我们已经完整的创建项目并且编写代码并且得到了验证,那么七个步骤是否可以简化一下呢?

当然可以,我们能简化的地方就是打包代码和部署

那么我们就要借助插件plugin来完成这个工作

什么是插件呢?

插件就是为了实现小众功能而生的,可以视为是对某个软件原有功能的扩充


🧊1.我们需要在IDEA应用商店下载Smart Tomcat插件


63d185e50f9b47e988d4b64177f01ed7.png

在settings的marketplace搜索框搜索tomact,下载我这个图里面的Smart Tomcat,

使用Smart Tomcat可以简化打包部署工作


🧊2.使用Smart Tomact


首次使用要稍微麻烦一点,需要配置一下

2733d71d4fff473c977a9ed34baf36bd.png

同时这里自定义的名字就是Content Path,

如果我们的程序是拷贝war到webapps目录运行,Content Path就是war包的名字

如果使用Smart Tomcat,Content Path就是在上述配置自定义的名字,如果不配置,默认是项目名字

然后运行

2b958700e9514493b7764eb81955f11d.png

点击这个三角就行

看运行结果

a66e44b257934942aa145ba304036fee.png

这个蓝色的点开就会报错

c43b51a9f879403e9368cfec151a2068.png

为哈呢?

因为URL不匹配啊!

少了一个Servlet Path

55848c43ccf947b797b4dd3bb8c1a5d9.png

加上就对了

smart tomcat和上一个我们讲的将war包拷贝到wabapps里面运行存在本质区别


1.smart tomcat一般用于开发和调试阶段


2.将war包拷贝到wabapps里面运行一般是部署到生产环境时会用的


3.smart tomcat使用了Tomcat的另外一种运行方式,在运行Tomcat的时候,通过特定的参数,来指定Tomcat加载某个特定目录的webapp,下图可以体现这句话

87e3db62f5a942f894e3d909c0f205ae.png

所以这个过程没有打包也没有拷贝


=======================================================================


🍭2.访问出错的问题分析

我们来分析一下Servlet程序的常见问题

1.我们的老朋友了~~

404 表示浏览器访问的资源在服务器上不存在

原因


1.请求的路径写错了

2.路径写对了,war包没有加载正确 比如web.xml写错了,就会导致war包不能被正确加载 比如两个Servlet的Servlet Path一样,那么也会导致不能被正确加载 当出现错误,服务器日志有提示,可以根据那个看到错误显示

这里注意为什么说web.xml写错,就会导致war包不能被正确加载呢?


解答:war是一种 Java Web 应用程序包的标准格式,它包含了应用程序所有的资源文件、Java 类和配置文件等,并可以被部署在 Servlet 容器中。web.xml也是web程序的一个重要配置文件,如果 Web.xml 文件存在错误,会导致应用程序未能正确加载初始化,无法正常工作,从而无法提供应用程序的功能。此时,如果将有问题的 war 包部署在 Servlet 容器中,可能会导致 Servlet 容器出现异常,并提示加载 Web 应用程序失败


405


1.发的请求的方法和代码不一样 写的代码是doPost,发的是get请求,一定报错

2.没出现第一个问题,但是super.doGet忘记注释了


500:服务器抛异常了,就是代码的bug,进行调试即可


🍭3.Servlet的API之HttpServlet

Servlet API有很多,我们重点掌握三个类


1.HttpServlet类

2.HttpServletRequest

3.HttpServletResponse


今天我们先来介绍第一个


HttpServlet类

30b6f0d650664ab88b532fe464384e86.png

写Servlet程序就要继承这个类

我们要知道这个类里面哪些方法可以被重写,都是干啥的


方法名称 调用时机
init HttpServlet 实例化之后被调用一次
destory 在 HttpServlet 实例不再使用的时候调用一次
service 收到 HTTP 请求的时候调用
doGet 收到 GET 请求的时候调用(由 service 方法调用)
doPost 收到 POST 请求的时候调用(由 service 方法调用)
doPut/doDelete/doOptions/… 收到其他请求的时候调用(由 service 方法调用)

1.init方法


可以看到它的调用时间是在HttpServlet实例化之后被调用一次,什么时候HttpServlet被实例化呢?首次收到匹配的请求的时候,会调用到这个方法执行一次,来使用这个方法进行一些初始化的相关操作

63e37b77afb449b1810ed9d7a603191a.png

这个请求会触发HelloServlet类的doGet方法的执行,那么就会在调用doGet方法之前先调用init方法一次

34a5ec0b4bb7436294f0eddccd794626.png


注意,只执行一次!!!


2.destroy方法

这个方法是该webapp被卸载(被销毁之前)执行一次,用来做一些收尾工作.,不过destroy方法能否执行,这个具有不确定性

1.如果是按照8005管理端口停止服务器,那么destroy就能执行

2.如果采用暴力的方法直接杀死进程停止服务器,那么derstroy不能执行

Tomcat在启动的时候会占用两个端口,8080和8005

8080是业务端口

8005是管理端口,负责重新加载配置,重新启动,调整设置项等

3.service方法

每次收到路径匹配的请求的时候都会执行

不会重写service,都是重写doXXX

Servlet的生命周期

1.init在初始情况下调用一次

destroy是结束之前调用一次

service是每次收到路径匹配的请求都调用一次


doXXX的方法我们采用postman 来让大家看


92ea76ab8b214cfd81cd5afe1e801814.png


doPost

doPut

doDelete


🥗🧀最后强调一个问题

当浏览器出现乱码的情况,说明是乱码了.

数据返回的时候采用的编码方式是utf8

浏览器展示的时候,根据系统默认编码方式gbk来解析

这俩方式不一样,就会产生乱码问题

现在utf8更加主流,因此我们就在代码中添加这样一段代码


4e8448c8c09746c1a1f21005d3fa16ce.png

这段代码就是告诉浏览器返回的数据是utf8格式的,那么浏览器就会按照utf8的格式去解析

今天的讲解就到这里,我们下期再见咯,拜拜~~~

相关文章
|
6月前
|
设计模式 前端开发 Java
从0开始回顾SpringMVC---系列一
SpringMVC 1、什么是SpringMVC? SpringMVC是一个基于Java实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的及部分,简化开发,减少出错,方便组内开发人员之间的配合。 MVC ● Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao)和服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能
|
6月前
|
存储 Java 应用服务中间件
JavaWeb----Servlet技术
JavaWeb----Servlet技术
361 0
|
Java 应用服务中间件 程序员
|
开发框架 小程序 Java
|
消息中间件 SQL 缓存
Springboot之---强大的Servlet(十)
如今回头看下Servlet不仅如此强大,还具有很强烈的参考意义,能在现如今流行的大部分框架中找到它的影子。下面文章不止与探索Servlet,可能在其中穿插其他的关联知识点,旨在能从此次的学习中获取更多的知识点参考资料总结,转化为自己的理解输出,在文中我尽量以截图+复制全限定类名的方式记录,以便感兴趣的再次查找。
144 0
|
设计模式 SQL 存储
Springboot之---强大的Servlet(七)
如今回头看下Servlet不仅如此强大,还具有很强烈的参考意义,能在现如今流行的大部分框架中找到它的影子。下面文章不止与探索Servlet,可能在其中穿插其他的关联知识点,旨在能从此次的学习中获取更多的知识点参考资料总结,转化为自己的理解输出,在文中我尽量以截图+复制全限定类名的方式记录,以便感兴趣的再次查找。
98 0
|
JSON 网络协议 前端开发
Springboot之---强大的Servlet(六)
如今回头看下Servlet不仅如此强大,还具有很强烈的参考意义,能在现如今流行的大部分框架中找到它的影子。下面文章不止与探索Servlet,可能在其中穿插其他的关联知识点,旨在能从此次的学习中获取更多的知识点参考资料总结,转化为自己的理解输出,在文中我尽量以截图+复制全限定类名的方式记录,以便感兴趣的再次查找
126 0
|
Java Spring 容器
Springboot之---强大的Servlet(二)
如今回头看下Servlet不仅如此强大,还具有很强烈的参考意义,能在现如今流行的大部分框架中找到它的影子。下面文章不止与探索Servlet,可能在其中穿插其他的关联知识点,旨在能从此次的学习中获取更多的知识点参考资料总结,转化为自己的理解输出,在文中我尽量以截图+复制全限定类名的方式记录,以便感兴趣的再次查找。
83 0
|
Java 应用服务中间件 Spring
Springboot之---强大的Servlet(一)
如今回头看下Servlet不仅如此强大,还具有很强烈的参考意义,能在现如今流行的大部分框架中找到它的影子。下面文章不止与探索Servlet,可能在其中穿插其他的关联知识点,旨在能从此次的学习中获取更多的知识点参考资料总结,转化为自己的理解输出,在文中我尽量以截图+复制全限定类名的方式记录,以便感兴趣的再次查找。
245 0
|
存储 缓存 NoSQL
Springboot之---强大的Servlet(九)
如今回头看下Servlet不仅如此强大,还具有很强烈的参考意义,能在现如今流行的大部分框架中找到它的影子。下面文章不止与探索Servlet,可能在其中穿插其他的关联知识点,旨在能从此次的学习中获取更多的知识点参考资料总结,转化为自己的理解输出,在文中我尽量以截图+复制全限定类名的方式记录,以便感兴趣的再次查找。
82 0