使用 SpringMVC + 嵌入式 Jetty + Gradle 设置 JSP

Setup JSP with SpringMVC + Embedded Jetty + Gradle

我已经尝试了一段时间,但在使用 gradle 管理依赖项时,我真的无法理解 运行 具有嵌入式码头的 SpringMVC(基于注释的 MVC 配置)项目。

我成功显示了 jsp 页面,但是 jsp 标签没有被解析?执行? 我的设置如下所示: build.gradle:

apply plugin: 'java'
apply plugin: 'eclipse'

repositories {
    mavenCentral()
}
sourceSets.main.resources.srcDirs = ['src/main/resources', 'webapp']
sourceSets.main.java.srcDirs = ['src/main/java']

dependencies {
    compile 'javax.servlet.jsp:jsp-api:2.2'
    compile 'javax.servlet:javax.servlet-api:3.1.0'
    compile 'javax.servlet.jsp.jstl:jstl-api:1.2'
    compile 'org.springframework:spring-webmvc:4.1.6.RELEASE'
    compile 'org.apache.logging.log4j:log4j-core:2.2'
    compile 'org.eclipse.jetty:jetty-webapp:9.2.10.v20150310'
}

我的视图解析器配置如下:

@Bean
public InternalResourceViewResolver jspViewResolver() {
    InternalResourceViewResolver bean = new InternalResourceViewResolver();
    bean.setPrefix("/pages/");
    bean.setSuffix(".jsp");
    return bean;
}

我正在尝试显示此 jsp 页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<c:set var="test" scope="session" value="test"/>
<c:out value="${test}"/>
</body>
</html>

@编辑: 用于设置 Jetty 和 SpringMVC 的 AppInitializer:

public class AppInitializer {
    private static final int DEFAULT_PORT = 8080;
    private static final String CONTEXT_PATH = "/";
    private static final String CONFIG_LOCATION = "pl.com.imralav.springmvc.config";
    private static final String MAPPING_URL = "/*";
    private static final String DEFAULT_PROFILE = "dev";

    public static void main(String[] args) throws Exception {
        new AppInitializer().startJetty(getPortFromArgs(args));
    }

    private static int getPortFromArgs(String[] args) {
        if (args.length > 0) {
            try {
                return Integer.valueOf(args[0]);
            } catch (NumberFormatException ignore) {
            }
        }
        return DEFAULT_PORT;
    }

    private void startJetty(int port) throws Exception {
        Server server = new Server(port);
        server.setHandler(getServletContextHandler(getContext()));
        server.start();
        server.join();
    }

    private static ServletContextHandler     getServletContextHandler(WebApplicationContext context) throws     IOException {
        ServletContextHandler contextHandler = new ServletContextHandler();
        contextHandler.setErrorHandler(null);
        contextHandler.setContextPath(CONTEXT_PATH);
        contextHandler.addServlet(new ServletHolder(new     DispatcherServlet(context)), MAPPING_URL);
        contextHandler.addEventListener(new     ContextLoaderListener(context));
        contextHandler.setResourceBase(new ClassPathResource("WEB-INF").getURI().toString());
        return contextHandler;
    }

    private static WebApplicationContext getContext() {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.setConfigLocation(CONFIG_LOCATION);
        context.getEnvironment().setDefaultProfiles(DEFAULT_PROFILE);
        return context;
    }
}

不确定我可能遗漏了什么?当将 SpringMVC 作为 war 部署到 tomcat 时,servlet-api 依赖项不是 'compile' (类似于 targetCompile 或类似的东西),但它现在是嵌入式码头,所以我相信编译这次可以了

真是个愚蠢的问题。 Jetty 不支持 jsp。 Jetty 不支持 JSP 的 OOTB。一旦我插入 Thymeleaf,一切都完美无缺。感谢@geoand 和@Joakim