我配置了应用程序并将“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的前缀,可能会这样吗?
答案 0 :(得分:5)
我做了类似你的简单项目。您可以查看我的github
你要做的是:
<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 mvn spring-boot:run
您还可以配置IDEA以运行该命令。转到运行 - >编辑配置,单击左侧的绿色加号,然后选择Maven。然后在&#34;命令行&#34;字段写&#34; spring-boot:运行&#34;,按确定。
并运行此配置。请注意,您需要@ComponentScan({&#34; controllers&#34;}),因为您的包结构 - 您的Application包与您的控制器不同。