Spring Boot Servlet Mapping介绍

x33g5p2x  于2022-09-23 转载在 Spring  
字(8.5k)|赞(0)|评价(0)|浏览(247)

本文将介绍 Spring Boot Servlet 映射示例。 Servlet 映射可以通过使用 ServletRegistrationBean 或在 Spring Boot 中使用 @ServletComponentScan 注解来实现。 ServletRegistrationBean 将 Servlet 注册为 Spring bean。 @ServletComponentScan 扫描带有 @WebServlet 注释的 Servlet。注解 @ServletComponentScan 仅适用于 Spring Boot 中的嵌入式服务器。在本文中,我们将创建两个 Servlet 和一个 Spring Controller 类。我们将逐步提供使用 ServletRegistrationBean@ServletComponentScan 的 Servlet 的示例。

项目结构

演示应用程序的项目结构如下

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
&ltproject 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">
	
	&ltmodelVersion&gt4.0.0</modelVersion>
	&ltgroupId&gtcom.concretepage</groupId>
	&ltartifactId&gtspring-boot-app</artifactId>
	&ltversion&gt0.0.1-SNAPSHOT</version>
	&ltpackaging&gtjar</packaging>
	&ltname&gtspring-boot-app</name>
	&ltdescription&gtSpring Boot Application</description>

	&ltparent>
	   &ltgroupId&gtorg.springframework.boot</groupId>
	   &ltartifactId&gtspring-boot-starter-parent</artifactId>
	   &ltversion&gt2.0.3.RELEASE</version>
	   &ltrelativePath/>
	</parent>
	&ltproperties>
	   &ltjava.version&gt9</java.version>
	</properties>
	&ltdependencies>
	   &ltdependency>
	      &ltgroupId&gtorg.springframework.boot</groupId>
	      &ltartifactId&gtspring-boot-starter-web</artifactId>
	   </dependency>	
           &ltdependency>
              &ltgroupId&gtorg.springframework.boot</groupId>
              &ltartifactId&gtspring-boot-devtools</artifactId>
              &ltoptional&gttrue</optional>
           </dependency>
	</dependencies> 
	&ltbuild>
		&ltplugins>
			&ltplugin>
				&ltgroupId&gtorg.springframework.boot</groupId>
				&ltartifactId&gtspring-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,分别是 HelloCountryServletHelloStateServlet,那么我们将使用 ServletRegistrationBean 将它们注册到 Spring Boot,如下所示。
WebConfig.java

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&ltHttpServlet> countryServlet() {
	   ServletRegistrationBean&ltHttpServlet> servRegBean = new ServletRegistrationBean<>();
	   servRegBean.setServlet(new HelloCountryServlet());
	   servRegBean.addUrlMappings("/country/*");
	   servRegBean.setLoadOnStartup(1);
	   return servRegBean;
   }
   @Bean	
   public ServletRegistrationBean&ltHttpServlet> stateServlet() {
	   ServletRegistrationBean&ltHttpServlet> servRegBean = new ServletRegistrationBean<>();
	   servRegBean.setServlet(new HelloStateServlet());
	   servRegBean.addUrlMappings("/state/*");
	   servRegBean.setLoadOnStartup(1);
	   return servRegBean;
   }   
}

我们为每个 Servlet 创建一个 ServletRegistrationBean bean。可以分别使用 URL /country/state 访问 Servlet HelloCountryServletHelloStateServlet
找到我们示例中使用的 Servlet。
HelloCountryServlet.java

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("&lth3&gtHello India!</h3>");	
	}
}

HelloStateServlet.java

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("&lth3&gtHello Uttar Pradesh!</h3>");	
	}
}

找到我们示例中使用的控制器。
HelloWorldController.java

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;
    }
}

找到 Main 类以启动应用程序。
SpringBootAppStarter.java

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。
HelloCountryServlet.java

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("&lth3&gtHello India!</h3>");	
	}
}

HelloStateServlet.java

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("&lth3&gtHello Uttar Pradesh!</h3>");	
	}
}

我们可以使用 @ServletComponentScan 如下。
SpringBootAppStarter.java

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 应用程序。
1。使用 Maven 命令:下载项目源代码。使用命令提示符转到项目的根文件夹并运行命令。

mvn spring-boot:run

Tomcat 服务器将被启动。

2。使用 Eclipse:使用文章末尾给出的下载链接下载项目源代码。将项目导入eclipse。使用命令提示符,转到项目的根文件夹并运行。

mvn clean eclipse:eclipse

然后在eclipse中刷新项目。通过单击 Run as -> Java Application 运行主类 SpringBootAppStarter。 Tomcat 服务器将被启动。

3 使用 Executable 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

相关文章

微信公众号

最新文章

更多