当前位置: 首页 > 知识库问答 >
问题:

没有找到与URI HTTP请求映射[/WEB-INF/视图/welcome.jsp]在DispatcherServlet名称为调度Servlet[重复]

王豪
2023-03-14

我对应用程序进行了配置,并将“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\view\welcome.jsp

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

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

我想配置文件中缺少一些东西,但是我看不见。请问哪里出了问题,什么意思:“没有找到与URI[/WEB-INF/view/welcome.jsp]的HTTP请求映射”?我应该提供像dispatcher-servlet.xml这样的xml配置吗?谢谢你。

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

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

.... 有人能猜出哪里不对吗?(可能是因为anotation@EnableAutoConfiguration不允许定义viewResolver的前缀吗?

共有2个答案

权弘新
2023-03-14

配置解析器配置application.properties

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

spring boot将自动配置内部视图解析器。

你需要在pom中添加jstl罐

    <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>

要使视图解析器工作,请添加

@Override
public void configureDefaultServletHandling(
        DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}

spring boot为您提供了一个示例

钮誉
2023-03-14

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

你要做的是:

  1. Rename hello.html to hello.jsp
  2. Check that you have all dependencies in your pom.xml. I didn't see it so I am not sure if it is wrong. Make sure you have these two dependencies:
    <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>
    
    mvn spring-boot:run
    • @配置,因为@SpringBootApplication已经有了它
    • @启用webmvc,因为Spring Boot在类路径上看到Spring webmvc时会自动添加它
    • @启用自动配置,因为@SpringBootApplication已经有了它

    注意,由于您的包结构,您需要@ComponentScan({“controllers”}),因为您的应用程序类位于与控制器不同的包中。

 类似资料: