欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > sevlet API

sevlet API

2025/4/30 1:10:20 来源:https://blog.csdn.net/X_HJJ/article/details/147579953  浏览:    关键词:sevlet API

sevlet API

API就是一组类和方法

HttpServlet

这是写servlet代码用到的核心的类,通过继承这个类,并重写其中的方法,让Tomcat去调用这里的逻辑.

init:webapp被加载的时候,执行

destroy:webapp被销毁的时候(Tomcat结束)执行,进行一些收尾工作.但是这个方法不保证能够调用到!!!

Tomcat有两种方式结束:

1.通过8005端口,给Tomcat发起特殊的请求,Tomcat就关闭了.(能够执行destroy)

2.直接杀死Tomcat进程.(无法执行到destroy)

(实际开发过程中,第二种方式居多,尤其是在Linux上,所以写代码的时候就不能依赖destroy)

service:每次收到请求,都会执行service,处理每个请求,但是我们通常使用doXXX方法来代替service

针对上述的这些方法,浏览器只能比较方便的构造get请求.

其他方法想要构造,就需要要使用postman

当然,实际开发中,用的最多的还是GET和POST.

HttpServletRequest

注意第三行:getRequestURI.

URI:唯一资源标识符

URL:唯一资源定位符,描述了网络上的一个资源.

URL也可以理解为URI的一种实现方式

getParameterNames()与getParameter()

这两个方法就可以让我们给服务器传递自定义数据.

主要是传输query string以及body.

query string本身是键值对结构的数据,Tomcat收到这个请求之后,就会把这个query string解析成Map这样的键值对,使用getParameter就可以根据key获取value

如果通过post form表单的形式提交请求的话,此时Body也是键值对格式,和query string 一样的.

getHeaderNames()与getHeader

获取到请求头里的键值对.Tomcat收到请求之后,也会把请求头解析成Map

getInputStream()

这个流对象就能得到body的内容

但是这里没有换行,\n在HTML中并不是换行,而需要使用
标签来表示换行

这里就和费德勒里面的结果类似.

更多的时候是希望获取到query string 或者 body 中的内容

获取query string

获取body(只考虑form表单的格式)

注意保证一个项目中,所有的servletPath不能重复的!!!

获取body(考虑body为JSON格式)

{
username:"zhangsan",
password:"123"
}

这种格式在开发中非常常见Servlet自身不能对JSON格式的数据进行解析,就需要引入第三方库,来解析body数据.

此时就需要添加新的依赖.

注意如果你的Maven获取源已经改为阿里云了,那么你要做的,便是等待下载(会非常慢,但没办法,手动导入很麻烦)

下载好之后,如何使用?

ObjectMapper:对象映射器:把一个对象映射到JSON字符串,也可以吧JSON字符串,映射到对象.

JSON转对象

这个方法有很多个版本,作用就是把JSON字符串给解析成Java对象.其中这里的第一个参数是一个流对象,也就表示JSON从哪里来读.

请求的body是通过getInputStream得到的流对象,进一步的读取出来的.

第二个参数,则是指定的类型,也就是说当前这边得到的JSON字符串,需要转成一个啥样的Java对象,需要指定一下对象的类型.

我们还需要定义一个类,这个类当中的属性的名字和类型都和JSON字符串匹配.

这个过程,输入的是JSON字符串,得到的是一个user对象,这就是把JSON字符串,映射成一个Java对象的过程.

直接在地址栏输入,这是一个get请求,而我们写的是一个post请求,所以会出现405

在postman里面,就可以这样操作了,注意在这里我将JSON的key也加上了"",但是在之前的注释中,没加""

这是因为JSON格式,key一定是字符串类型.所以原则上,key不写""也是完全可以的.但是有些库/程序,检查更加严格,就必须强制我们把key加上"".用js的ajax的方式来构造JSON,此时key就是没有引号的.

此时服务器已经顺利的将客户端发来的JSON格式的数据给进行了解析.

readValue就把req的body中的字符串读取并解析了,然后构造成了User对象,user对象中的属性,就是前面在JSON中所体现的内容.

对象转JSON

重点理解Jackson的readValue工作过程:

先把JSON字符串解析成键值对,先放到Map中.再根据参数填入的类对象,通过反射API就可以知道这个类里面有哪些属性,每个属性的名字和类型.依次把这里的每个属性都读取出来,通过属性名字查询上述的Map,把得到的值,赋值给这个类的属性.

约定前后端交互接口:此处的JSON相当于前端与后端传输数据的媒介,开发这样的项目需要前端和后端进行配合,配合之前就需要,先把要交互的数据给规定好(JSON是啥格式的,有哪些key,value是什么类型的,包括请求使用什么路径)

HttpServletResponse

HttpServletResponse 同样也是和HTTP响应数据相匹配,这不过HttpServletResponse是可以针对这些属性(状态码,各种header,body...)进行"设置"(写),而HttpServletRequest 是为了获取里面的属性(读)

对于doXXX这样的方法来说,本身要做的事情就是根据请求计算响应.

请求对象,是Tomcat收到请求之后,对http协议解析得到的对象.

响应对象,是Tomcat创建的空的对象,我们在代码中把响应对象的属性设置好(响应对象,就相当于是一个输出型参数).

注意:使用addHeader,header中就可能出现,key相同的两个键值对.

一般来说,是约定键值对中的key是唯一的.但是实践中,有些情况,确实也需要key不唯一,这种情况就相当于一个key对应多个value了.Tomcat内部不一定是吧header解析成标准库的Map,Java标准库的Map不允许key重复,但是有些第三方库是允许的.

注意此处说的允许重复的key是header中的,不是刚才body的JSON里的.

键值对,是计算机中非常常见的概念.

setStatus()

其实是可以在返回状态码的同时,给body也写入数据,这样就可以得到一些"个性化的错误页面"(可以对照搜狗和B站)

Tomcat也有内置的错误页面

日常开发一般不用Tomcat自带的这个.大部分情况下都需要自己写一个更好看的404.

setHeader()

设置任意的响应报头.此处我们举个例子:通过refresh属性,设置浏览器自动刷新.

例如我们设置refresh:2

此时浏览器就会每隔两秒自动刷新一次!!!

重定向响应

通过费德勒我们可以看到这样的一个操作过程.

这一行代码与上述两行代码是等价的.

控制body

此时出现??的原因是因为编码问题.一般在idea里直接写一个中文字符串,就是UTF-8编码.

浏览器,默认跟随系统编码.Windows简体中文版,默认的编码是gbk,拿着UTF-8的数据,浏览器按照gbk的方式来解析,势必就会出现乱码.

但是注意,在servlet中,给resp设置属性读的时候,必须要注意顺序!!!先设置header,后设置body,一旦开始设置body,此时就相当于header和status都定型了,已经来不及修改了.

上述已经交代了这三个核心api涉及到的类了.

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词