Spring Boot整合Servlet(两种方式)

  1. 新建一个maven项目



    创建完成后的结构图:

  2. 引入pom.xml依赖
	<!--引入父项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.4.RELEASE</version>
</parent>
<dependencies>
<!--SpringBoot web启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

第一种方式(通过注解扫描方式完成Servlet组件的注册):

  1. 通过注解扫描方式完成Servlet组件的注册

    1.1. 创建一个Servlet



1.2. 编写Servlet代码:

@WebServlet(name = "firstServlet",urlPatterns = "/firstServlet") //urlPatterns:访问路径
public class firstServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("进来了firstServlet");
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}

1.3. 编写启动类

创建springboot启动类



代码:

@SpringBootApplication
//在spring boot启动时会扫描@WebServlet注解,并创建该类的实例
@ServletComponentScan
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}

注意:在启动类上需要加上@ServletComponentScan注解 意思是:在启动时扫描@WebServlet注解 ,创建Servlet的实例

1.4. 运行启动类 ,在浏览器输入localhost:8080/firstServlet



控制台输出信息

第二种方式(通过方法完成Servlet组件的注册)

  1. 创建一个Servlet

  2. 创建springboot启动类



    在main方法下新建一个注册Servlet组件的方法
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
} //添加一个方法,方法名无要求,必须返回ServletRegistrationBean。注册Servlet对象
@Bean //主键等价于<bean>标签
public ServletRegistrationBean<SecondServlet> getServletRegistrationBean(){
ServletRegistrationBean<SecondServlet> bean=
new ServletRegistrationBean<SecondServlet>(new SecondServlet(),"/SecondServlet");
return bean;
}
}
  1. 运行启动类 在浏览器输入 localhost:8080/SecondServlet

  2. 控制台打印信息

Springboot整合Filter (和整合Servlet方式差不多)

第一种方式(通过注解扫描方式完成Fliter组件的注册)

  1. 新建一个Filter类

  2. 继承Filter父类 实现接口



    代码如下:
@WebFilter(filterName = "firstFilter", urlPatterns = "/firstFilter")
public class firstFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("----进入FirstFilter-----");
chain.doFilter(request, response);//放行
System.out.println("----离开FirstFilter-----");
}
}
  1. 创建启动类



    代码如下:
@SpringBootApplication
//在spring boot启动时会扫描@WebServlet @WebFilter @WebListener注解,并创建该类的实例
@ServletComponentScan
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
} }

运行启动类,在浏览器输入 localhost:8080/firstFilter



这里报404是因为没有写放行后的路径;

控制台打印信息:

第二种方式(通过方法方式完成Filter组件的注册)

  1. 创建Filter类 不用写@WebFilter注解

  2. 启动类



    代码如下:
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
} //添加一个方法
@Bean
public FilterRegistrationBean<SecondFilter> getFilterRegistrationBean(){
FilterRegistrationBean<SecondFilter> bean=
new FilterRegistrationBean<SecondFilter>(new SecondFilter());
bean.addUrlPatterns("*.do","*.jsp","/SecondFilter"); //以.do , .jsp , SecondFilter结尾路径的都会进到过滤器
return bean;
}
}
  1. 运行启动类 在浏览器输入 localhost:8080/SecondFilter



    控制台打印信息:

Springboot整合Listener (同上)

通过注解扫描方式完成Fliter组件的注册

  1. 创建Listener类





    Listener代码:
@WebListener()
public class firstListener implements ServletContextListener{
//监听application对象的创建
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("-----------application对象创建-----------------");
}
}
  1. 创建启动类



    代码:
@SpringBootApplication
@ServletComponentScan //在spring boot启动时会扫描@WebServlet @WebFilter @WebListener注解,并创建该类的实例
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
  1. 运行启动类 看控制台打印信息

第二种方式(通过方法完成Listener组件注册)

代码一样 省略代码 直接上代码

  1. 创建Listener类
  2. 启动类



    代码:
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@Bean
public ServletListenerRegistrationBean<firstListener> getServletListenerRegistrationBean(){
ServletListenerRegistrationBean<firstListener> bean=
new ServletListenerRegistrationBean<firstListener>(new firstListener());
return bean;
}
}
  1. 运行启动类 看控制台打印信息

Springboot访问静态资源(两种方式)

第一种方式(通过ServletContext的根目录下寻找静态资源)

1.在src/main 下创建一个webapp的目录(目录名称必须为webapp)

在webapp下创建不同目录存放不同的静态资源,如:images 放图片 .



2. 运行启动类访问 直接访问资源路径



第二种方式(从classpath/static的目录下寻找静态资源)

在src/main/resources下创建一个static的目录(目录名称必须为static)

在static下创建不同目录存放不同的静态资源,如:images 放图片 .



2. 运行启动类访问浏览器 直接访问资源路径



以上就是本教程的相关内容,感谢观看,转载请注明出处

Spring Boot整合Servlet,Filter,Listener,访问静态资源的更多相关文章

  1. spring boot整合servlet、filter、Listener等组件方式

    创建一个maven项目,然后此项目继承一个父项目:org.springframework.boot 1.创建一个maven项目: 2.点击next后配置父项目及版本号 3.点击finish后就可查看p ...

  2. spring boot 2.x 系列 —— spring boot 整合 servlet 3.0

    文章目录 一.说明 1.1 项目结构说明 1.2 项目依赖 二.采用spring 注册方式整合 servlet 2.1 新建过滤器.监听器和servlet 2.2 注册过滤器.监听器和servlet ...

  3. Spring Boot 整合Servlet

    冷知识,几乎用不到 在spring boot中使用Servlet有两种实现方法: 方法一: 正常创建servlet,然后只用注解@ServletComponentScan package clc.us ...

  4. Spring Boot整合Servlet、Filter、Listener

    整合 Servlet   方式一:   编写 servlet package com.bjsxt.controller; import javax.servlet.ServletException; ...

  5. SpringBoot整合WEB开发--(九)整合Servlet,Filter,Listener

    简介: 如果需要整合第三方框架时,可能还是不得不使用Servlet,Filter,Listener,Springboot中也有提供支持. @WebServlet("/my") pu ...

  6. spring boot 2.x拦截器导致静态资源404终极解决办法

    首先添加application文件static路径,我的是yml文件 spring: mvc: static-path-pattern: /static/**然后注册拦截器类如下方法; @Overri ...

  7. Spring Boot 整合 Web 开发

    这一节我们主要学习如何整合 Web 相关技术: Servlet Filter Listener 访问静态资源 文件上传 文件下载 Web三大基本组件分别是:Servlet,Listener,Filte ...

  8. spring boot默认访问静态资源

    演示spring boot默认可以直接访问静态资源的2种方法: 第一种:在src/main/resources资源目录下创建一个名为"static"的文件夹(该文件夹的名称是规定死 ...

  9. Spring Boot整合实战Spring Security JWT权限鉴权系统

    目前流行的前后端分离让Java程序员可以更加专注的做好后台业务逻辑的功能实现,提供如返回Json格式的数据接口就可以.像以前做项目的安全认证基于 session 的登录拦截,属于后端全栈式的开发的模式 ...

随机推荐

  1. JZOJ 3453.【NOIP2013中秋节模拟】连通块(connect)

    3453.[NOIP2013中秋节模拟]连通块(connect) Time Limits: 1000 ms Memory Limits: 262144 KB (File IO): input:conn ...

  2. 第四章、深入理解vue组件

    4-1.使用组件的细节 a.使用is解决html出现bug 如下 table下面应该为tr,所以页面渲染的时候没有找到tr是有问题的,所以是有小bug,所以table中必须是tr b.改上面bug,t ...

  3. python opencv Sobel、Laplace、canny算子的边缘提取 以及参数解析

    前提:各种算子不完全区分好坏,但根据我实际操作分析得到,有的算子之间效果大相径庭,但有的也很相似,也就是各有各的用法,这里按 Sobel.Laplace.canny三种算子作比较,看其结果: 一.  ...

  4. mysql实现读写分离

    MySQL读写分离概述 1.读写分离介绍 对于目前单机运行MySQL服务.会导致MySQL连接数过多.最终导致mysql的宕机.因此可以使用多台MySQL服务器一起承担压力.考虑到项目中读写比例的不一 ...

  5. Spark入门(一)--用Spark-Shell初尝Spark滋味

    Spark-Shell的使用 执行scala命令的spark-shell 进入spark的sbin目录,打开键入 ./spark-shell 即可进入spark-shell的目录 spark-shel ...

  6. 分布式框架Celery(转)

    一.简介 Celery是一个异步任务的调度工具. Celery 是 Distributed Task Queue,分布式任务队列,分布式决定了可以有多个 worker 的存在,队列表示其是异步操作,即 ...

  7. SyntaxError: unexpected character after line continuation character

    SyntaxError: unexpected character after line continuation character 待解决问题:在运行.py文件时报错SyntaxError: un ...

  8. Gorm 预加载及输出处理(二)- 查询输出处理

    上一篇<Gorm 预加载及输出处理(一)- 预加载应用>中留下的三个问题: 如何自定义输出结构,只输出指定字段? 如何自定义字段名,并去掉空值字段? 如何自定义时间格式? 这一篇先解决前两 ...

  9. vue 开发时候 nginx绑定多个系统 爆红 sockjs-node/info?t

    如果你的浏览器,与NPM服务器,不是同一个机器(不是localhost),那么会导致这个报错. 我搜索了好久,才发现这个是可以在webpackjs里配置的(即vue.config.js): https ...

  10. Bugku流量分析题目总结

    flag被盗 题目链接:https://ctf.bugku.com/files/e0b57d15b3f8e6190e72987177da1ffd/key.pcapng 解题思路: 这个题目是比较基本的 ...