本文将介绍 Spring Boot Servlet 映射示例。 Servlet 映射可以通过使用 ServletRegistrationBean
或在 Spring Boot 中使用 @ServletComponentScan
注解来实现。 ServletRegistrationBean
将 Servlet 注册为 Spring bean。 @ServletComponentScan
扫描带有 @WebServlet
注释的 Servlet。注解 @ServletComponentScan
仅适用于 Spring Boot 中的嵌入式服务器。在本文中,我们将创建两个 Servlet 和一个 Spring Controller 类。我们将逐步提供使用 ServletRegistrationBean
和 @ServletComponentScan
的 Servlet 的示例。
演示应用程序的项目结构如下
<?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 3.0 + 容器中注册 Servlet。我们需要在 JavaConfig 中创建一个 ServletRegistrationBean
的 bean。找到一些用于配置 Servlet 的 ServletRegistrationBean
方法。
setServlet():设置要注册的servlet。
addUrlMappings():为 Servlet 添加 URL 映射。
setLoadOnStartup:设置启动时加载 Servlet 的优先级。
假设我们有两个 Servlet,分别是 HelloCountryServlet
和 HelloStateServlet
,那么我们将使用 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<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。可以分别使用 URL /country 和 /state 访问 Servlet HelloCountryServlet
和 HelloStateServlet
。
找到我们示例中使用的 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("<h3>Hello 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("<h3>Hello 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);
}
}
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("<h3>Hello 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("<h3>Hello 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
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.concretepage.com/spring-boot/spring-boot-servlet-mapping
内容来源于网络,如有侵权,请联系作者删除!