gpt4 book ai didi

jsp - Apache Tomcat-javax.servlet.ServletException : My Class is not a Servlet

转载 作者:行者123 更新时间:2023-11-28 22:26:00 25 4
gpt4 key购买 nike

目前我正在使用 Spring MVC 和 Spring Boot 开发 Web 应用程序。

我试图将一个 spring boot 应用程序打包为一个 war。我修改了我的应用程序类:

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

-pom.xml 文件:

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

-我的 Controller 休息:

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>

-我将我的项目“Apps”作为 war 文件导出到“C:\apache-tomcat-8.5.15\webapps\”。 Tomcat 创建文件夹“Apps”,其中包含所有内容:

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 ..

当我访问 API REST:http://95.x.x.x/Apps(Name of floder)/Employees/ALL 时,出现以下错误消息:

javax.servlet.ServletException: Class [com.SSC.Services.REST.UtilisateursRestController] is not a Servlet Apache Tomcat / 8.5.15

如何解决这个问题?

谢谢,

最佳答案

您的 web.xml 是这里的主要罪魁祸首,作为第二个竞争者您的依赖项。另请参阅 Spring Boot 引用指南,其中有一个很好的部分关于 creating a deployable war .你可能想看看 war sample在 GitHub 上也是如此。

首先删除您不需要的web.xml。您的 AuditConfigurationApplication 也是 SpringBootServletInitializer,它负责在 servlet 容器中引导应用程序(而不是可执行)。

接下来你的依赖关系也有点不稳定。您应该使用 spring-boot-starter-security 而不是手动定义 Spring Security 依赖项。并且您应该为嵌入式库使用另一个依赖项。

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

您应该提供以下内容

<!-- 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>

根据您的依赖关系判断您也在使用 JSP(尽管我现在建议使用像 Thymeleaf 这样的东西)您可能想阅读 JSP Limitations引用指南中的部分并查看 JSP sample 中所需的依赖项在 GitHub 上。

您不需要 spring-boot-starter-web 中已经包含的 servlet-api 依赖项。

关于jsp - Apache Tomcat-javax.servlet.ServletException : My Class is not a Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44343695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com