Spring Boot Servlet 映射

在本页中,我们将看到Spring Boot Servlet映射的示例。可以通过使用ServletRegistrationBean或Spring Boot的@ServletComponentScan注解来实现Servlet映射。ServletRegistrationBean将Servlet注册为Spring Bean。@ServletComponentScan会扫描标有@WebServlet注解的Servlet。@ServletComponentScan注解仅在使用Spring Boot内置服务器时起作用。在本页中,我们将创建两个Servlet和一个Spring Controller类。使用ServletRegistrationBean和@ServletComponentScan逐步使用Servlet的示例。

前提条件

    1. Java 9

 

    1. Spring 5.0.7.RELEASE

 

    1. Spring Boot 2.0.3.RELEASE

 

    1. Maven 3.5.2

 

    1. Eclipse Oxygen

Java 9
Spring 5.0.7.RELEASE
Spring Boot 2.0.3.RELEASE
Maven 3.5.2
Eclipse Oxygen

pom.xml 可以用中文表示为:项目对象模型.xml 或 项目配置文件.xml。

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

        <modelVersion>4.0.0</modelVersion>
        <groupId>com.concretepage</groupId>
        <artifactId>spring-boot-app</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
        <name>spring-boot-app</name>
        <description>Spring Boot Application</description>

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.3.RELEASE</version>
            <relativePath/>
        </parent>
        <properties>
            <java.version>9</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies> 

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project> 

使用ServletRegistrationBean将Servlet注册为Spring Bean

ServletRegistrationBean在Servlet 3.0及更高版本的容器中用于注册Servlet。您需要在JavaConfig中创建ServletRegistrationBean的Bean。您可以找到用于配置Servlet的一些方法的ServletRegistrationBean。

setServlet():设置要注册的Servlet。
addUrlMappings():添加Servlet的URL映射。
setLoadOnStartup:设置在启动时加载Servlet的优先级。

有两个servlet,HelloCountryServlet和HelloStateServlet,在Spring Boot中使用ServletRegistrationBean来注册它们。

    package com.concretepage;
    import javax.servlet.http.HttpServlet;
    import org.springframework.boot.web.servlet.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import com.concretepage.servlets.HelloCountryServlet;
    import com.concretepage.servlets.HelloStateServlet;

    @Configuration
    public class WebConfig {
       @Bean    
       public ServletRegistrationBean<HttpServlet> countryServlet() {
           ServletRegistrationBean<HttpServlet> servRegBean = new ServletRegistrationBean<>();
           servRegBean.setServlet(new HelloCountryServlet());
           servRegBean.addUrlMappings("/country/*");
           servRegBean.setLoadOnStartup(1);
           return servRegBean;
       }
       @Bean    
       public ServletRegistrationBean<HttpServlet> stateServlet() {
           ServletRegistrationBean<HttpServlet> servRegBean = new ServletRegistrationBean<>();
           servRegBean.setServlet(new HelloStateServlet());
           servRegBean.addUrlMappings("/state/*");
           servRegBean.setLoadOnStartup(1);
           return servRegBean;
       }   
    } 

为每个Servlet创建一个ServletRegistrationBean Bean。HelloCountryServlet和HelloStateServlet分别可以通过URL /country和/state进行访问。寻找在此示例中使用的Servlet。

    package com.concretepage.servlets;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class HelloCountryServlet extends HttpServlet   {
        private static final long serialVersionUID = 1L;
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
            doGet(request,response);
        }
            public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
                response.setContentType("text/html");
                PrintWriter out = response.getWriter();
            out.println("<h3>Hello India!</h3>");   
        }
    } 
    package com.concretepage.servlets;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class HelloStateServlet extends HttpServlet   {
        private static final long serialVersionUID = 1L;
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
           doGet(request,response);
        }
            public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
               response.setContentType("text/html");
               PrintWriter out = response.getWriter();
           out.println("<h3>Hello Uttar Pradesh!</h3>");    
        }
    } 

在这个例子中使用的控制器。

    package com.concretepage.controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;

    @RestController
    public class HelloWorldController {     

        @RequestMapping("/world")
        public String helloMsg() {
            String msg = "Hello World!";
            return msg;
        }
    } 

这是用于启动应用程序的主类。

    package com.concretepage;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;

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

使用@ServletComponentScan的Servlet示例

Spring Boot的@ServletComponentScan会扫描标有@WebServlet注解的servlet,标有@WebFilter注解的过滤器,以及标有@WebListener注解的监听器。@ServletComponentScan注解可在JavaConfig类级别使用。@ServletComponentScan只会扫描使用嵌入式Web服务器的servlet、过滤器和监听器。@WebServlet注解标记了一个servlet。

    package com.concretepage.servlets;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    @WebServlet(urlPatterns = "/country/*", loadOnStartup = 1)
    public class HelloCountryServlet extends HttpServlet   {
        private static final long serialVersionUID = 1L;
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
             doGet(request,response);
        }
            public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
                 response.setContentType("text/html");
                 PrintWriter out = response.getWriter();
             out.println("<h3>Hello India!</h3>");  
        }
    } 
    package com.concretepage.servlets;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    @WebServlet(urlPatterns = "/state/*", loadOnStartup = 1)
    public class HelloStateServlet extends HttpServlet   {
        private static final long serialVersionUID = 1L;
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
            doGet(request,response);
        }
            public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
                response.setContentType("text/html");
                PrintWriter out = response.getWriter();
            out.println("<h3>Hello Uttar Pradesh!</h3>");   
        }
    } 

可以使用@ServletComponentScan按照以下方式。

    package com.concretepage;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.ServletComponentScan;

    @ServletComponentScan
    @SpringBootApplication
    public class SpringBootAppStarter {
        public static void main(String[] args) {
            SpringApplication.run(SpringBootAppStarter.class, args);
        }
    } 

测试应用程序

可以使用以下方法来运行Spring Boot应用程序。

Maven Commandを使用する:プロジェクトのソースコードをダウンロードしてください。 コマンドプロンプトを使用してプロジェクトのルートフォルダに移動し、コマンドを実行します。

    mvn spring-boot:run

Eclipseを使う:記事の最後にあるダウンロードリンクを使ってプロジェクトのソースコードをダウンロードしてください。 プロジェクトをEclipseにインポートしてください。 コマンドプロンプトを使用して、プロジェクトのルートフォルダに移動して実行します。

    mvn clean eclipse:eclipse

点击后,使用eclipse更新项目。
点击运行为 -> Java应用程序,然后执行主类SpringBootAppStarter。接下来,Tomcat服务器将启动。

実行可能JARの使用:コマンドプロンプトを使用して、プロジェクトのルートフォルダに移動してコマンドを実行します。

    mvn clean package

获取可执行的JAR文件spring-boot-app-0.0.1-SNAPSHOT.jar到目标文件夹。执行以下命令来运行该JAR文件。

    java -jar target / spring-boot-app-0.0.1-SNAPSHOT.jar

Tomcat服务器将会启动。

现在可以准备好测试该应用程序了。

这是执行HelloCountryServlet的URL。

http://localhost:8080/country

这是执行HelloStateServlet的URL。

http://localhost:8080/state

这是执行HelloWorldController方法的URL。

http://localhost:8080/world

请提供您需要改写的原始文本。

Spring Boot参考指南
ServletRegistrationBean
@ServletComponentScan

翻译来源网站

春季启动器的Servlet映射

广告
将在 10 秒后关闭
bannerAds