SpringBoot再回首:SpringBoot之Servlet用法

Java 发表评论

       今天我们来讨论一下,SpringBoot怎么整合Servlet….

      在传统的Servlet开发时,我们创建一个Servlet,.需要在web.xml里做配置,相信大家在刚开始学习Servlet时,都会在web.xml里做如下配置:

   

<servlet>
    <servlet-name>FirstServlet</servlet-name>
    <servlet-class>com.llp.servlet.FirstServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>FirstServlet</servlet-name>
    <url-pattern>/first</url-pattern>
</servlet-mapping>

这样每写一个Servlet类都要在web.xml配置一段类似的代码,实在尤为繁琐,降低了开发的效率。让我们来看看SpringBoot是怎样快速简洁的解决这个问题的。

第一种方式:通过注解扫描完成 Servlet 组件的注册

 第一步:创建项目,引入相关依赖

<dependencies>
    //导入web开发时,需要的jar包都在pring-boot-starter-web里
     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.0.4.RELEASE</version>
     </dependency>
</dependencies>

第二步:创建Servlet类继承HttpServlet实现doGet()或者doPost()方法,并加上@WebServlet注解

@WebServlet(name="FirstServlet",urlPatterns="/first")

public class FirstServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        

    //TODO Auto-generated method stub super.doGet(req, resp);

    }

}

第三步:启动主程序类进行测试

@SpringBootApplication
@ServletComponentScan  //在springBoot启动时会自动扫描@WebServlet,并将该类实例化
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

 

  在第二步时引入了@WebServlet(name=”FirstServlet”,urlPatterns=”/first”)

其实name就相当于传统中web.xml里配置的<servlet-name>FirstServlet</servlet-name>

urlPatterns相当于<url-pattern>/first</url-pattern>,

而@WebServlet作用于哪个类就相当于是<servlet-class>com.llp.servlet.FirstServlet</servlet-class>。

在第三步中使用了@ServletComponentScan ,它的作用主要是加载@WebServlet,并将被@WebServlet修饰的类实例化

 

这样就解决了传统web开发中servlet配置的繁琐。

 

第二种方式:通过方法完成 Servlet 组件的注册

第一步:同上引入相关依赖

第二步:同上创建Servlet类并继承HttpServlet

/**

*SpringBoot 整合 Servlet 方式二

*/

public class SecondServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws     ServletException, IOException {

        System.out.println("SecondServlet..........");

    }

}

和方式一相比,方式二不引入@WebServlet注解了,只是一个传统的Servlet类,同样主程序类中也不需要@ServletComponentScan来扫描@WebServlet注解了。

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

那么我们怎么办呢?在主程序类中添加一个方法,方法名叫什么无所谓,但是这个方法的返回值必须是ServletRegistrationBean对象,这个对象就是用于注册Servlet实例的一个对象,在这个对象的构造方法中,放相应的Servlet类即可。

@SpringBootApplication

public class App2 {

    public static void main(String[] args) { 
        SpringApplication.run(App2.class, args);
    }

    @Bean
    public ServletRegistrationBean getServletRegistrationBean(){ 
        ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());

          bean.addUrlMappings("/second");

        return bean;

    }

}

这样我们就可以进行测试了。。。。未完,待更新,每天持续充电中!

发表评论

邮箱地址不会被公开。 必填项已用*标注

昵称 *