java - Spring MVC JSTL 配置 ClassNotFoundException

标签 java spring spring-mvc tomcat

我有一个简单的 Spring MVC 应用程序示例。 gradle config中只有两个依赖——springmvc和jSTL。这些依赖项包含在 WEB-INF/lib 文件夹中的 WAR 文件中。但是在 Tomcat 上,当我尝试获取目标页面时,我得到了 ClassNotFoundException。

Tomcat 版本 - 8.5.16

项目结构:

src/main/java/net/wls/test/springmvc/HelloController.java
src/main/webapp/WEB-INF/jsp/hello.jsp
src/main/webapp/WEB-INF/servlet-context.xml
src/main/webapp/WEB-INF/web.xml
src/main/webapp/index.html
build.gradle

HelloController.java:

package net.wls.test.springmvc;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloController {

    @RequestMapping("/hello")
    public ModelAndView hello() {
        String message = "Hello World!";
        return new ModelAndView("hello", "message", message);
    }
}

你好.jsp:

<h1>${message}</h1>

servlet-context.xml:

<beans
        xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="net.wls.test"/>

    <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="3.1">

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/servlet-context.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

</web-app>

build.gradle:

group 'net.wls.test'
version '0.1.0'

def springVersion = '5.0.0.RELEASE'

apply plugin: 'war'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
    mavenLocal()
    jcenter()
}

task copyRuntimeLibs(type: Copy) {
    into 'lib'
    from configurations.runtime
}

war {
    classpath fileTree('lib')
}

dependencies {
    compile group: 'org.springframework', name: 'spring-webmvc', version: "$springVersion"
    compile group: 'javax.servlet.jsp.jstl', name: 'jstl', version: '1.2'
}

最佳答案

build.gradle 中的 JSTL 依赖项更改为如下:

compile group: 'javax.servlet', name: 'jstl', version: '1.2'

错误应该消失。

关于java - Spring MVC JSTL 配置 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47125771/

相关文章:

spring - Spring 中的自定义过滤器

java - 使用 Collection<String> fooCollection = new ArrayList<String> 为什么这是一个不好的做法

spring - 框架未使用自定义 Spring HttpMessageConverter

java - 如何从 linux 服务器 java web 应用程序访问本地路径?

java - 强制不同的 Spring Repositories 使用相同的事务

java - Heroku 上的 Spring 和 CloudAMQP 给出 "Unknown Host Exception"

java - Spring,Hibernate with mysql 图像显示不正确

java - 将 Spring @Resource 注入(inject) Servlet

Java:如何复制目录但排除主目录深处的一些目录

java - JSF 2.0 使用 Eclipse?