使用绝对地址引入文件,报错地址乱码

光锥之内 2018-07-26 11:41:26
各位大神好,打扰了…
我在编辑一个注册表单的时候,使用<jsp:include page="">指令引入了一个日期选择器,
为了解决Servlet重定向后,页面无法加载include所引用内容的问题,我使用了绝对地址(然鹅这个好像也没解决)
jsp文件头部代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!-- 上面两行生成当前绝对路径-->
<html>
<head>
<base href=<%=basePath%>>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>web-pic注册</title>
<!-- 注册完毕后在修改个人资料处更换头像,此处不设 -->
<link href="design/register.css" rel="stylesheet" type="text/css">
</head>


生日表单处代码如下:(其他内容省略)
	
<table>
<tr>
<td>生日:</td>
<td>
<%String datePath = basePath+"dateChoose.jsp" ;%>
<jsp:include page="<%=datePath %>"/>
<input type="text" name="birth" onfocus="HS_setDate(this)" isRequired="false" ><br/></td>
</tr></table>

dateChoose.jsp存放日期选择器js的文件
运行时报错:500

可以看到在这儿,绝对路径地址中的斜杠/是乱码的,所以导致文件找不到

但是我单独测试的时候,是能打印出这个地址的
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<head>
<base href=<%=basePath%>
>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<!-- 测试路径 -->
</head>
<body>
<p> <%= basePath%></p>
</body>
</html>


已经捯饬了好久了…实在是找不到解决方法,所以发帖求助各位大神,能否给些指点呢……谢谢!
...全文
408 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
光锥之内 2018-07-29
  • 打赏
  • 举报
回复
引用 11 楼 hqbootstrap1 的回复:
[quote=引用 9 楼 qq_41176073 的回复:]
[quote=引用 8 楼 hqbootstrap1 的回复:]
不要用basepath ,用path(我不知道你path打印出来什么)
直接这样写<@:include file="webpictrue/dateChoose.jsp" />

谢谢您的回复。
path打印出来是webpicture,即工程名,您的路径写法在<%@ include file=""%>里好像不对,这个语句是从当前文件的目录webpicture/WebContent直接查找文件的。
但是我直接使用<%@include file="dateChoose.jsp"%>时,如果该页面被servlet重定向,这个include file就无法加载。所以我想使用动态的绝对地址,因此用了<jsp:include page>。
或者您知道有什么避免servlet重定向/转发时,include内容无法加载的方法吗?[/quote]

还有就是,报错不一定是引用dateChoose.jsp页面报错,而是dateChoose.jsp页面里报错,
可能dateChoose.jsp里有引用后台传过来的属性,而你重定向后作用域里没存值,
然后你页面取值,没有做处理导致报500错误,
你先排除法,把dateChoose.jsp里代码注释掉,进行引用看报不报错,
然后看重定向那个方法里,有没有往作用域里放值。[/quote]

谢谢您的回复,抱歉没能及时回复您。刚刚清了一下缓存,又用回了相对地址,这次运行没问题了。谢谢。
光锥之内 2018-07-29
  • 打赏
  • 举报
回复
引用 12 楼 lai417467 的回复:
不是 <%String datePath = basePath+"/dateChoose.jsp" ;%>这样吗?

basePath后已经加了一个“/"=w=
  • 打赏
  • 举报
回复
不是 <%String datePath = basePath+"/dateChoose.jsp" ;%>这样吗?
HQZYX 2018-07-26
  • 打赏
  • 举报
回复
引用 9 楼 qq_41176073 的回复:
[quote=引用 8 楼 hqbootstrap1 的回复:]
不要用basepath ,用path(我不知道你path打印出来什么)
直接这样写<@:include file="webpictrue/dateChoose.jsp" />

谢谢您的回复。
path打印出来是webpicture,即工程名,您的路径写法在<%@ include file=""%>里好像不对,这个语句是从当前文件的目录webpicture/WebContent直接查找文件的。
但是我直接使用<%@include file="dateChoose.jsp"%>时,如果该页面被servlet重定向,这个include file就无法加载。所以我想使用动态的绝对地址,因此用了<jsp:include page>。
或者您知道有什么避免servlet重定向/转发时,include内容无法加载的方法吗?[/quote]

还有就是,报错不一定是引用dateChoose.jsp页面报错,而是dateChoose.jsp页面里报错,
可能dateChoose.jsp里有引用后台传过来的属性,而你重定向后作用域里没存值,
然后你页面取值,没有做处理导致报500错误,
你先排除法,把dateChoose.jsp里代码注释掉,进行引用看报不报错,
然后看重定向那个方法里,有没有往作用域里放值。
HQZYX 2018-07-26
  • 打赏
  • 举报
回复
引用 9 楼 qq_41176073 的回复:
[quote=引用 8 楼 hqbootstrap1 的回复:]
不要用basepath ,用path(我不知道你path打印出来什么)
直接这样写<@:include file="webpictrue/dateChoose.jsp" />

谢谢您的回复。
path打印出来是webpicture,即工程名,您的路径写法在<%@ include file=""%>里好像不对,这个语句是从当前文件的目录webpicture/WebContent直接查找文件的。
但是我直接使用<%@include file="dateChoose.jsp"%>时,如果该页面被servlet重定向,这个include file就无法加载。所以我想使用动态的绝对地址,因此用了<jsp:include page>。
或者您知道有什么避免servlet重定向/转发时,include内容无法加载的方法吗?[/quote]


我创建了一个工程测试的,如上图希望对你有帮助。
如果有时候怀疑人生的话,建议 清浏览器缓存,要么清eclipse缓存 project--clean,还有就是清tomcat缓存 service--clean 最后重新部署
光锥之内 2018-07-26
  • 打赏
  • 举报
回复
引用 8 楼 hqbootstrap1 的回复:
不要用basepath ,用path(我不知道你path打印出来什么)
直接这样写<@:include file="webpictrue/dateChoose.jsp" />

谢谢您的回复。
path打印出来是webpicture,即工程名,您的路径写法在<%@ include file=""%>里好像不对,这个语句是从当前文件的目录webpicture/WebContent直接查找文件的。
但是我直接使用<%@include file="dateChoose.jsp"%>时,如果该页面被servlet重定向,这个include file就无法加载。所以我想使用动态的绝对地址,因此用了<jsp:include page>。
或者您知道有什么避免servlet重定向/转发时,include内容无法加载的方法吗?
HQZYX 2018-07-26
  • 打赏
  • 举报
回复
不要用basepath ,用path(我不知道你path打印出来什么)
直接这样写<@:include file="webpictrue/dateChoose.jsp" />
stacksoverflow 2018-07-26
  • 打赏
  • 举报
回复
引用 6 楼 qq_41176073 的回复:
[quote=引用 5 楼 stacksoverflow 的回复:]
这样呢?
<@:include file="<%= request.getContextPath() %>/dateChoose.jsp" />

应该是<%@include file=""%>,我之前试过,这个语句没有办法使用动态地址<%会自动和%>匹配
我再找找比较完整的网站代码参考一下吧,谢谢您![/quote]
OK,不好意思,没帮上忙。
光锥之内 2018-07-26
  • 打赏
  • 举报
回复
引用 5 楼 stacksoverflow 的回复:
这样呢?
<@:include file="<%= request.getContextPath() %>/dateChoose.jsp" />

应该是<%@include file=""%>,我之前试过,这个语句没有办法使用动态地址<%会自动和%>匹配
我再找找比较完整的网站代码参考一下吧,谢谢您!
stacksoverflow 2018-07-26
  • 打赏
  • 举报
回复
这样呢?
<@:include file="<%= request.getContextPath() %>/dateChoose.jsp" />
光锥之内 2018-07-26
  • 打赏
  • 举报
回复
引用 3 楼 stacksoverflow 的回复:
这样行不行
<jsp:include page="/<%=request.getContextPath()%>/dateChoose.jsp"/>

这个也报错了……
stacksoverflow 2018-07-26
  • 打赏
  • 举报
回复
这样行不行
<jsp:include page="/<%=request.getContextPath()%>/dateChoose.jsp"/>
光锥之内 2018-07-26
  • 打赏
  • 举报
回复
引用 1 楼 stacksoverflow 的回复:
试一下
<jsp:include page="/dateChoose.jsp"/>


谢谢您的回复。
试了一下,没有报错,但是include的内容应该是导入失败了,include及以下的内容都没有成功显示。
<%@include file="dateChoose.jsp" %> 之前用的是这个,但是使用servlet重定向后就没有显示,于是转用绝对路径和jsp:include,就出现题述问题。。。刚刚又试了一遍,连这个也显示不出了难道是我的eclipse累了。。
运行贴图如下:
stacksoverflow 2018-07-26
  • 打赏
  • 举报
回复
试一下
<jsp:include page="/dateChoose.jsp"/>

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧