• 【Spring boot 集成 servlet】


    Spring boot 集成 servlet
    Web 开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet、Filter、Listener、
    Interceptor 等等。
    当使用 Spring-Boot 时,嵌入式 Servlet 容器通过扫描注解的方式注册 Servlet、Filter 和 Servlet 规范的所有监听 器(如 HttpSessionListener 监听器)。
    Spring boot 的主 Servlet 为 DispatcherServlet,其默认的 url-pattern 为“/”。也许我们在应用中还需要定义更多
    的 Servlet,该如何使用 SpringBoot 来完成呢?
    在 spring boot 中添加自己的 Servlet 有两种方法,代码注册 Servlet 和注解自动注册(Filter 和 Listener 也是如 此)。
    在 spring boot 中添加自己的 Servlet 有两种方法,代码注册 Servlet 和注解自动注册(Filter 和 Listener 也是如 此)。
    一、代码注册通过 ServletRegistrationBean、
    FilterRegistrationBean 和 ServletListenerRegistrationBean 获得
    控制。
    也可以通过实现 ServletContextInitializer 接口直接注册。
    二、在 SpringBootApplication 上使用@ServletComponentScan 注解后,Servlet、Filter、Listener 可以直接通
    过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码。
    通过代码注册 Servlet 示例代码:
    com.hpit.sb.servlet.MyServlet1
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    /**
    * TODO 开发一个普通的servlet
    *
    *
    */
    @WebServlet (urlPatterns = "/myServlet/*" , name = "servlet1" , description = "this is my first servlet in spring
    boot" )
    public class MyServlet1 extends HttpServlet {
    private static final long serialVersionUID = 6613439809483079873L;
    @Override
    protected void doGet(HttpServletRequest req , HttpServletResponse resp ) throws ServletException,
    IOException {
    resp .setContentType( "text/html;charset=utf-8" );
    resp .setCharacterEncoding( "utf-8" );
    PrintWriter out = resp .getWriter();
    out .println( "" );
    out .println( "" );
    out .println( "Hello World" );
    out .println( "" );
    out .println( "" );
    out .println( "

    这是:MyServlet1

    "
    );
    out .println( "" );
    out .println( "" );
    }
    }
    程序入口配置:
    com.hpit.sb. App
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.Bean;
    import com.hpit.sb.servlet.MyServlet1;
    /**
    *
    *
    * 大家也许会看到有些demo使用了3个注解:
    @Configuration
    *
    * @EnableAutoConfiguration
    * @ComponentScan 其实:@SpringBootApplication申明让spring boot自动给程序进行必要的配置,
    * 等价于以默认属性使用@Configuration,
    * @EnableAutoConfiguration和 @ComponentScan 所以大家不要被一些文档误导了,让自己很迷茫了,希望本
    文章对您有所启发;
    */
    @SpringBootApplication
    public class App {
    /**
    * 注册Servlet.不需要添加注解:@ServletComponentScan
    * 这种方式已经在springboot中废弃
    * @return
    */
    @Bean
    public ServletRegistrationBean regMyServlet1() {
    return new ServletRegistrationBean( new MyServlet1(), "/myServlet/*" );
    }
    public static void main(String[] args ) throws Exception {
    SpringApplication. run (App. class , args );
    }
    }
    第二种方式:使用注解注册 Servlet 示例代码
    com.hpit.sb.servlet. MyServlet2
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    /**
    * TODO 使用注解开发第二个servlet,该servlet将使用注解注册
    *
    *
    */
    @WebServlet (urlPatterns = "/myServlet/*" , name = "serlvet2" , description = "this is the second spring boot
    servlet" )
    public class MyServlet2 extends HttpServlet {
    private static final long serialVersionUID = -7877622076081913248L;
    @Override
    protected void doGet(HttpServletRequest req , HttpServletResponse resp ) throws ServletException,
    IOException {
    resp .setContentType( "text/html;charset=utf-8" );
    resp .setCharacterEncoding( "utf-8" );
    PrintWriter out = resp .getWriter();
    out .println( "" );
    out .println( "" );
    out .println( "Hello World" );
    out .println( "" );
    out .println( "" );
    out .println( "

    这是:MyServlet1

    "
    );
    out .println( "" );
    out .println( "" );
    }
    }
    主程序配置:
    com.hpit.sb.App
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    import org.springframework.context.annotation.Bean;
    import com.hpit.sb.servlet.MyServlet1;
    /**
    *
    *
    * 大家也许会看到有些demo使用了3个注解:
    @Configuration
    *
    * @EnableAutoConfiguration
    * @ComponentScan 其实:@SpringBootApplication申明让spring boot自动给程序进行必要的配置,
    * 等价于以默认属性使用@Configuration,
    * @EnableAutoConfiguration和 @ComponentScan 所以大家不要被一些文档误导了,让自己很迷茫了,希望本
    文章对您有所启发;
    *
    */
    @SpringBootApplication
    @ServletComponentScan // 方式二:
    添加servlet 注册扫描,将自动注册添加了@WebServlet的类为serlvet
    public class App {
    /**
    * 方式一:注册Servlet.不需要添加注解:@ServletComponentScan 这种方式已经在springboot中废弃
    *
    * @return
    */
    /*
    * @Bean public ServletRegistrationBean regMyServlet1() { return new
    * ServletRegistrationBean(new MyServlet1(), "/myServlet/*"); }
    */
    public static void main(String[] args ) throws Exception {
    SpringApplication. run (App. class , args );
    }
    }
    启动日志

     

  • 相关阅读:
    MP157-0-遇见的问题及解决办法
    torch
    2023-9-12 阿里健康2024秋招后端开发-体检及泛医疗二面
    【Flink源码】JobManager启动流程
    技术管理进阶——如何面试
    阅读源码工具Sourcetrail
    微信小程序使用CryptoJS加密PassWord(MD5)
    iwebsec靶场 SQL注入漏洞通关笔记10- 双重url编码绕过
    k8s入门之Ingress(七)
    第10章:调试程序
  • 原文地址:https://blog.csdn.net/m0_72254454/article/details/127769296