认识Servlet---2

认识Servlet---2_第1张图片

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

1.更方便的部署方式

2.访问出错的问题分析

3.Servlet的API之HttpServlet

1.更方便的部署方式
在上一期的讲解中,我们已经完整的创建项目并且编写代码并且得到了验证,那么七个步骤是否可以简化一下呢?
当然可以,我们能简化的地方就是打包代码和部署
那么我们就要借助插件plugin来完成这个工作
什么是插件呢?
插件就是为了实现小众功能而生的,可以视为是对某个软件原有功能的扩充

1.我们需要在IDEA应用商店下载Smart Tomcat插件
认识Servlet---2_第2张图片
在settings的marketplace搜索框搜索tomact,下载我这个图里面的Smart Tomcat,
使用Smart Tomcat可以简化打包部署工作
2.使用Smart Tomact
首次使用要稍微麻烦一点,需要配置一下
认识Servlet---2_第3张图片
同时这里自定义的名字就是Content Path,
如果我们的程序是拷贝war到webapps目录运行,Content Path就是war包的名字
如果使用Smart Tomcat,Content Path就是在上述配置自定义的名字,如果不配置,默认是项目名字
然后运行
在这里插入图片描述
点击这个三角就行
看运行结果
在这里插入图片描述
这个蓝色的点开就会报错
认识Servlet---2_第4张图片
为哈呢?
因为URL不匹配啊!
少了一个Servlet Path
认识Servlet---2_第5张图片

加上就对了
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---2_第6张图片

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

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

1.init方法
可以看到它的调用时间是在HttpServlet实例化之后被调用一次,什么时候HttpServlet被实例化呢?首次收到匹配的请求的时候,会调用到这个方法执行一次,来使用这个方法进行一些初始化的相关操作
认识Servlet---2_第7张图片
这个请求会触发HelloServlet类的doGet方法的执行,那么就会在调用doGet方法之前先调用init方法一次

认识Servlet---2_第8张图片
注意,只执行一次!!!
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 来让大家看
认识Servlet---2_第9张图片
doPost
认识Servlet---2_第10张图片
doPut
认识Servlet---2_第11张图片

doDelete
认识Servlet---2_第12张图片

最后强调一个问题
当浏览器出现乱码的情况,说明是乱码了.
数据返回的时候采用的编码方式是utf8
浏览器展示的时候,根据系统默认编码方式gbk来解析
这俩方式不一样,就会产生乱码问题
现在utf8更加主流,因此我们就在代码中添加这样一段代码

在这里插入图片描述

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

今天的讲解就到这里,我们下期再见咯,拜拜~~~
认识Servlet---2_第13张图片

你可能感兴趣的:(servlet,tomcat,java)