1.地址分类:39
jsp和html中使用的地址都是前端页面中的地址,都是相对地址
1.1绝对地址39具有协议名称的绝对地址,如http://www.baidu.com,ftp://202.122.23.1
1.2相对地址39没有协议开始的,比如user//some.do,/user/some.do
相对地址不能独立使用,必须有参考地址。资源只能通过参考地址+相对地址本身来指定。
1.3参考地址391.3.1在您的页面中,访问地址不添加“/”注意我们的user/some.do前没有斜杠//
index.jsp
<a href="user/some.do">发起user//some.doget请求 没有斜杠/</a>
访问的是:http://localhost:8080/ch06_path/index.jsp
路径:http://localhost:8080/ch06_path/
资源:index.jsp
在index.发起user/jsp页面some.do请求将访问地址转换为http://localhost:8080/ch06_path/user/some.do
当你的地址开头没有斜杠,例如,user/例如,例如,例如user/例子some.do,点击链接时,访问地址是当前页面的地址和链接的地址。
http://localhost:8080/ch06_path/+user/some.do
访问成功
1.3.在您的页面中,访问地址添加“/”39注意我们的user/some.do之前加了斜杠//
访问失败index.jsp
<a href="/user/some.do">发起user//some.doget请求 没有斜杠/</a>
访问的是:http://localhost:8080/ch06_path/index.jsp
路径:http://localhost:8080/ch06_path/
资源:index.jsp
点击/user/some.do,访问地址变成httpp://localhost:8080/user/some.do
参考地址是您的服务器地址,即http://localhost:8080
访问失败,修改为/user/some.在do之前,项目根变成/ch06_______________path/user/some.do
项目根修改后,访问成功修改在/user/some.在do之前,项目根变成/ch06_______________path/user/some.do
<a href="/ch06_path/user/some.do">发起user//some.doget请求 加斜杠/并修改版本</a><br>
使用EL表达式动态添加项目的根源如果您的资源无法访问,按照上述重写方法过于死板,可采用EL表达式动态获取:
添加EL表达式${pageContext.request.contextPath}
<%--使用EL表达式 动态 增加项目根路径 39--%><a href="${pageContext.request.contextPath}/user/some.do">发起user//some.doget请求 加斜杠/EL修改版</a><br>
index.jsp--addStudent.jsp---student/addStudent.do(service方法,调用dao方法)--result.jsp
2.解决路径访问问题40使用mv.setViewName("/index.jsp");让我们让页面再次回到index.jsp,然后再次点击somee.看看do的效果
MyController
@RequestMapping(value = "/user/some.do") public ModelAndView doSome(){// doGet()-->service请求处理 ///处理some.do请求了。 相当于service调用处理的完成。 ModelAndView mv = new ModelAndView(); //添加数据, 在请求结束时,框架将数据放入request作用域。 mv.addObject("msg“欢迎使用springmvc坐web开发”; mv.addObject("fun",“执行dosome方法”); ///用视图解析器填写路径 mv.setViewName("/index.jsp"); //返回mv return mv; }
index.jsp
<%--不加/ 39--%><a href="user/some.do">发起user//some.doget请求 没有斜杠/</a><br/>
第一次点击没问题
index.user/jsp访问user/some.do,返回后现在的地址:http://localhost:8080/ch06_path/user/some.do
http://localhost:8080/ch06_path/user/some.do
路径:http://localhost:8080/ch06_path/user/
资源:some.do
第二次点击错误
在index.再次点击user/jspsome.do,变成http://localhost:8080/ch06_path/user/user/some.do报错
2.1解决方案:402.1.1加入${pageContext.request.contextPath}2.1.40-412base标签在html语言中添加base标签。表示当前页面中访问地址的基地址。您的页面中没有“/”开头的所有地址,以base标签中的地址为参考地址使用base中的地址+user/some.构成访问地址的do
index.jsp
<%--index.编写jsp页面 39--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>第一个springmvc项目</title> <base href="http://localhost:8080/ch06_path/"/></head><body> <p>第一个springmvc项目</p> <p> <%--不加/ 39--%> <a href="user/some.do">发起user//some.doget请求 没有斜杠/</a> <br/> <br> </p></body></html>
每次写上面的base标签都很麻烦,可以动态获取41
<%--动态获取项目的根路径 比如 http://localhost:8080/ch06_path/ 41--%><% String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%>
然后引入
<%-- base标签 base标签中的地址作为参考地址 40 使用base中的地址 + 资源地址 构成访问地址-%> <base href="<%=basePath%>"/>