#spring-mvc #spring-4
#spring-mvc #весна-4
Вопрос:
У меня есть следующая структура проекта
-src
-main
-java
-com
-test
Application.java
-controllers
MyController.java
-webapp
-WEB-INF
-jsp
main.jsp
Я хочу сделать что-то похожее на это, но у меня есть следующее в моем контроллере
@Controller
@RequestMapping("/my/**")
public class MyController {
@RequestMapping("/home")
public String loadHomePage(Model m) {
m.addAttribute("name", "CodeTutr");
System.out.println("Test the view controller");
return "main";
}
}
и когда я перехожу к http://localhost:8080/my/home
, я получаю сообщение журнала и 404. Я думал, что в spring 4 мне не нужен преобразователь просмотра, но если я это сделаю, как мне его настроить.
Обновить
Я создал application.properties со следующим…
spring.view.prefix: /WEB-INF/jsp/
spring.view.suffix: .jsp
application.message: Hello Phil
Но он все еще не работает.
Обновление 2
Предоставленный образец Spring также, похоже, завершается с ошибкой таким же образом со следующей сборкой.gradle….
buildscript {
repositories {
mavenLocal()
mavenCentral()
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.4.BUILD-SNAPSHOT")
}
}
apply plugin: 'war'
apply plugin: 'spring-boot'
apply plugin: 'groovy'
war { baseName='itext' }
repositories {
mavenLocal()
mavenCentral()
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
maven { url "http://repo.spring.io/libs-release" }
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-websocket")
compile("org.springframework:spring-messaging")
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
testCompile("org.springframework.boot:spring-boot-starter-test")
compile 'org.codehaus.groovy:groovy-all:2.2.0'
compile 'com.lowagie:itext:4.2.1'
compile 'com.google.code.gson:gson:2.2.4'
}
Обновить
Я также пытался быть явным…
@Bean
public ViewResolver getViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
Похоже, это тоже не работает.
Ответ №1:
Добавление этого в build.gradle, похоже, устраняет проблему…
compile 'com.google.code.gson:gson:2.2.4'
compile 'javax.servlet.jsp.jstl:jstl:1.2',
'taglibs:standard:1.1.2'
providedRuntime 'org.apache.tomcat.embed:tomcat-embed-jasper:8.0.8'
Ответ №2:
Я столкнулся с той же проблемой и решил, добавив эту часть в pom.xml:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
Я не понимаю, почему…
Ответ №3:
При добавлении следующих зависимостей у вас может не возникнуть никакой ошибки. У меня это сработало.
Насколько я понял, страница jsp не отображается с помощью встроенного tomcat, если вы не добавите некоторые зависимости.
<dependencies>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
</dependency>
<dependency>
<groupid>org.apache.tomcat.embed</groupid>
<artifactid>tomcat-embed-jasper</artifactid>
<scope>provided</scope>
</dependency>
<dependency>
<groupid>javax.servlet</groupid>
<artifactid>jstl</artifactid>
</dependency>
</dependencies>
Ответ №4:
Создал шаблон для того же и поделился им на Github https://github.com/nagasrinu88/spring-boot-template
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
Возникла та же проблема и решена путем добавления вышеуказанных строк с использованием spring boot 1.4.0.RELEASE
Ответ №5:
Есть ли у вас InternalViewResolver, определенный в вашей конфигурации Spring?
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
Комментарии:
1. Это не требуется в spring 4, см. Обновленный пост со ссылкой. Также не используется XML в соответствии с исходным вопросом.
2. Не в Spring 4 без загрузки см. Ссылку и приведенный пример
3. На самом деле, должно быть, что-то не так в моем build.gradle, поэтому я добавлю это. Тем не менее XML — довольно старый и устаревший способ отображения компонентов в spring. Обновленная версия с аннотациями против XML отменит мой голос.