标签:class bean control 一个 img eth 相对路径 width osi
Spring MVC中返回视图名之后,对于在类上定义的请求路径的请求是没有问题的,但是对于更下一级的请求会出现视图路径解析错误,使徒的路径最前面会加上请求的路径:
@Controller
@RequestMapping("spittles")
public class SpittleController {
private SpittleRepository spittleRepository;
@Autowired
public SpittleController(SpittleRepository spittleRepository) {
this.spittleRepository = spittleRepository;
}
@RequestMapping(value="/{spittleId}", method=RequestMethod.GET)
public String spittle(
@PathVariable("spittleId") long spittleId,
Model model) {
model.addAttribute("spittle", spittleRepository.findOne(spittleId));
return "spittle";
}
@RequestMapping(method= RequestMethod.GET)
public String spittles(
@RequestParam(value = "max", defaultValue = "10") long max,
@RequestParam(value = "count", defaultValue = "10")int count,
Model model) {
model.addAttribute("spittleList", spittleRepository.findSpittles(Long.MAX_VALUE, 20));
return "spittles";
}
}
对于上面的Controller在请求时会出现如下图所示的错误:
解析出来的视图路径上会多一个spittles,但是如果是直接请求http://localhost:8080/spittles就可以获取正确的结果,在网上查找后得知是因为视图解析器配置错误,在WEB/views/前面少一个/。正确配置如下,这是由于相对路径引起的。相对路径前不带斜杠时,表示该路径为当前资源路径的一个子路径 ,相对路径前带斜杠时,开头的路径表示该路径为根路径的一个子路径。
@Bean public ViewResolver viewResolver(){ InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/views/"); viewResolver.setSuffix(".jsp"); return viewResolver; }
顺便一提这里所说的路径应该是war包中的路径(如果是打包为war),对于上面的视图解析器,会将视图名解析为/WEB-INF/views/xxx.jsp,这个路径就是war包中的路径,如下图所示,webapp下面的文件会和lib包class包一起放在WEB-INF下,最终解析出来的路径就是指http://localhost:8080/+war包中的路径。
标签:class bean control 一个 img eth 相对路径 width osi
原文地址:https://www.cnblogs.com/raisins/p/13991534.html