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. node中fs模块 - fs.open() fs.read() fs.write() fs.close()

    var fs = require('fs') fs.open('./a.txt', 'a+', function(err, fd) { // 打开文件后 创建缓冲区放置数据 ), // 读取多少字节 ...

  2. 续python学习(一)

    接上面没写完的知识点继写. 当然,这些知识点都很简单,可能没必要花费太多时间去记忆,多写写代码就会了. 5.字符串的使用.索引和切片是字符串主要的两个应用.索引:顾名思义就是找出某个字符在一个字符串中 ...

  3. 最新IntelliJ IDEA 2019.3版本永久激活,一步到位!

    简单介绍一下什么是IDEA? IDEA全称 IntelliJ IDEA,是java编程语言开发的集成环境.IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手.代码自动提示.重构. ...

  4. Web架构之Nginx基础配置

    目录 1.Nginx 虚拟主机 1.1.基于域名的虚拟主机 1.2.基于端口的虚拟主机 1.3.基于IP的虚拟主机 2.Nginx include 3.Nginx 日志配置 3.1.访问日志 3.2. ...

  5. django使用户名和邮箱都能登录

    为了能够让邮箱也能登录,需要重新定义认证功能,需要把email添加成username用于认证 定义的class继承ModelBackend,使用Q方法并集 然后在settings.py里面添加 这样既 ...

  6. 如何创建一个自定义的`ErrorHandlerMiddleware`方法

    在本文中,我将讲解如何通过自定义ExceptionHandlerMiddleware,以便在中间件管道中发生错误时创建自定义响应,而不是提供一个"重新执行"管道的路径. 作者:依乐 ...

  7. JAVA反射概念及使用详解(超详细)

    JAVA反射概念及使用详解 一.什么是反射? 反射:框架设计的灵魂 框架:半成品软件.可以在框架的基础上进行软件开发,简化编码 反射:将类的各个组成部分封装为其他对象,这就是反射机制 ​ 好处: ​ ...

  8. 组件/ 外层数据初始化时候,不应该触发 on-change 事件

    组件/ 外层数据初始化时候,不应该触发 on-change 事件 watch: { value (value) { this.noOnChange = true // 外层传值 不触发on-chang ...

  9. 使用Jmeter进行压力测试结果偏差较大原因分析

    Apache软件基金会(ASF)是一家总部位于美国的非营利性慈善组织.ASF的所有产品都通过公共论坛的在线协作开发,并从美国境内的中央服务器分发.Jmeter是ASF的一款开源免费软件 ,在国内被很多 ...

  10. 利用JDBC工具类添加和查询数据-Java(新手)

    JDBC工具类: 1 package cn.lxr.jdbclx; 2 3 import java.sql.*; 4 5 public class JDBCUtils { 6 private stat ...