jsp中base标签解决jetty和tomcat默认访问路径不同的问题浅谈
<%
request.setAttribute("domain", "http://localhost/demo/");
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>代理IP提取系统</title>
<link rel="stylesheet" type="text/css" href="${domain }css/index.min.css">
</head>
如上所示:项目本身对于 jsp请求路径设置 如上所示,需要在页面中每个请求前加上 ${domain } ,这是本身就是很麻烦的一种写法。
运行示例,可以运行本无可厚非-----悲剧是这样开始的---------本来项目使用tomcat是可以正常运行的,但是当切换到jetty上运行时,由于jetty的默认访问路径以 / 开始,没有加上项目名,而tomcat的默认访问路径以项目名称开始(虽然可以通过修改server.xml最后一行的path来除去项目名),这就造成了两者访问路径下的冲突。于是良久尝试最终决定对 jsp 的 base 标签 进行设置来处理这种尴尬(如图):
<%
String path = request.getContextPath();
String basepath = request.getScheme()+"://"+request.getServerName()+":"
+request.getServerPort()+path+"/";
%>
<!DOCTYPE html>
<html>
<head>
<!-- 在此处设置 base 后 ,页面 中 链接请求 便 不再需要 添加 / -->
<base href=" <%=basepath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>系统</title>
<link rel="stylesheet" type="text/css" href="css/index.min.css">
</head>
<body>
<!-- menu -->
<div id="primary-nav">
<div class="wrap nav">
<ul class="nav-menu">
<li id="menu_index" class="menu-item menu-item-type-custom current-menu-item">
<a href="index.html">首页</a>
</li>
<li id="menu_api" class="menu-item menu-item-type-taxonomy menu-item-object-custom ">
<a href="fetch.html">API接口</a>
</li>
<li id="menu_help" class="menu-item menu-item-type-taxonomy menu-item-object-custom ">
<a href="help.html">帮助中心</a>
</li>
</ul>
</div>
</div>
解决方法为:在 head 标签 处设置 <base href=" <%=basepath%>"> ,页面中链接请求便不再需要添加多余的路径 ,只写相对于项目的根路径即可,清晰快捷。在浏览器中则是以绝对路径来获取请求(或者是项目的其他文件下的css,js等),因此页面中的请求路径便不再因为项目名称的修改而修改,也不用担心服务器是否把项目名加在默认访问路径上,例如 jetty 和 tomcat 。
通过打印 basepath 可知此种设置方式如何根本上解决 jetty 和 tomcat 访问路径的问题:
在tomcat下运行打印 basepath : basepath==> http://localhost:8080/demo/
在jetty下运行打印 basepath : basepath==> http://localhost:8080/
jsp + html 混合型 : 对于jsp项目 中混有 html 页面的情况,鉴于HTML 页面base标签略有不同,
访问路径的设置就与使用了 base 标签的 jsp不同 需要 注意,我在此种情况下的处理是: html页面base标签不做设置, 选择使用相对路径(正确输入--用到../../),经测试在 jetty 和 tomcat 下 运行 是 OK 的(此处有高见还望指教一二)。
声明:以上只是小生对于自己遇到的这种情况的简单处理,也是单方面的认知,如有理解不对或者不到位的地方还望多多指正,对于 jsp 路径问题,还有很多尚未提到,比如很多时候我们引入css喜欢 用 ../../ 这种相对路径(在此没有分析),当 运行 jfinal + jsp 项目时, 如若遇到相似问题,也可以通过上述 设置 base 标签来处理。
转载于:https://my.oschina.net/xiaohuoer1995/blog/731837