欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jsp中base标签解决jetty和tomcat默认访问路径不同的问题浅谈

程序员文章站 2022-04-17 10:53:57
...
<%
	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