一.问题
JSP中究竟采用绝对路径还是采用相对路径随着所采用技术的越来越复杂,这个问题也变得越来越难以解决。
1)采用相对路径遇到的问题
l 相对路径固然比较灵活,但如果想复制页面内的代码却变得比较困难,因为不同的页面具有不同的相对路径,复制后必须修改每一个连接的路径。
l 如果页面被多于一个的页面所包含,那么被包含页面中的相对路径将是不正确的。
l 如果采用Struts的Action返回页面,那么由于页面路径与Action路径不同,使得浏览器无法正确解释页面中的路径,如页面为/pages/cust/cust.jsp,图片所有目录为/images/title.gif,这时在/pages/cust/cust.jsp中的所用的路径为”../../images/title.gif”,但是如果某一个Action的Forward指向这个JSP文件,而这个Action的路径为/cust/manage.do,那么页面内容中”../../images/title.gif”就不再指向正确的路径了。
解决以上问题似乎只有使用绝对路径了。
2)采用绝对路径遇到的问题
l 随着不同的Web应用发布方式,绝对路径的值也不同。如Web应用发布为MyApp,则路径”/MyApp/images/title.gif”是正确的,但发布为另一应用时如MyApp2,这个路径就不对了,也许这个情况比较少,但以default方式发布Web应用时以上绝对路径也不同:”/images/title.gif”。
二.解决方案
1)采用绝对路径,但为了解决不同部署方式的差别,在所有非struts标签的路径前加${pageContext.request.contextPath},如原路径为:
”/images/title.gif”,改为
“${pageContext.request.contextPath}/images/title.gif”。
代码” ${pageContext.request.contextPath}”的作用是取出部署的应用程序名,这样不管如何部署,所用路径都是正确的。
缺点:
操作不便,其他工具无法正确解释${pageContext.request.contextPath}
2) 采用相对路径,在每个JSP文件中加入base标签,如:
<base href="http://${header['host']}${pageContext.request.contextPath}/pages/cust/relation.jsp" />
这样所有的路径都可以使用相对路径。
缺点:
对于被包含的文件依然无效。
真正使用时需要灵活应用1)和2),写出更加健壮的代码。
在使用的时候可以使用${pageContext.request.contextPath},也同时可以使用<%=request.getContextPath()%>达到同样的效果,同时,也可以将${pageContext.request.contextPath},放入一个JSP文件中,将用C:set放入一个变量中,然后在用的时候用EL表达式取出来。
分享到:
相关推荐
在使用JSTL标签之前必须在JSP页面的首行使用指令定义标签库的位置和访问前缀,(jstl 1.1)各个标签库的定义如下: 核心标签库 支持JSP中的一些基本的操作; <%@taglib prefix="c" uri="http://java.sun....
它简化了从各种作用域(Page、Request、Session和Application)中获取和设置数据的过程。EL表达式的基本语法是 `${expression}`,其中`expression`代表你要执行的操作或访问的数据。 1. **基本语法与运算符** - **...
5--EL中的变量搜索范围是:page request session application 点运算符(.)和"[ ]"都是 表示获取变量的值.区别是[ ]可以显示非词类的变量 2、EL隐含对象 1)与范围有关的隐含对象 与范围有关的EL 隐含对象包含...
3. 如果需要根据图片的不同来决定跳转的页面,可以在JSP中使用条件语句(如`<c:if>`标签,来自JSTL库)来处理。例如: ```html ${imagesList}"> ${image.fileName eq '1.bmp'}"> <a href="firstPage.jsp"> ${...
EL隐含对象是JSP EL提供的一组预定义变量,无需显式声明即可直接在EL表达式中使用,极大地提高了开发效率。 1. **pageContext对象** pageContext对象提供了对JSP页面所有作用域的访问,包括page、request、session...
里面有一个jsp文件例子 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page isELIgnored="false"%> String path = request.getContextPath(); String basePath = request.getScheme...
link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/resources/css/login/login.css?version=20200311" /> </head> <body> <li><img src = "${pageContext....
在JSP页面中,你可以使用JavaScript来控制音频的播放,通过发送AJAX请求到Servlet,Servlet处理请求后返回控制指令。例如,当用户点击“循环播放”按钮时,发送一个请求到Servlet,Servlet接收到请求后更新状态,并...
实例如下: <%@ page language=java contentType=text/html; charset=UTF-8 ...${frontPath}${pageContext.request.contextPath}/f/> <c:set var=ajaxUrl value=${frontPath}${pageContext.request.c
8.PageContext对象类:PageContext PageContext对象提供了一种方式来访问JSP页面的所有范围的变量,并且提供了对JSP页面所有作用域的访问,包括page, request, session, 和 application。获取其他范围的变量: ```...
在使用EL表达式时,我们可以在JSP页面中直接引用Java对象的属性,例如 `${list}` 可以用来显示Model返回的列表数据,`${totalPages}` 可以显示总页数。EL表达式可以简化视图层的代码,让页面更加清晰,也更容易维护...
在描述的问题中,当一个Servlet转发到一个JSP页面时,如果JSP页面中的超链接使用的是相对路径,那么这可能导致路径混乱。例如,假设我们有以下路径: - `/a.jsp` - `/b.jsp` - `/c.jsp` 如果从`/a.jsp`通过Servlet...
具体代码如下所示: <%@ page language=java contentType=text/html;...${frontPath}${pageContext.request.contextPath}/f/> <c:set var=ajaxUrl value=${frontPath}${pageContext.reque
解释:JSP 生命周期中,JSP 会先解释成 Servlet 源文件,然后编译成 Servlet 类文件,并且每当用户端运行 JSP 时,_jspService()方法都会运行一次。 16. 下列哪个为 JSP 的注释标签?(选择 1 项) 答:!%> 解释:!...
在Web开发领域,JavaServer Pages (JSP) 是一种广泛使用的动态网页技术,它允许开发者在HTML或其他标记语言中嵌入Java代码来创建交互式网页。JSP 2.0版本引入了许多改进,其中包括对表达式语言(Expression Language...
正确的JSP隐式对象包括`pageContext`、`application`、`session`、`request`、`response`、`out`、`page`和`config`。 6)在Servlet中,`HttpServletResponse`的`sendRedirect()`方法用来把一个HTTP请求重定向到...
JSP中,我们经常会写为${obj.name}字样,但你有没有想过,它的取值过程是什么,属性值从哪取得? ${obj}相当于 request.getAttribute(“obj”),这句话严格来说不严谨,依次的请求范围是page、request、session、...
在 jsp 页面中,可以使用以下代码来上传和回显图片: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> 图片上传 图片上传 ${pageContext....
5. **JSTL(JavaServer Pages Standard Tag Library)**:JSTL是一套标准的标签库,用于替代在JSP中使用脚本语言进行控制逻辑。例如,`<c:forEach>`用于遍历集合,`<fmt:formatDate>`用于日期格式化。 6. **Servlet...
其中basePath为${pageContext.request.contextPath} 例如 function pageBack(){ [removed].href = "${basePath}/" "${urlParent}"; } 配置步骤: 1,将web-return-0.0.1-SNAPSHOT.jar加载到项目里。 2...