2017-06-03 2 views
1

Derzeit entwickle ich eine Webanwendung mit Spring MVC und Spring Boot.Apache Tomcat-javax.servlet.ServletException: Meine Klasse ist kein Servlet

Ich habe versucht, eine Spring-Boot-Anwendung als Krieg zu verpacken. Ich änderte meine Anwendungsklasse:

@SpringBootApplication 
@ComponentScan 
@EnableAutoConfiguration 
public class AuditConfigurationApplication extends SpringBootServletInitializer { 

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(AuditConfigurationApplication.class); 
    } 

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

-Der pom.xml-Datei:

<dependencies> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 


    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
     <scope>provided</scope> 
    </dependency> 

     <!-- spring data --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 

     <!-- pdfbox --> 
     <dependency> 
      <groupId>org.apache.pdfbox</groupId> 
      <artifactId>pdfbox</artifactId> 
      <version>2.0.1</version> 
      </dependency> 

    <!-- itextpdf --> 
     <dependency> 
      <groupId>com.itextpdf</groupId> 
      <artifactId>itextpdf</artifactId> 
      <version>5.0.6</version> 
     </dependency> 

    <dependency> 
    <groupId>javax.ws.rs</groupId> 
    <artifactId>javax.ws.rs-api</artifactId> 
    <version>2.0</version> 
    </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 

    <!-- mysql-connector --> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <scope>runtime</scope> 
     </dependency> 

    <dependency> 
    <groupId>org.apache.tomcat.embed</groupId> 
    <artifactId>tomcat-embed-jasper</artifactId> 
    <version>8.5.11</version> 
</dependency> 

     <!-- Spring security --> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-config</artifactId> 
      <version>4.0.3.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-config</artifactId> 
      <version>4.0.3.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-web</artifactId> 
      <version>4.0.3.RELEASE</version> 
     </dependency> 

     <!-- ecj for exception "No Java compiler available" --> 
     <dependency> 
      <groupId>org.eclipse.jdt.core.compiler</groupId> 
      <artifactId>ecj</artifactId> 
      <version>4.6.1</version> 
      <scope>provided</scope> 
     </dependency> 

     <!-- for uri: --> 
    <dependency> 
     <groupId>jstl</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>javax.servlet.jsp.jstl</groupId> 
     <artifactId>jstl-api</artifactId> 
     <version>1.2</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
    <groupId>javax.servlet.jsp</groupId> 
    <artifactId>jsp-api</artifactId> 
    <version>2.2</version> 
    <scope>provided</scope> 
    </dependency> 

     <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
    </dependency>  
    <!-- For JSON Object --> 
<dependency> 
    <groupId>com.googlecode.json-simple</groupId> 
    <artifactId>json-simple</artifactId> 
    <version>1.1</version> 
</dependency> 

</dependencies> 

-My Controller Rest:

package com.SSC.Services.REST; 

@CrossOrigin 
@RestController 
@RequestMapping("/Employees") 
public class UtilisateursRestController { 

@RequestMapping(value="/ALL", method=RequestMethod.GET) 
    public List<Users> AllUsers(){ 
    return UM.listeT(); 
    } 

} 
  • web.xml version="3.1":
<!-- ====================================================== --> 
    <!-- 2. Define servlet with private context    --> 
    <!-- ===================================================== --> 
    <servlet> 
    <servlet-name>audit</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <!-- ===================================================== --> 
    <!-- One servlet, the audit, to rule it all   --> 
    <!-- ===================================================== --> 
    <servlet-mapping> 
    <servlet-name>audit</servlet-name> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 

<servlet> 
     <servlet-name>Users</servlet-name> 
     <servlet-class>com.SSC.Services.REST.UtilisateursRestController</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Users</servlet-name> 
     <url-pattern>/Employees/*</url-pattern> //URL of controller REST 
    </servlet-mapping> 

<error-page> 
<error-code>404</error-code> 
<location>/404</location> 
</error-page> 

-Audit-servlet.xml:

<beans> 
<!-- register controller in servlet private context --> 
    <context:component-scan base-package="com.SSC.Services.REST"/> 

</beans> 

-I mein Projekt exportieren "Apps" als Krieg Datei in "C: \ Apache-tomcat-8.5.15 \ webapps \". Tomcat erstellt Ordner "Apps", die alles enthält:

Apps 
    --META-INF 
    -maven 
    -MANIFEST.MF 
    -war-tracker 
    --WEB-INF 
     -classes 
      -com 
      -static 
      -application.properties 
     - lib-provided 
     -lib 
     - web.xml + audit-servlet.xml 
    --org 
    -- My JSP pages .. 

Wenn ich eine API REST zugreifen: http://95.x.x.x/Apps(Name of floder)/Employees/ALL, ich habe diese Fehlermeldung:

javax.servlet.ServletException: Klasse [com.SSC .Services.REST.UtilisateursRestController] ist kein Servlet Apache Tomcat/8.5.15

Wie dieses Problem zu beheben?

Danke,

+0

UtilisateursRestController ist kein Servlet. Sie versuchen, einen Controller einem Servlet zuzuordnen, es löst eine Ausnahme aus. – VNT

+0

Danke für die Erklärung, Aber wie dieses Problem zu lösen @VNT? Wie kann ich den Zugriff auf meine REST-API sicherstellen? – Michael1

+0

Entfernen Sie die Datei 'web.xml' und lesen Sie die Dokumentation zum Thema" Wie kann ich einen bereitstellbaren Krieg erstellen? "(Https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto) -create-a-deployable-war-file) des Referenzhandbuchs (Ihre Abhängigkeiten sind in dieser Hinsicht ein bisschen chaotisch). –

Antwort

0

Ihre web.xml der Hauptschuldige hier ist und als zweiter Anwärter Ihre Abhängigkeiten. Siehe auch das Spring Boot-Referenzhandbuch, das einen schönen Abschnitt zu creating a deployable war enthält. Vielleicht möchten Sie auch einen Blick auf die war sample auf GitHub werfen.

Zuerst entfernen Sie Ihre web.xml Sie brauchen es nicht. Ihr AuditConfigurationApplication ist auch SpringBootServletInitializer, die dafür sorgt, dass die Anwendung in einem Servlet-Container bootstrappt (anstatt ausführbar zu sein).

Als nächstes sind Ihre Abhängigkeiten auch ein bisschen flockig. Sie sollten die spring-boot-starter-security verwenden, anstatt die Spring Security-Abhängigkeiten manuell zu definieren. Und Sie sollten eine andere Abhängigkeit für die eingebettete Bibliothek verwenden.

<!-- Spring security --> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-security</artifactId> 
</dependency> 

sollten Sie machen die bereitgestellt folgenden

<!-- Provided (for embedded war support) --> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>org.apache.tomcat.embed</groupId> 
    <artifactId>tomcat-embed-jasper</artifactId> 
    <scope>provided</scope> 
</dependency> 

durch Ihre Abhängigkeiten zu urteilen Sie auch JSP mit (obwohl ich so etwas wie Thymeleaf heutzutage verwenden würde empfehlen) Sie könnten den JSP Limitations Abschnitt lesen wollen in das Referenzhandbuch und werfen Sie einen Blick auf die benötigten Abhängigkeiten in der JSP sample auf GitHub.

Sie benötigen nicht die servlet-api Abhängigkeit, die bereits in der spring-boot-starter-web enthalten ist.

+0

Danke sehr nett von dir @M. Deinum, es funktioniert – Michael1

Verwandte Themen