Controller层路由特点
Controller上的注解@RequestMapping (value = "/admin/index" ) ,中的"/admin/index"统一不写.do、.htm后缀。
Controller中的return " redirect:/sys/menu.do "; 重定向时一定要写.do、.htm后缀。
Controller中的return "modules/sys/menuTreeselect"; 转发视图层时,前面不以/开头,最后不写.jsp后缀。
入口路由
URL 如何映射Controller
作用:当用户使用浏览器在地址栏输入网站的URL后,通过URL映射进入相应的Controller控制器。
通过在Controller的类上和方法上添加@RequestMapping注解,来实现路由的控制。
@RequestMapping (value = "${adminPath}/gen/genTable" ) (${adminPath})
@RequestMapping (value = { "list" , "" })
@RequestMapping (value = "form" )
如何进入首页
当浏览器访问网站的首页时,地址可能是:http://www.abc.com/ 这样的 URL, 这个请求默认会被index.jsp处理,因web.xml中配置的welcome-file-list中有index.jsp。
因为FDP的spring mvc只拦截*.do、*.htm后缀,所以不可以拦截住这个请求,spring mvc无机会处理这个请求。所以要在 indxe.jsp 要转发到index.do 控制器。
通过index.jsp 进入首页的Controller。
作用:当用户使用浏览器,在地址栏输入网站的域名后,进入网站的首页。
当浏览器访问网站的首页时,地址可能是:http://www.abc.com/,这个请求会被index.jsp处理(因web.xml中配置的welcome-file-list中有index.jsp)
由FDP的spring mvc只拦截*.do、*.htm后缀,所以不可以拦截住这个请求,spring mvc无机会处理这个请求。
所以要重定向到index.do
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.sicheng.common.config.Global" %> <% //作用:进入首页的Controller //当浏览器访问网站的首页时,地址可能是:http://www.abc.com/,这个请求会被index.jsp处理(因web.xml中配置的welcome-file-list中有index.jsp) //由FDP的spring mvc只拦截*.do、*.htm后缀,所以不可以拦截住这个请求,spring mvc无机会处理这个请求。 //所以要转发到index.do String ctx = request.getContextPath(); String adminPath=Global.getAdminPath(); String path="/cms/index.htm"; //System.out.println(path); request.getRequestDispatcher(path).forward(request, response); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>正在转入首页</title> </head> <body> <h3>这是首页</h3> <a href="views/admin/index.jsp">管理后台首页</a><br> <a href="views/seller/index.jsp">商家后台首页</a><br> <a href="<%=ctx %>/cms/index.htm">原cms页面</a><br> <a href="<%=ctx %>/admin/login.do">管理后台</a><br> </body> </html>
出口路由
出口路由:转发到某个view视图
作用:转发到jsp页面
return "product/index";
return "admin/gen/genTableForm" ;
出口路由:转发到另一个controller
作用:在一个controller中,转发到另一个controller,我试了真的可行。
return "forward:/product/index.htm";
可以转发到某个controller ,会再走spring mvc自己的Interceptor,但不会走servlet的层的Filter。
出口路由:重定向到 另一个controller
作用:在一个controller中处理完业务后,重定向到其它controller。
return "redirect:" +Global.getAdminPath()+ "/member/memberBase.do?repage" ;
注意:上面使用repage参数,关于repage特性,请阅读repage相关文档。
重定向的妙用:
- 可有限度的防止表单重复提交。当用户使用post方式提交了一个表单到服务器,Controllert处理完,重定向到“列表页”,可防止用户在“列表页”按F5产生表单重复提交。
- 配合 RedirectAttributes工具类一起使用,可携带“一次性”参数,如“操作成功提示”,只提示一次,在浏览器上按F5刷页面不再重复提示。