说明:Jsp和html中的所有的超链接地址都是基于basePath路径,即当前web项目在服务器的根目录:basePath = http://localhost:8080/项目名/。
###1.2 绝对路径与相对路径
注意:转发和重定向的URLString前有加 / 为绝对路径,反之为相对路径。
@RequestMapping(value="/model",method=RequestMethod.GET)
public ModelAndView testForward(ModelAndView model,@RequestParam(value="id",defaultValue="1",required=false)Long id){
User u = getBaseService().get(User.class, id);
model.addObject("user", u);
model.setViewName("forward:index.jsp");
return model;
}
如上代码,如果返回modelAndView 则可以如红色标注,添加forward即可,若想重定向,可把forward替换成redirect便可达到目的。
@RequestMapping(value="/forward",method=RequestMethod.GET)
public String testForward(){
return "forward:/index.action";
}
####3.2.1 带参数
@RequestMapping(value="/redirect",method=RequestMethod.GET)
public String testRedirect(RedirectAttributes attr){
attr.addAttribute("a", "a");
attr.addFlashAttribute("b", "b");
return "redirect:/index.action";
}
带参数可使用RedirectAttributes参数进行传递:
注意:
使用RedirectAttributes的addAttribute方法传递参数会跟随在URL后面,如上代码即为http:/index.action?a=a
使用addFlashAttribute不会跟随在URL后面,会把该参数值暂时保存于session,待重定向url获取该参数后从session中移除,这里的redirect必须是方法映射路径,jsp无效。你会发现redirect后的jsp页面中b只会出现一次,刷新后b再也不会出现了,这验证了上面说的,b被访问后就会从session中移除。对于重复提交可以使用此来完成.
@RequestMapping(value="/redirect",method=RequestMethod.GET)
public String testRedirect(){
return "redirect:/index.action";
}
参考:
http://blog.csdn.net/liboyang71/article/details/72846527
项目结构:
首先解释一下每个文件夹的作用,如果你是用的是idea创建的springboot项目,会在项目创建的一开始resources文件夹下自动创建static以及templates文件夹。也就是说项目初始时有java、resource、static以及templates 这几个文件夹。
一般static下存放js以及css样式文件,templates存放html页面。
首先static文件夹以及templates文件夹是受保护的,也就是说相当于你将文件放到了传统的ssh或ssm项目的WEB-INF下了。所以也就是说这两个文件夹下的文件是无法通过url直接访问的,以至于在springmvc下使用重定向会报404。
@Controller
public class ThymeleafController {
@RequestMapping(value = "cs")
public String cs(Model model) {
return "index";
}
}
@Controller
public class ThymeleafController {
@RequestMapping(value = "cs")
public String cs(Model model) {
return "redirect:index.html";
}
@RestController注解相当于@ResponseBody + @Controller合在一起的作用 。
使用该注解后上述重定向只能返回一个字符串,解决办法:
@RestController
public class FooController{
@RequestMapping(value = "/foo")
public void cs(HttpServletResponse reponse ) {
response.sendRedirect("some-url");
}
}