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

vza*_*huk 1 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);
}
}
Run Code Online (Sandbox Code Playgroud)

处理请求的Controller类看起来像这样:

@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";
}
}   
Run Code Online (Sandbox Code Playgroud)

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

<html>
<body>
    <h1>Hello, : ${name}</h1>
    <h2>Message : ${message}</h2>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

应用程序结构: 欢迎应用程序结构

我认为配置文件中缺少某些东西,但我看不到.你可以访问错误和意味着什么:"找不到带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/");**
Run Code Online (Sandbox Code Playgroud)

....谁能猜出什么可能是错的?(如果anotation @EnableAutoConfiguration不允许定义viewResolver的前缀,可能会这样吗?

小智 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>
    
    为此,您将在此处找到解释
  3. 实际上,您可能在使用IDEA社区版本启动它时遇到问题.我也遇到过这个问题.您可以做的是首先使用命令行和maven进行检查.执行以下命令:
    mvn spring-boot:run
    您还可以配置IDEA以运行该命令.转到Run-> Edit Configuration,单击左侧的绿色加号,然后选择Maven.然后在"命令行"字段中写入"spring-boot:run",按确定.并运行此配置.
  4. (可选)您的Application类上也有一些冗余注释.你可以删除:
    • @Configuration,因为@SpringBootApplication已经拥有它
    • @EnableWebMvc,因为Spring Boot在类路径上看到spring-webmvc时会自动添加它
    • @EnableAutoConfiguration,因为@SpringBootApplication已经拥有它

请注意,您需要@ComponentScan({"controllers"}),因为您的包结构 - 您的Application包与您的控制器不同.