Auf dieser Seite sehen wir uns ein Beispiel für eine Spring Boot Servlet-Zuordnung an. Die Servlet-Zuordnung kann mithilfe der ServletRegistrationBean oder mithilfe der Annotation Spring Boot @ServletComponentScan erreicht werden. Die ServletRegistrationBean registriert das Servlet als Spring Bean. @ServletComponentScan scannt das mit @WebServlet kommentierte Servlet. Die Anmerkung @ServletComponentScan funktioniert nur mit dem integrierten Server von Spring Boot. Auf dieser Seite erstellen wir zwei Servlets und eine Spring Controller-Klasse. Hier ist ein Beispiel für die schrittweise Verwendung von Servlets mit ServletRegistrationBean und @ServletComponentScan.
pom.xml
pom.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>
Die ServletRegistrationBean wird verwendet, um das Servlet bei einem Servlet 3.0- oder höher-Container zu registrieren. Sie müssen eine Bean für die ServletRegistrationBean in JavaConfig erstellen. Hier finden Sie einige Methoden der ServletRegistrationBean, mit denen das Servlet konfiguriert wird.
** setServlet () **: Legt das zu registrierende Servlet fest. ** addUrlMappings () **: URL-Zuordnungen für das Servlet hinzufügen. ** setLoadOnStartup **: Legt die Priorität für das Laden des Servlets beim Start fest.
Es gibt zwei Servlets, HelloCountryServlet und HelloStateServlet, die wie folgt bei Spring Boot mithilfe der ServletRegistrationBean registriert werden:
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;
}
}
Erstellen Sie für jedes Servlet eine ServletRegistrationBean-Bean. Auf die Servlets HelloCountryServlet und HelloStateServlet kann über die URLs ** / country ** bzw. ** / state ** zugegriffen werden. Suchen Sie das in diesem Beispiel verwendete 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>");
}
}
Der in diesem Beispiel verwendete Controller.
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;
}
}
Hauptklasse zum Starten von Anwendungen.
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 von Spring Boot scannt mit @ WebServlet kommentierte Servlets, mit @ WebFilter kommentierte Filter und mit @ WebListener kommentierte Listener. Die Annotation @ServletComponentScan wird auf JavaConfig-Klassenebene verwendet. @ServletComponentScan scannt Servlets, Filter und Listener nur über den eingebetteten Webserver. Dies ist ein mit @WebServlet kommentiertes 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>");
}
}
Sie können @ServletComponentScan wie folgt verwenden:
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);
}
}
Sie können die Spring Boot-Anwendung auf folgende Arten ausführen:
mvn spring-boot:run
mvn clean eclipse:eclipse
Klicken Sie auf und aktualisieren Sie das Projekt in Eclipse. Klicken Sie auf Ausführen als-> Java-Anwendung, um die Hauptklasse SpringBootAppStarter auszuführen. Dann wird der Tomcat-Server gestartet.
mvn clean package
Holen Sie sich die ausführbare JAR ** spring-boot-app-0.0.1-SNAPSHOT.jar ** in den Zielordner. Führen Sie diese JAR wie folgt aus.
java -jar target / spring-boot-app-0.0.1-SNAPSHOT.jar
Der Tomcat-Server wird gestartet.
Jetzt können Sie Ihre Anwendung testen.
Die URL zum Ausführen von HelloCountryServlet.
http://localhost:8080/country
URL zum Ausführen von HelloStateServlet.
http://localhost:8080/state
Die URL zum Ausführen der HelloWorldController-Methode.
http://localhost:8080/world
Spring Boot Reference Guide ServletRegistrationBean @ServletComponentScan
Recommended Posts