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的示例。
前提条件
-
- Java 9
-
- Spring 5.0.7.RELEASE
-
- Spring Boot 2.0.3.RELEASE
-
- Maven 3.5.2
-
- 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映射