文章目录
1.总括说明
我们的这个servlet到底是学习什么的:一组api,操作这个http协议,这个这组api是由这个tomcat提供的;
我们的网站涉及到这个前后端之间的交互,使用的协议就是http协议,我们的这个服务器根据客户端发送来的这个请求进行解析,得出来这个对应的响应,再把这个响应发回给我们浏览器;
2.httpservlet父类
2.1方法介绍
我们对于这个类其实并不陌生,因为我们之前写的这个代码里面是我们自己定义的这个类继承这个父类的,这个类就是我们的父类,我们的实现的方法的重写也是重写的这个父类里面的方法;
我们之前使用的这个doget方法就是这个父类里面的一个方法,但是不知道大家注意到没有,这个里面好像并没有去写这个main方法,我们之前的学习内容里面的这个程序都是要有这个main方法的,这样才是可以正常运行的,但是我们的这个servlet里面的这个是没有主方法的;
这个实际上是因为我们的这个servlet就是为了处理这个http请求和相应的,主要的这个任务还是有这个tomcat完成的,我们的这个项目里面写的这个代码到这个一定的时候就会被这个tomcat里面的这个内容调用到,相当于这个就是我们后面学习的这个框架的雏形,我们写的这个代码实际上是嵌入到这个tomcat里面的,因为这个servlet处理这个请求和相应的这个大部分的逻辑都是一样的,变化的就是这个一些部分,而这个变化的就是我们去编写的这个代码;后面我们学习的这个框架也是这个逻辑;

1)init完成初始化的工作;
2)service是在我们的这个服务器收到请求就会被调用;
3)destory就是我们创建的这个实例不使用的时候就会被执行一次;
上面的三个方法实际上就是我们的这个servlet的生命周期,生命周期就是我们的这个程序在什么时候会调用什么方法的这个过程;
上面的这三个方法实际上不会被经常使用,我们的这个service会被这个doget和dopost替代,因此这个使用到的这个可能性不是很大;
2.2dopost方法的演示

我们使用这个postman发送这个请求:我们的这个选择需要是post,然后发送(这个前提是我们的这个路径需要正确配置,j1103的这个就是我们上面介绍的这个context path,后面的这个hello2就是我们的servlet path,这个都是我们上面介绍过的,这个都是和我们的这个IDEA里面的这个一一对应的;
我们可以看到这个send之后就会显示我们的这个sout里面的这个内容,对应的这个IDEA里面的这个日志里面也会输出这个对应的内容;
我们的这个文件是新建的,这个servlet是不可以和之前的重复的,因为我们的这个tomcat就是根据这个执行的,当我们的两个servlet path都是一样的时候我们的这个tomcat就不知道具体需要执行哪一个了;

2.3doput方法的演示
我们的这个postman构造请求的时候,这个对应的也要选择这个put选项,这个路径是不变的,这个就会调用我们的代码里面的这个doput重写的方法;


3.HttpServletRequest类
3.1方法说明
这个类表示的就是我们的这个http里面的一个请求;
1)我们的这个第三个方法里面是这个uri不是我们熟悉的这个utl,这个URL通常会被当作这个URI进行使用,我们的这个URI类似于这个身份证号(唯一资源标识符),URL是唯一资源定位符(表示的就是地址),我们日常学习两个都是混着进行使用;
2)comtextpath就是我们在这个tomcat里面设置的第一级路径;
3)query string就是我们的这个查询字符串,一般都是以键值对的方式展现的,我们更多情况下是知道单个的键值对,而不是获取一长串;
4)最后一个是流对象,表示的是不定长的数据(可以一次处理一点,也可以一次性全部处理,也适合这个二进制相互匹配的);

3.2方法使用演示
下面的这个就是在这个doget里面调用我们的这个类里面的这个api,这个时候打印出来这个相关的内容:
我们创建一个stringbuider对象,这个所有的结果储存到这个里面去,统一返回我们的这个客户端,下面的这个while就是获取这个所有内容,返回给我们的这个服务器;

postman:我们的这个send之后下面的这个内容就是我们的这个字符串内容,我们使用这个里面的preview更好的对于这个结果进行查看;

浏览器也是可以预览的:我们的这个浏览器里面看到的这个效果和我们的这个postman里面的这个内容是一样的;

3.3getparameter方法使用
query string这个里面的键值对是我们程序员自定义的;实际进行开发的时候会经常使用这个query string这个键值对内容;

如果我们的这个url里面只写这个前面内容:username和这个password的返回值都是null,但是如果写上这个username=zhangsan 和这个password=123456之后,我们的这个服务器就会对于这个里面的相关的参数进行获取到的,打印在我们的这个控制台上面;

我们上面的这个url里面的这个user=zhnagsan 使用的就是英文,因此这个里面不会出现这个乱码的情况,如果我们写成这个username=张三,这个时候进行尝试会发现好像也是可以的;
但是我们最好是使用这个urlencoding工具把这个中文转换为这个对应的字符串之后再进行处理(直接使用这个网络上面的线程的urlencoding工具就可以了,我们输入这个张三,这个工具就会自动进行转换,我们把这个转换之后的结果换到这个username=()这个里面就可以了,这样是更加安全稳妥的);
3.4使用form表单的方式
这个就是我们对于这个dopost方法进行重写:

我们在这个postman里面构造这个post请求,对于这个body里面的用户名和参数进行设计,点击发送之后,这个里面就会出现这个ok,同时我们的这个IDEA里面也会获取这两个参数;

3.5jackson获取参数
引入这个依赖,需要从这个中央仓库下载;
在这个中央仓库里面去搜jackson,找到下面的这个,选择2.15版本吧(其他的应该也可以,但是没试过);


下面对于上面的这个方法的调用进行说明:
我们从这个inputstream这个输入流里面进行数据的读取,readvalue方法会对于从这个输入流里面读取的内容进行解析,解析成为这个map(键值对)第二个参数意义就是我们的这个map转换为这个java对象;
最后的这个respJson就是把我们的这个响应重新弄复原成为这个json数据,在我们的这个postman里面是可以看到这个效果的;
下面的这个是我们在这个postman里面的操作:

4.HttpResponse类
4.1设置状态码
下面的这个是我们使用这个类里面的senerror进行这个错误页面的设置;

这个postamn里面就会根据我们的这个senerror里面的这个参数对于错误页面进行设计;

setstatus方法是对于这个状态码进行设置,我们的这个上面的这个注释里面是207,运行起来这个错误信息就会显示出来这个207状态码(这个相当于就是我们自定义的);
4.2自动进行刷新
我们这个类里面的这个还有一些更加花哨的玩法:就是这个setheader方法里面使用这refresh参数,这个就会对于我们的这个页面进行自动刷新;

我们的这个postman里面会显示这个时间戳,但是这个不会进行刷新,我们把这个url放到这个浏览器的栏里面去,就会看到这个动态刷新的情景:

4.3重定向跳转
下面的这个就是两个方式:
1)两行代码:设置状态码302,设置这个跳转的页面;
2)一行代码:直接指出来这个跳转的位置;
上面的两个效果是一样的;

A-1730727338773)]
4.3重定向跳转
下面的这个就是两个方式:
1)两行代码:设置状态码302,设置这个跳转的页面;
2)一行代码:直接指出来这个跳转的位置;
上面的两个效果是一样的;
