2

我有以下项目结构

-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 示例似乎也以与以下 build.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;
}

这似乎也不起作用。

4

5 回答 5

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'
于 2014-07-01T01:53:36.557 回答
1

我遇到了同样的问题并通过将这块添加到 pom.xml 中解决了:

    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>

我不明白为什么...

于 2015-01-18T10:03:01.577 回答
1

添加以下依赖项时,您可能没有任何错误。它对我有用。

据我所知,如果您不添加一些依赖项,则不会使用嵌入式 tomcat 呈现 jsp 页面。

<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>
于 2016-12-14T06:02:16.857 回答
0

为相同创建了一个模板并在 Github https://github.com/nagasrnu88/spring-boot-template上共享

<dependency>
   <groupId>org.apache.tomcat.embed</groupId>
   <artifactId>tomcat-embed-jasper</artifactId>            
</dependency>

得到了同样的问题并通过使用 spring boot 1.4.0.RELEASE 添加上述行来解决

于 2016-08-18T08:01:52.727 回答
-3

您的 spring 配置中是否定义了 InternalViewResolver?

<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>
于 2014-06-30T20:54:28.920 回答