开发了很久的web服务,使用了很多web框架,都忘记web技术最原始的模样了,今天来回顾下。
Servlet是sun公司提供的一门用于开发动态web资源的技术。我们普通的Java类实现了Servlet接口后,可将我们的服务部署在Web容器中,这样我们的服务就可以提供Web服务了。
在Web服务器中,用于处理客户端HTTP请求的Java对象,可以类比于Spring MVC中的Controller。
Servlet接口不在JDK中,因为Servlet属于JavaEE,是另一套类库(JavaSE与JavaEE的区别)。
Servlet是JavaWeb最为核心的内容,它是Java提供的一门动态web资源开发技术。
Servlet与SpringBoot的前世今生_DanceDonkey的博客-CSDN博客_springboot和servlet的关系
可以说,Servlet就是SpringBoot在web服务的底层代码。
Servlet 是 Sun 公司所设计开发的可以用于接收和处理 HTTP 请求的 Java 类。
Spring MVC 这样的框架就是对 Servlet 的二次封装,能够帮助我们自动的从 HTTP 请求中获得请求参数等工作,让我们可以将精力集中在业务代码上。
如果你使用过 Spring MVC 的,你就知道 Spring MVC 框架要想启动,必须配置 Spring MVC 最核心的一个类,DispatcherServlet,这个类就是 Servlet,没有这个核心类,你连整个 Spring MVC 框架都启动不了。
Spring Boot 其实就是对 Spring MVC 的二次封装,能够使我们不在困于 Spring MVC 繁琐的 XML 配置中,能够实现开箱即用的便利程度。因此 Spring Boot 的底层就是 Spring MVC,而 Spring MVC 的底层就是 Servlet。
需要在pom.xml中添加servlet依赖,然后才可以在项目中使用HttpServlet
- <!--加入servlet依赖(servlet的jar)-->
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <version>4.0.1</version>
- <scope>provided</scope>
- </dependency>
- <!--jsp的依赖(jsp相关的jar加进来)-->
- <dependency>
- <groupId>javax.servlet.jsp</groupId>
- <artifactId>javax.servlet.jsp-api</artifactId>
- <version>2.2.1</version>
- <scope>provided</scope>
- </dependency>
接口类需要继承javax.servlet.http.HttpServlet。
假设定义的类叫HelloServlet
- public class HelloServlet extends HttpServlet{
- //初始化servlet,调用init方法
- @Override
- public void init() throws ServletException {
- System.out.println("初始化时调用");
- }
- //开启服务
- @Override
- protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
- System.out.println("开启服务时调用");
- }
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-
- }
- //销毁时调用destory
- @Override
- public void destroy() {
- System.out.println("销毁时调用");
- }
- }
-
- <servlet>
- <servlet-name>helloservlet-name>
-
- <servlet-class>com.qiyi.HelloServletservlet-class>
- servlet>
-
-
- <servlet-mapping>
-
- <servlet-name>helloservlet-name>
-
-
- <url-pattern>/sdafs/sada/dsurl-pattern>
- servlet-mapping>
Servlet规范三大件分别是:servlet、过滤器、监听器
拦截器核心原理:AOP思想
过滤器是Servlet的技术。
执行顺序不同:所有的请求都是先经过过滤器,最后离开过滤器,中间执行的拦截器的方法。拦截器是在dispatcherservlet这个servlet中执行的。如下图所示:
SpringMVC拦截器处理流程:
拦截器与过滤器的区别:
springMVC之mvc:interceptors拦截器的用法_仓颉大哥的博客-CSDN博客_mvc:interceptors
- 1 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
-
- 2 过滤器是servlet规范规定的,只能用于web程序中,而拦截器是在spring容器中,它不依赖servlet容器。
-
- 3 过滤器可以拦截几乎所有的请求(包含对静态资源的请求),而拦截器只拦截action请求(不拦截静态资源请求)。
-
- 4 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
-
- 5 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
-
- 6 拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。
-
- 7 拦截器是被包裹在过滤器之中。
七、