hi,大家好,今天我们继续来认识Servlet
1.更方便的部署方式
2.访问出错的问题分析
3.Servlet的API之HttpServlet
🍨🍨🍨🍨
🍭1.更方便的部署方式
在上一期的讲解中,我们已经完整的创建项目并且编写代码并且得到了验证,那么七个步骤是否可以简化一下呢?
当然可以,我们能简化的地方就是打包代码和部署
那么我们就要借助插件plugin来完成这个工作
什么是插件呢?
插件就是为了实现小众功能而生的,可以视为是对某个软件原有功能的扩充
🧊1.我们需要在IDEA应用商店下载Smart Tomcat插件
在settings的marketplace搜索框搜索tomact,下载我这个图里面的Smart Tomcat,
使用Smart Tomcat可以简化打包部署工作
🧊2.使用Smart Tomact
首次使用要稍微麻烦一点,需要配置一下
同时这里自定义的名字就是Content Path,
如果我们的程序是拷贝war到webapps目录运行,Content Path就是war包的名字
如果使用Smart Tomcat,Content Path就是在上述配置自定义的名字,如果不配置,默认是项目名字
然后运行
点击这个三角就行
看运行结果
这个蓝色的点开就会报错
为哈呢?
因为URL不匹配啊!
少了一个Servlet Path
加上就对了
smart tomcat和上一个我们讲的将war包拷贝到wabapps里面运行存在本质区别
1.smart tomcat一般用于开发和调试阶段
2.将war包拷贝到wabapps里面运行一般是部署到生产环境时会用的
3.smart tomcat使用了Tomcat的另外一种运行方式,在运行Tomcat的时候,通过特定的参数,来指定Tomcat加载某个特定目录的webapp,下图可以体现这句话
所以这个过程没有打包也没有拷贝
=======================================================================
🍭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类
写Servlet程序就要继承这个类
我们要知道这个类里面哪些方法可以被重写,都是干啥的
方法名称 | 调用时机 |
init | HttpServlet 实例化之后被调用一次 |
destory | 在 HttpServlet 实例不再使用的时候调用一次 |
service | 收到 HTTP 请求的时候调用 |
doGet | 收到 GET 请求的时候调用(由 service 方法调用) |
doPost | 收到 POST 请求的时候调用(由 service 方法调用) |
doPut/doDelete/doOptions/… | 收到其他请求的时候调用(由 service 方法调用) |
1.init方法
可以看到它的调用时间是在HttpServlet实例化之后被调用一次,什么时候HttpServlet被实例化呢?首次收到匹配的请求的时候,会调用到这个方法执行一次,来使用这个方法进行一些初始化的相关操作
这个请求会触发HelloServlet类的doGet方法的执行,那么就会在调用doGet方法之前先调用init方法一次
注意,只执行一次!!!
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 来让大家看
doPost
doPut
doDelete
🥗🧀最后强调一个问题
当浏览器出现乱码的情况,说明是乱码了.
数据返回的时候采用的编码方式是utf8
浏览器展示的时候,根据系统默认编码方式gbk来解析
这俩方式不一样,就会产生乱码问题
现在utf8更加主流,因此我们就在代码中添加这样一段代码
这段代码就是告诉浏览器返回的数据是utf8格式的,那么浏览器就会按照utf8的格式去解析
今天的讲解就到这里,我们下期再见咯,拜拜~~~