Я пробовал какое-то время, и я действительно не могу обернуть голову вокруг запуска проекта SpringMVC (проект на основе аннотаций MVC) со встроенным причалом при управлении зависимостями с помощью градиента.Настройка JSP с SpringMVC + Embedded Jetty + Gradle
Мне удалось отобразить страницу 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>
@Edit: AppInitializer для установки Jetty и SpringMVC:
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 в качестве войны с tomcat зависимость servlet-api была иной, чем «компиляция» (что-то вроде targetCompile или аналогичного), но теперь это встроенный причал, поэтому я считаю, что на этот раз компиляция в порядке.
Проблема, вероятно, в том, что Embedded Jetty не работает с JSP. См. Http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-jsp-limitations – geoand
Боже, серьезно? И я потратил столько времени; p – Tomek
Рад это слышать! – geoand