首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Servlet.service: Servlet.service() for servlet [jsp]抛出异常

Servlet.service: Servlet.service() for servlet [jsp]抛出异常
EN

Stack Overflow用户
提问于 2020-01-20 04:09:57
回答 1查看 298关注 0票数 0

我使用Spring微服务,并收到以下错误:

代码语言:javascript
复制
2020-01-20 09:58:22.504 ERROR 13758 --- [nio-8080-exec-1] o.a.c.c.C.[.[localhost].[/].[jsp]        : Servlet.service() for servlet [jsp] threw exception

java.lang.ClassNotFoundException: org.apache.tomcat.util.security.Escape
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[na:1.8.0_211]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_211]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) ~[na:1.8.0_211]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_211]
    at org.apache.jasper.compiler.JspUtil.getExprInXml(JspUtil.java:85) ~[tomcat-embed-jasper-9.0.29.jar:9.0.29]
    at org.apache.jasper.compiler.PageDataImpl$SecondPassVisitor.printAttributes(PageDataImpl.java:736) ~[tomcat-embed-jasper-9.0.29.jar:9.0.29]

在浏览器中,它提供了错误,

代码语言:javascript
复制
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Mon Jan 20 09:58:22 BDT 2020
There was an unexpected error (type=Internal Server Error, status=500).
org/apache/tomcat/util/security/Escape

我从各自的微服务中提供了一些代码片段,

代码语言:javascript
复制
@SpringBootApplication
@EnableCircuitBreaker
@EnableDiscoveryClient
@EnableFeignClients

public class Application {

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

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }
}

控制器类,

代码语言:javascript
复制
@Controller
@Transactional
@RequestMapping("/website/vehicles")
public class VehicleController {


    @Autowired
    private VehicleRepository data;

    @Autowired
    private PositionTrackingExternalService externalService;

    @PostMapping(value = "/newVehicle.html")
    public String newVehicle(Vehicle vehicle) {

        data.save(vehicle);
        return "redirect:/website/vehicles/list.html";
    }

    @PostMapping(value = "/deleteVehicle.html")
    public String deleteVehicle(@RequestParam Long id) {

        data.delete(id);
        return "redirect:/website/vehicles/list.html";
    }

    @GetMapping(value = "/newVehicle.html")
    public ModelAndView renderNewVehicleForm() {

        Vehicle newVehicle = new Vehicle();
        return new ModelAndView("newVehicle", "form", newVehicle);
    }

    @GetMapping(value = "/list.html")
    public ModelAndView vehicles() {

        List<Vehicle> allVehicles = data.findAll();
        return new ModelAndView("allVehicles", "vehicles", allVehicles);
    }


    ......  .....   ......  .....  ......  .....
    ......  .....   ......  .....  ......  .....

}

假装的客户,

代码语言:javascript
复制
@FeignClient(name = "fleetman-position-tracker")
public interface RemotePositionMicroserviceCalls {

    @GetMapping(value = "/vehicles/{name}")
    public Position getLatestPositionForVehicle(@PathVariable(value = "name") String name);
}

服务班,

代码语言:javascript
复制
@Service
public class PositionTrackingExternalService {


    @Autowired
    private ObjectProvider<RemotePositionMicroserviceCalls> remoteService;

    @Autowired
    private VehicleRepository repository;

    @HystrixCommand(fallbackMethod = "handleExternalServiceDown")
    public Position getLatestPositionForVehicleFromRemoteMicroservice(String name) {

        Position response = remoteService.getObject().getLatestPositionForVehicle(name);

        response.setUpToDate(true);
        return response;
    }

    public Position handleExternalServiceDown(String name) {

        // Read the last known position for this vehicle
        Position position = new Position();
        Vehicle vehicle = repository.findByName(name);

        position.setLat(vehicle.getLat());
        position.setLongitude(vehicle.getLongitude());
        position.setTimestamp(vehicle.getLastRecordedPosition());
        position.setUpToDate(false);

        return position;
    }

}

项目结构,

根据请求,pom.xml文件如下所示,

代码语言:javascript
复制
<?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.transport.visualizer</groupId>
    <artifactId>transport-visualizer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>TransportVisualizer</name>
    <description>Vehicle Transport Visualizer</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</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-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>

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

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

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>    

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>       

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
        </dependency>           

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>   

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency> 
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Camden.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>

        <resources>
            <resource>
                <filtering>true</filtering>
                <directory>src/main/resources</directory>
                <includes>
                    <include>application.properties</include>
                </includes>
            </resource>     
        </resources>

    </build>        
</project>

这里有什么问题,我该如何解决?

EN

回答 1

Stack Overflow用户

发布于 2020-01-20 04:44:21

应将依赖项配置为作用域,条件是:

代码语言:javascript
复制
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59816894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档