• [十二]SpringBoot 之 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也是如此)。 
    一、代码注册通过ServletRegistrationBean、 FilterRegistrationBean 和ServletListenerRegistrationBean 获得控制。 
    也可以通过实现 ServletContextInitializer 接口直接注册。

    二、在SpringBootApplication 上使用@ServletComponentScan注解后,Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码。

    1.通过代码注册Servlet示例代码:

    package me.shijunjie.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class MyServlet1 extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
    
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            System.out.println(">>>>>>>>>>doGet()<<<<<<<<<<<");
    
            doPost(req, resp);
    
        }
    
    
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            System.out.println(">>>>>>>>>>doPost()<<<<<<<<<<<");
    
            resp.setContentType("text/html"); 
    
            PrintWriter out = resp.getWriter(); 
    
            out.println("<html>"); 
    
            out.println("<head>"); 
    
            out.println("<title>HelloWorld</title>"); 
    
            out.println("</head>"); 
    
            out.println("<body>"); 
    
            out.println("<h1>这是:MyServlet1</h1>"); 
    
            out.println("</body>"); 
    
            out.println("</html>");
    
        }
    }
    package me.shijunjie.testspringboot2;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.context.embedded.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;
    
    import me.shijunjie.servlet.MyServlet1;
    
    @SpringBootApplication
    public class App 
    {
        
         /**
         * 注册Servlet.不需要添加注解:@ServletComponentScan
         * @return
         */
        @Bean
        public ServletRegistrationBean myServlet1(){
    
               return new ServletRegistrationBean(new MyServlet1(),"/myServlet/*");
        }
        
        public static void main( String[] args )
        {
            SpringApplication.run(App.class, args);
        }
    }

    测试

    2.使用注解注册Servlet示例代码 添加@WebServlet注解

    package me.shijunjie.servlet;
    
    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;
    
    @WebServlet(urlPatterns="/myServlet2/*",description="Servlet的说明")
    public class MyServlet2 extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println(">>>>>>>>>>doGet()<<<<<<<<<<<");
            doPost(req, resp);
        }
    
    
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            System.out.println(">>>>>>>>>>doPost()<<<<<<<<<<<");
    
            resp.setContentType("text/html"); 
    
            PrintWriter out = resp.getWriter(); 
    
            out.println("<html>"); 
    
            out.println("<head>"); 
    
            out.println("<title>HelloWorld</title>"); 
    
            out.println("</head>"); 
    
            out.println("<body>"); 
    
            out.println("<h1>这是:MyServlet2</h1>"); 
    
            out.println("</body>"); 
    
            out.println("</html>");
    
        }
    }

    添加@ServletComponentScan注解

    package me.shijunjie.testspringboot2;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    
    /**
     * Hello world!
     *
     */
    @SpringBootApplication
    @ServletComponentScan("me.shijunjie.servlet")
    public class App 
    {
        
        /* *//**
         * 注册Servlet.不需要添加注解:@ServletComponentScan
         * @return
         *//*
        @Bean
        public ServletRegistrationBean myServlet1(){
    
               return new ServletRegistrationBean(new MyServlet1(),"/myServlet/*");
        }*/
        
        public static void main( String[] args )
        {
            SpringApplication.run(App.class, args);
        }
    }

    测试

  • 相关阅读:
    TCP/IP模型及OSI七层参考模型各层的功能和主要协议
    Java – 虚函数、抽象函数、抽象类、接口
    Java CAS原理
    CAP原理中的一致性
    分布式系统CAP理论与CA选择
    数据库事务的特性、隔离级别、传播策略
    Java线程与锁
    JVM内存模型
    Java对象创建的过程及对象的内存布局与访问定位
    为什么Java匿名内部类访问的方法参数或方法局部变量需要被final修饰
  • 原文地址:https://www.cnblogs.com/s648667069/p/6489939.html
Copyright © 2020-2023  润新知