2015-03-28 5 views
0

Я пробовал какое-то время, и я действительно не могу обернуть голову вокруг запуска проекта 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 или аналогичного), но теперь это встроенный причал, поэтому я считаю, что на этот раз компиляция в порядке.

+0

Проблема, вероятно, в том, что Embedded Jetty не работает с JSP. См. Http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-jsp-limitations – geoand

+0

Боже, серьезно? И я потратил столько времени; p – Tomek

+0

Рад это слышать! – geoand

ответ

1

Такая глупая проблема. Jetty просто не поддерживает jsp. Jetty не поддерживает OOTB для JSP. Как только я подключился к Тимелеафу, все отлично работало. Большое спасибо @geoand и @Joakim

+1

Это неправильное предположение. Встроенный Jetty поддерживает JSP. Это всегда было. Там никогда не было времени, когда Embedded Jetty не поддерживал JSP. Это связано с тем, что настройка для JSP идентична в распределении, как во встроенном Jetty. Поскольку сам дистрибутив использует Embedded Jetty для запуска. –

Смежные вопросы