zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    模拟手机售电影票
    flex布局
    如何制作快速加载的HTML页面
    css布局列表,自适应
    iOS项目中常见定时器
    iOS中TableView的分割线顶格样式的实现
    iOS本地化项目上传到gitHub
    iOS初学者易懵逼的Timer延时
    iOS同种界面moda和push方式切换
    iOS之push和modal大不同
  • 原文地址:https://www.cnblogs.com/myitnews/p/12346086.html
Copyright © 2011-2022 走看看