本文共 4987 字,大约阅读时间需要 16 分钟。
相关参考:
sun公司制订的一种用来扩展web服务器功能的组件规范。
早期很多web服务器(比如apache,iis等)只能够处理静态资源的请求(需要实现将html文档准备好),不能够处理状态资源的请求(需要通过计算机,生成html),所以需要扩展。
早起使用CGI(Common Gateway Interface通用网关接口)程序来扩展,因为CGI开发繁琐,并且不好移植,所以用得少。可以使用Servlet来扩展web服务器功能
组件规范
什么是组件:符合规范、实现部分功能,并且需要部署到相应的容器当中才能运行的软件模块。Servlet就是一个符合Servlet规范的组件,需要部署到Servlet容器当中才能运行。
什么是容器:符合规范,提供组件的运行环境的程序。Servlet容器(比如Tomcat)为Servlet提供运行环境(主要是提供网络相关的服务)
@WebServlet 用于将一个类声明为 Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为 Servlet。该注解具有下表给出的一些常用属性(以下所有属性均为可选属性,但是 vlaue 或者 urlPatterns 通常是必需的,且二者不能共存,如果同时指定,通常是忽略 value 的取值)
属性名 | 类型 | 描述 |
---|---|---|
name | String | 指定 Servlet 的 name 属性,等价于 。如果没有显式指定,则该 Servlet 的取值即为类的全限定名。 |
value | String[] | 该属性等价于 urlPatterns 属性。两个属性不能同时使用。 |
urlPatterns | String[] | 指定一组 Servlet 的 URL 匹配模式。等价于 标签。 |
loadOnStartup | int | 指定 Servlet 的加载顺序,等价于 标签。 |
initParams | WebInitParam[] | 指定一组 Servlet 初始化参数,等价于 标签。 |
asyncSupported | boolean | 声明 Servlet 是否支持异步操作模式,等价于 标签。 |
description | String | 该 Servlet 的描述信息,等价于 标签。 |
displayName | String | 该 Servlet 的显示名,通常配合工具使用,等价于 标签。 |
该注解通常不单独使用,而是配合 @WebServlet 或者 @WebFilter 使用。它的作用是为 Servlet 或者过滤器指定初始化参数,这等价于 web.xml 中 和 的 子标签。@WebInitParam 具有下表给出的一些常用属性:
属性名 | 类型 | 是否可选 | 描述 |
---|---|---|---|
name | String | 否 | 指定参数的名字,等价于 。 |
value | String | 否 | 指定参数的值,等价于 。 |
description | String | 是 | 关于参数的描述,等价于 。 |
@WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的一些常用属性 ( 以下所有属性均为可选属性,但是 value、urlPatterns、servletNames 三者必需至少包含一个,且 value 和 urlPatterns 不能共存,如果同时指定,通常忽略 value 的取值 )
属性名 | 类型 | 描述 |
---|---|---|
filterName | String | 指定过滤器的 name 属性,等价于 |
value | String[] | 该属性等价于 urlPatterns 属性。但是两者不应该同时使用。 |
urlPatterns | String[] | 指定一组过滤器的 URL 匹配模式。等价于 标签。 |
servletNames | String[] | 指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,或者是 web.xml 中 的取值。 |
dispatcherTypes | DispatcherType | 指定过滤器的转发模式。具体取值包括: ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。 |
initParams | WebInitParam[] | 指定一组过滤器初始化参数,等价于 标签。 |
asyncSupported | boolean | 声明过滤器是否支持异步操作模式,等价于 标签。 |
description | String | 该过滤器的描述信息,等价于 标签。 |
displayName | String | 该过滤器的显示名,通常配合工具使用,等价于 标签。 |
该注解用于将类声明为监听器,被 @WebListener 标注的类必须实现以下至少一个接口:
属性名 | 类型 | 是否可选 | 描述 |
---|---|---|---|
value | String | 是 | 该监听器的描述信息。 |
该注解主要是为了辅助 Servlet 3.0 中 HttpServletRequest 提供的对上传文件的支持。该注解标注在 Servlet 上面,以表示该 Servlet 希望处理的请求的 MIME 类型是 multipart/form-data。另外,它还提供了若干属性用于简化对上传文件的处理。具体如下:
属性名 | 类型 | 是否可选 | 描述 |
---|---|---|---|
fileSizeThreshold | int | 是 | 当数据量大于该值时,内容将被写入文件。 |
location | String | 是 | 存放生成的文件地址。 |
maxFileSize | long | 是 | 允许上传的文件最大值。默认值为 -1,表示没有限制。 |
maxRequestSize | long | 是 | 针对该 multipart/form-data 请求的最大数量,默认值为 -1,表示没有限制。 |
为了解决servlet异步阻塞的问题
异步处理特性可以应用于 Servlet 和过滤器两种组件
默认是不开启的,开启方式如下:
<async-supported>true</async-supported>
@WebFilter(urlPatterns = "/demo",asyncSupported = true)
服务器推送使服务器能预测客户端请求的资源需求。然后,在完成请求处理之前,它可以将这些资源发送到客户端。
要了解服务器推送的好处,可以考虑一个包含图像和其他依赖项(比如 CSS 和 JavaScript 文件)的网页。客户端发出一个针对该网页的请求。服务器然后分析所请求的页面,确定呈现它所需的资源,并主动将这些资源发送到客户端的缓存。
在执行所有这些操作的同时,服务器仍在处理原始网页请求。客户端收到响应时,它需要的资源已经位于缓存中。
所谓服务器推送,就是指服务器预测性的提前将资源发给浏览器进行缓存,当用户访问到需要这些资源的页面时,就可以直接从缓存中读取,从而加快页面访问速度,增加用户的体验感。
推送步骤
设置推送资源
PushBuilder pd = request.newPushBuilder();
pd.path("1.jpg");
进行推送pd.push();
HttpServletMappingde API
getMatchValue()
返回部分 URI 路径,该路径会导致请求匹配。getPattern()
返回 URL 模式的 String
表示形式。getServletName()
返回 servlet 名称的 String
表示形式。getMappingMatch()
返回匹配的类型,表示为 MappingMatch
枚举值,该枚举值将为以下值之一: CONTEXT_ROOT
(根目录) 、 DEFAULT
(默认) 、 EXACT
(精准) 、 EXTENSION
(拓展)或 PATH
(路径)。Struts2参考教程:https://w3cschool.cn/structs_2/
Struts2官方文档:https://struts.apache.org
共同点:
不同点:
参考资料:
和struts1均是单实例、多线程,线程不安全,struts2本身就是多实例、单线程的,所以可以说本身就是线程安全的。
[外链图片转存中…(img-02N5XNjE-1598521138560)]
参考资料:
http://w3cschool.cn/wkspring/9pf81ha5.html
官网:http://docs.spring.io
转载地址:http://smugn.baihongyu.com/