关于程序跳转的问题
CatalogController类中的add()方法和remove()方法最后都是跳转到“list.do”,难道这个跳转不需要经过GlobalController核心控制类吗?如果经过此核心控制类,这种写法又如何能提取到正确的类名和方法名呢?请老师解释一下。
public class CatalogController {
private CatalogBiz catalogBiz = new CatalogBizImpl();
// /admin/Catalog/list.do
public void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Catalog root = catalogBiz.getRoot();
request.setAttribute("root", root);
request.getRequestDispatcher("/WEB-INF/pages/admin/catalog_list.jsp").forward(request, response);
}
// /admin/Catalog/toAdd.do
public void toAdd(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Catalog root = catalogBiz.getRoot();
request.setAttribute("root", root);
request.getRequestDispatcher("/WEB-INF/pages/admin/catalog_add.jsp").forward(request, response);
}
// /admin/Catalog/add.do
public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String[] titles = request.getParameterValues("title");
String[] pids = request.getParameterValues("pid");
String[] infos = request.getParameterValues("info");
List<Catalog> list = new ArrayList<Catalog>();
for (int i = 0; i < titles.length; i++) {
Catalog catalog = new Catalog();
catalog.setTitle(titles[i]);
catalog.setPid(Integer.parseInt(pids[i]));
catalog.setInfo(infos[i]);
list.add(catalog);
}
catalogBiz.add(list);
response.sendRedirect("list.do");
}
// /admin/Catalog/remove.do
public void remove(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id=request.getParameter("id");
catalogBiz.remove(Integer.parseInt(id));
response.sendRedirect("list.do");
}
}
正在回答
同学你好,相对路径可以这样理解:
这里老师如果将重定向的路径设置为response.sendRedirect("/list.do");,表示根路径进行跳转,如:
则路径的映射地址就会跳转到,根目录下的list.do,是不正确的。
而这里正确的路径是不需要添加/的,也就是相对路径,表示原本请求路径的同级目录开始构建的路径,原本请求路径为:http://localhost:8080/admin/Catalog/toAdd.do
则在这个路径response.sendRedirect("list.do"); 就表示在这个路径的同级目录/admin/Catalog上进行跳转到list路径。也就是最终的:http://localhost:8080/admin/Catalog/list.do
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
同学你好,这里的跳转是需要经过GlobalController核心控制类的。因为这里在web.xml中,对所有的以 .do结尾的路径进行了拦截,交给GlobalServlet进行处理。
具体如下:
在GlobalController控制类中,list.do根据路径判断是否包含 / 如果包含,则会匹配CatalogController类,截取list方法名。
具体如下:
建议同学可以回顾一下2-5《 核心控制器》小节,会更加清晰的理解哦~ 链接如下:
http://class.imooc.com/lesson/521#mid=20847
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 277 份
- 解答问题 4297 个
Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星