【发布时间】:2014-04-08 11:23:41
【问题描述】:
在 Web 开发方面,我绝对是个菜鸟。但是我有一些 C/C++/Java 的背景,所以我对 MVC 控制器没有问题。让我头疼的是配置。
我正在使用 Spring Boot。根据教程,它可以神奇地解决所有问题,甚至无需打开编辑器并输入单个字符。显然不是。
我有一个视图解析器配置如下:
@Configuration
@ComponentScan (basePackages = {"my.test.controller"})
@EnableAutoConfiguration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
@Bean
public InternalResourceViewResolver getViewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
public static void main(String[] args) throws Exception {
SpringApplication.run(WebConfig.class, args);
}
}
我有一个这样的控制器:
@Controller
public class PageController {
@RequestMapping(value = "/index")
public String doSomething() {
//.. do Something
return "/index";
}
我的主要问题是如果地址中有 jsp 扩展名,则无法找到该文件。 如果我键入的 url 没有像 localhost:8080/index 这样的扩展名,则页面将正确显示。 如果我键入带有 localhost:8080/index.jsp 之类的扩展名的 url,页面将返回 404 错误。这对于控制器中声明的所有页面都是相同的。
任何帮助将不胜感激。谢谢谢谢。
【问题讨论】:
-
如果我尝试删除 SetSuffix(".jsp"),localhost:8080/index 也会返回 404 错误,这意味着 java 正在读取我的 viewresolver 代码。但是当我将后缀设置为“.jsp”时,为什么无法将 index.jsp 映射到 index.jsp?我缺少什么配置?
-
这就是您配置事物的方式,也是事物应该如何工作的方式。您不应该直接访问您的 jsp 文件(也不能因为它们位于
/WEB-INF下。您必须让 Spring 解析 JSP(因此/index有效,因为 spring 正在处理它)。简而言之按预期工作(也许不像您预期的那样,但唉)。 -
谢谢 M. Deinum。现在一切都说得通了。我错过了 /WEB-INF 下的东西不能直接访问的概念。
-
我错过了不应该直接访问 jsp 文件的最佳实践。
标签: spring jsp spring-mvc spring-boot