• SpringBoot整合Servlet


    在传统的Servlet开发时,我们创建一个Servlet,需要在web.xml里做配置:

    <servlet>
        <servlet-name>FirstServlet</servlet-name> 
        <servlet-class>com.linhw.demo.servlet.MyFirstServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>FirstServlet</servlet-name>
        <url-pattern>/first</url-pattern>
    </servlet-mapping>

    这样每新增一个Servlet类都要在web.xml增加一段类似的配置,很繁琐,降低了开发的效率。

    SpringBoot提供了两种方式来解决整个问题:

    • 通过注解扫描完成 Servlet组件的注册
    • 通过方法完成 Servlet组件的注册

    引入依赖:

    <!-- 核心启动器, 包括auto-configuration、logging and YAML -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <!-- building web, including RESTful, applications using Spring MVC.
        使用Tomcat作为嵌入式容器, @RestController由这个starter提供-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    二、通过注解扫描完成 Servlet组件的注册

    在servlet3.0以后,web.xml中对Servlet配置,同样可以在@WebServlet注解中配置。

    @WebServlet(name="FirstServlet", urlPatterns={"/first"})
    public class MyFirstServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("FirstServlet Enter ......");
        }
    }

    @WebServlet属性详解:

    • name:类型String,指定Servlet 的 name 属性,等价于 <servlet-name>。如果没有显式指定,则该 Servlet 的取值即为类的全限定名。
    • value:类型String[],该属性等价于 urlPatterns 属性。两个属性不能同时使用。
    • urlPatterns:类型String[],指定一组 Servlet 的 URL 匹配模式。等价于<url-pattern>标签。
    • loadOnStartup:类型int,指定 Servlet 的加载顺序,等价于 <load-on-startup>标签。
    • initParams:类型WebInitParam[],指定一组 Servlet 初始化参数,等价于<init-param>标签。
    • asyncSupported:类型boolean, 声明 Servlet 是否支持异步操作模式,等价于<async-supported> 标签。
    • description:String类型,该 Servlet 的描述信息,等价于 <description>标签。
    • displayName:String类型,该 Servlet 的显示名,通常配合工具使用,等价于 <display-name>标签。

    使用注解的方式必须在SpringBoot启动类增加@ServletComponentScan注解,这样SpringBoot 启动时会扫描@WebServlet,实例化这些类。

    二、通过方法完成 Servlet组件的注册

    /**
     * 与第一种的区别,就是没有加@WebServlet注解
     */
    public class MySecondServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req, resp);
        }
        
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("MySecondServlet Enter ......");
        }
    }

    这种方式需要在配置类上以@Bean的形式注入到Spring容器中。

    @Configuration
    public class BootConfig {
        /**
         * 以@Bean注解实例化Servlet,注入到容器中,方法名称就是bean name
         */
        @Bean
        public ServletRegistrationBean getServlet(){
            ServletRegistrationBean secondServlet = new ServletRegistrationBean(new MySecondServlet());
            secondServlet.addUrlMappings(new String[]{"/second"});
            return secondServlet;
        }
    }
  • 相关阅读:
    sql 修改字段小记
    (转)web.config 为某个单独页面设置编码格式
    gb2312编码提交url乱码解决
    Windows 8上强制Visual Studio以管理员身份运行
    new、delete用法(一)
    把varchar转换为int 然后进行排序
    linq 整体修改字段
    游标用法
    分组并赋值
    读取xml
  • 原文地址:https://www.cnblogs.com/myitnews/p/12346086.html
Copyright © 2020-2023  润新知