一、地址分类
- 绝对地址
带有协议名称的是绝对地址, http://www.baidu.com , ftp://202.122.23.1
- 相对地址
没有协议开头的, 例如 user/some.do , /user/some.do
相对地址不能独立使用,必须有一个参考地址。 通过参考地址+相对地址本身才能指定资源
二、表单中的action加“/”区别
1. 不加“/”
<form action="some.do" method="post">
姓名:<input type="text" name="name"><br/>
年龄:<input type="text" name="age"><br/>
<input type="submit" value="提交参数">
</form>
注意此时的action是不以斜杠“/”开头的。此时我们点击表单访问的地址是
“http://localhost:8080/SpringMVC_05/” + “some.do”
2.加"/"
<form action="/some.do" method="post">
姓名:<input type="text" name="name"><br/>
年龄:<input type="text" name="age"><br/>
<input type="submit" value="提交参数">
</form>
注意此时的action是以斜杠“/”开头的。此时我们点击表单访问的地址是http://localhost:8080/some.do
三、解决加"/"这个问题
方式一:我们只需要在/前面加上我们的项目名即可
<form action="/SpringMVC_05/some.do" method="post">
姓名:<input type="text" name="name"><br/>
年龄:<input type="text" name="age"><br/>
<input type="submit" value="提交参数">
</form>
注意此时的表单名称前面加入了我们的项目名
该方式不够灵活,我们一般都是使用EL表达式
方式二:使用EL表达式
在jsp中我们一般使用EL表达式进行处理
<form action="${pageContext.request.contextPath}/some.do" method="post">
姓名:<input type="text" name="name"><br/>
年龄:<input type="text" name="age"><br/>
<input type="submit" value="提交参数">
</form>
方式三:使用base标签
-
加入一个base标签, 是html语言中的标签。
-
表示当前页面中访问地址的基地址。
你的页面中所有 没有“/”开头的地址,都是以base标签中的地址为参考地址
使用base中的地址 + some.do 组成访问地址
<head>
<title>静态资源测试</title>
<base href="http://localhost:8080/SpringMVC_05/">
</head>
<body>
<form action="some.do" method="post">
姓名:<input type="text" name="name"><br/>
年龄:<input type="text" name="age"><br/>
<input type="submit" value="提交参数">
</form>
</body>
</html>
这样获取的好处,就是我们可以不用每次都使用EL表达式,但我们也不可能每次去手动输入http://localhost/…这样的表达式,所以我们一般动态获取绝对路径
<%
String basePath = request.getScheme() + "://" +
request.getServerName() + ":" + request.getServerPort() +
request.getContextPath() + "/";
%>
<html>
<head>
<title>动态获取绝对路径</title>
<base href="<%=basePath%>" />
</head>
<body>
<form action="some.do" method="post">
姓名:<input type="text" name="name"><br/>
年龄:<input type="text" name="age"><br/>
<input type="submit" value="提交参数">
</form>
</body>
</html>