在前台JSP页面中,我们经常会看到这样几行代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
其中最重要的就是:
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<base href="<%=basePath%>">
那么这几句代码分别代表什么意思呢?
以http://localhost:8080/mysystem/user/login 为例
reques.getContextPath()就是得到项目名称,比如说mysystem
request.getScheme()就是得到协议http
request.getServerName()就是得到显示自己的主机名或者服务器名,就是本例的localhost
request.getServerPort()就是得到端口号8080
再加上path就是一个完整的项目路径
这三句话在项目中的唯一作用就是提供一个基地址,就是上面所说的,如果jsp页面中有链接的话,就是以这个基地址为基础拼接成完整的url地址
如果没有那三句话,系统会默认在当前的地址基础上进行url的拼接和跳转,比如说如果在http://localhost:8080/mysystem/user/users中有一个链接 href="xiaoming.",那么url就会在本页面的基础上修改为http://localhost:8080/mysystem/user/xiaoming并进行跳转。如果没有href,那么按钮的默认url还是本页面的url,一般重载在@controller中使用。但如果有了三句话,无论什么页面中有href,都会以http://localhost:8080/mysystem/为基地址,导致无法依据本页面跳转,只能将href写成href="user/xiaoming"。
在spring项目中,无论有没有三句话,当在href中写相对地址时,都不能在最前面写斜杠/,比如href="/user/xiaoming"会导致本页面完整的url没有项目名mysystem,使得页面无法跳转。
在项目中修改url地址进行测试时,不用重新启动服务器,只需重新刷新网页即可。
,