码迷,mamicode.com
首页 > 编程语言 > 详细

Spring MVC中视图解析会带上请求路径

时间:2020-11-21 11:50:28      阅读:5      评论:0      收藏:0      [点我收藏+]

标签: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包中的路径。

技术图片

 

Spring MVC中视图解析会带上请求路径

标签:class   bean   control   一个   img   eth   相对路径   width   osi   

原文地址:https://www.cnblogs.com/raisins/p/13991534.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!