博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
servlet的开发
阅读量:3925 次
发布时间:2019-05-23

本文共 4987 字,大约阅读时间需要 16 分钟。

servlet的使用

相关参考:

  • 菜鸟教程参考:https://www.runoob.com/servlet/servlet-tutorial.html
  • servlet3.0:http://tomcat.apache.org/tomcat-7.0-doc/servletapi/index.html
  • servlet3.0社区文档:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.html
  • servlet4.0:http://tomcat.apache.org/tomcat-9.0-doc/servletapi/
  • servlet4.0社区文档:https://www.ibm.com/developerworks/cn/java/j-javaee8-servlet4/index.html?ca=drs-&utm_source=tuicool&utm_medium=referral

Servlet基础

什么是Servlet

sun公司制订的一种用来扩展web服务器功能的组件规范。

  1. 用来扩展web服务器功能

早期很多web服务器(比如apache,iis等)只能够处理静态资源的请求(需要实现将html文档准备好),不能够处理状态资源的请求(需要通过计算机,生成html),所以需要扩展。

早起使用CGI(Common Gateway Interface通用网关接口)程序来扩展,因为CGI开发繁琐,并且不好移植,所以用得少。可以使用Servlet来扩展web服务器功能

  1. 组件规范

    • 什么是组件:符合规范、实现部分功能,并且需要部署到相应的容器当中才能运行的软件模块。Servlet就是一个符合Servlet规范的组件,需要部署到Servlet容器当中才能运行。

    • 什么是容器:符合规范,提供组件的运行环境的程序。Servlet容器(比如Tomcat)为Servlet提供运行环境(主要是提供网络相关的服务)

servlet是如何运行的

  1. 浏览器依据ip和port,建立连接。
  2. 浏览器创建请求数据包并发送。
  3. 服务器解析请求数据包,并且将解析到的数据存放到request对象里面,同时,创建response对象。
  4. 服务器创建Servlet对象,然后调用该对象的service方法。(服务器会将request和response作为参数传递给service方法)
  5. 服务器从respnose对象中获取处理结果,然后创建响应数据包并发送。
  6. 浏览器解析响应数据包,然后依据解析到的数据生成相应的页面。

servlet 3.0部分新特性

新增的注解支持

@WebServlet

@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 的显示名,通常配合工具使用,等价于 标签。

@WebInitParam

该注解通常不单独使用,而是配合 @WebServlet 或者 @WebFilter 使用。它的作用是为 Servlet 或者过滤器指定初始化参数,这等价于 web.xml 中 和 的 子标签。@WebInitParam 具有下表给出的一些常用属性:

属性名 类型 是否可选 描述
name String 指定参数的名字,等价于 。
value String 指定参数的值,等价于 。
description String 关于参数的描述,等价于 。

@WebFilter

@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

该注解用于将类声明为监听器,被 @WebListener 标注的类必须实现以下至少一个接口:

  • ServletContextListener
  • ServletContextAttributeListener
  • ServletRequestListener
  • ServletRequestAttributeListener
  • HttpSessionListener
  • HttpSessionAttributeListener
属性名 类型 是否可选 描述
value String 该监听器的描述信息。

@MultipartConfig

该注解主要是为了辅助 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 和过滤器两种组件

  • 默认是不开启的,开启方式如下:

    1. 配置文件版:<async-supported>true</async-supported>
    2. 注解版:@WebFilter(urlPatterns = "/demo",asyncSupported = true)

servlet4.0部分新特性

服务器推送

服务器推送使服务器能预测客户端请求的资源需求。然后,在完成请求处理之前,它可以将这些资源发送到客户端。

要了解服务器推送的好处,可以考虑一个包含图像和其他依赖项(比如 CSS 和 JavaScript 文件)的网页。客户端发出一个针对该网页的请求。服务器然后分析所请求的页面,确定呈现它所需的资源,并主动将这些资源发送到客户端的缓存。

在执行所有这些操作的同时,服务器仍在处理原始网页请求。客户端收到响应时,它需要的资源已经位于缓存中。

所谓服务器推送,就是指服务器预测性的提前将资源发给浏览器进行缓存,当用户访问到需要这些资源的页面时,就可以直接从缓存中读取,从而加快页面访问速度,增加用户的体验感。

  • 推送步骤

    1. 设置推送资源

      PushBuilder pd = request.newPushBuilder();

      pd.path("1.jpg");

    2. 进行推送pd.push();

HttpServletMapping的使用

HttpServletMappingde API

  • getMatchValue() 返回部分 URI 路径,该路径会导致请求匹配。
  • getPattern() 返回 URL 模式的 String 表示形式。
  • getServletName() 返回 servlet 名称的 String 表示形式。
  • getMappingMatch() 返回匹配的类型,表示为 MappingMatch 枚举值,该枚举值将为以下值之一: CONTEXT_ROOT(根目录) 、 DEFAULT(默认) 、 EXACT(精准) 、 EXTENSION (拓展)或 PATH (路径)。

HttpFilter和Filter的区别

  • HttpFilter是一个类,直接继承即可,而Filter是一个接口,需要实现;
  • HttpFilter是Filter接口的一个实现类,多了对http协议的支持;
  • HttpFilter里的doFilter方法里面的参数带Http协议的,而Filter里面的这两个参数是不带http协议的;
  • 如果我们在拦截器里需要使用到带http协议的请求和响应的话,就优先使用HttpFilter类;

struts的使用

servlet、struts.x和struts2.x的关系说明

Struts2参考教程:https://w3cschool.cn/structs_2/

Struts2官方文档:https://struts.apache.org

共同点

  • 都是用来作为MVC模型中的Control层;
  • 主要功能在于交互式地浏览和修改数据,生成动态Web内容;

不同点

  • struts1.x需要继承Action类,和servlet的耦合度很高,甚至可以看成就是个servlet的封装,而struts2的就是一个javabean,实现是基于拦截器;
  • servlet和struts1均是单实例、多线程,线程不安全,struts2本身就是多实例、单线程的,所以可以说本身就是线程安全的。

在这里插入图片描述

SpringMVC的使用

参考资料:

  • http://w3cschool.cn/wkspring/9pf81ha5.html

和struts1均是单实例、多线程,线程不安全,struts2本身就是多实例、单线程的,所以可以说本身就是线程安全的。

[外链图片转存中…(img-02N5XNjE-1598521138560)]

SpringMVC的使用

参考资料:

  • http://w3cschool.cn/wkspring/9pf81ha5.html

  • 官网:http://docs.spring.io

转载地址:http://smugn.baihongyu.com/

你可能感兴趣的文章
sscanf 总结
查看>>
android图片特效处理之图片叠加
查看>>
windows 使用GetLocalTime 和GetSystemTime 所获得的时间不同
查看>>
Android进阶2之图片缩略图(解决大图片溢出问题)
查看>>
Android学习笔记进阶19之给图片加边框
查看>>
Android学习笔记进阶18之画图并保存图片到本地
查看>>
Android学习笔记进阶20之得到图片的缩略图
查看>>
Html制作漂亮表格
查看>>
android图片特效处理之怀旧效果
查看>>
android图片特效处理之锐化效果
查看>>
android图片特效处理之光晕效果
查看>>
JSP之JDBC操作Sql Server数据库
查看>>
Android学习笔记之RadioButton RadioGroup
查看>>
Android学习笔记进阶15之Shader渲染
查看>>
Java学习笔记之FreeTTS(语音)
查看>>
Android 给图片加边框
查看>>
获取JDBC中的ResultSet的记录的条数
查看>>
android图像处理(3)底片效果
查看>>
android图像处理(3)浮雕效果
查看>>
ExtJs 表格的实现
查看>>