在DispatcherServlet中找不到具有URI [/WEB-INF/views/welcome.jsp]的HTTP请求的映射,其名称为“dispatcherServlet”

时间:2016-08-15 18:52:35

标签: java spring spring-mvc requestdispatcher

我配置了应用程序并将“DispatcherServlet”编码为viewResolver,如下所示:

@Configuration
@EnableWebMvc
@ComponentScan ({"controllers"})
@EnableAutoConfiguration
@SpringBootApplication
public class Application {

@Bean
public InternalResourceViewResolver viewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setViewClass(JstlView.class);
    viewResolver.setPrefix("/WEB-INF/views/");
    viewResolver.setSuffix(".jsp");
    return viewResolver;
}
public static void main(String[] args){
        SpringApplication.run(Application.class, args);
}
}

处理请求的控制器类看起来像这样:

@Controller
public class HelloControllerImpl {

@RequestMapping(value= "/welcome", method= RequestMethod.GET)
public String getWelcomePage(ModelMap model) {
    model.addAttribute("message", "Spring 3 MVC - Hello World");
    model.addAttribute("name", "vzateychuk");
    return "welcome";
}
}   

视图文件:\ WEB-INF \ views \ welcome.jsp

<html>
<body>
    <h1>Hello, : ${name}</h1>
    <h2>Message : ${message}</h2>
</body>
</html>

应用程序结构: Welcome application structure

我认为配置文件中缺少某些东西,但我看不到。你可以访问错误和意味着什么:“找不到带URI的HTTP请求的映射[/WEB-INF/views/welcome.jsp]”? 我应该提供像dispatcher-servlet.xml这样的xml configuratin吗? 提前谢谢。

更新:我猜我的DispatcherServlet无法找到合适的视图。我已经尝试完全删除/ WEB-INF目录,但没有任何变化。这段代码可能有问题:

    public InternalResourceViewResolver viewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setViewClass(JstlView.class);
    **viewResolver.setPrefix("/WEB-INF/views/");**

.... 任何人都可以猜出会出现什么问题? (如果anotation @EnableAutoConfiguration不允许定义viewResolver的前缀,可能会这样吗?

1 个答案:

答案 0 :(得分:5)

我做了类似你的简单项目。您可以查看我的github

你要做的是:

  1. hello.html 重命名为 hello.jsp
  2. 检查 pom.xml 中是否包含所有依赖项。我没有看到它所以我不确定它是否是错的。确保您有这两个依赖项:
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <scope>provided</scope>
    </dependency>
    
    为此,您将找到解释here
  3. 确实,您可能在使用IDEA社区版本启动它时遇到问题。我也遇到过这个问题。您可以做的是首先使用命令行和maven进行检查。执行以下命令:
    mvn spring-boot:run
    您还可以配置IDEA以运行该命令。转到运行 - >编辑配置,单击左侧的绿色加号,然后选择Maven。然后在&#34;命令行&#34;字段写&#34; spring-boot:运行&#34;,按确定。 并运行此配置。
  4. (可选)您的Application类上还有一些冗余注释。你可以删除:
    • @Configuration,因为@SpringBootApplication已经拥有它
    • @EnableWebMvc,因为Spring Boot在类路径上看到spring-webmvc时会自动添加它
    • @EnableAutoConfiguration,因为@SpringBootApplication已经拥有它
  5. 请注意,您需要@ComponentScan({&#34; controllers&#34;}),因为您的包结构 - 您的Application包与您的控制器不同。