一.问题
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....
EL在JSP页面中的使用可以极大地简化JSP页面的编写工作,并且能够提高代码的可读性和可维护性。在EL中提供了多种内置对象来帮助开发者更方便地处理请求和响应,这些内置对象主要分为以下几类: - **范围变量**:包括...
- `${pageContext.request.contextPath}`获取Web应用程序的上下文路径。 - `${pageContext.request.method}`获取请求方法(GET、POST等)。 - `${pageContext.request.protocol}`获取协议版本(如HTTP/1.1)。 -...
它简化了从各种作用域(Page、Request、Session和Application)中获取和设置数据的过程。EL表达式的基本语法是 `${expression}`,其中`expression`代表你要执行的操作或访问的数据。 1. **基本语法与运算符** - **...
- **默认搜索顺序**: JSP引擎默认按照`page`、`request`、`session`、`application`的作用域顺序查找变量。 **1.2 指定作用域** - **示例与含义**: - `${pageScope.user.name}`: 从`page`范围内获取`user`对象并...
它提供了一种简单的方式,使得开发者能够在JSP页面中轻松获取到存储在不同作用域中的对象或属性值。 **基本语法格式:** - `${expression}`,其中`expression`表示一个合法的表达式。 - `[]`:用于获取属性名称包含...
下面是一个简单的 EL 使用示例,展示如何在一个 JSP 页面中使用 EL 访问和处理数据。 假设我们有一个 JSP 页面 `index.jsp`,其中包含了从 `request` 范围获取的 `customer` 对象,并希望显示其姓名。 ```jsp <!...
- **示例**:假设有一个名为`MyClass`的Java类,其中定义了一个静态方法`calculate()`,那么可以通过定义EL函数的方式,在JSP页面中使用`${MyClass.calculate()}`来调用此方法。 #### 三、EL表达式中的隐式对象 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接收到请求后更新状态,并...
例如,指定默认值可以直接在表达式中使用`!`操作符;检查变量是否存在则可以使用`?`操作符;定义列表和映射字面量也非常直观。 综上所述,从JSP到Freemarker 2.3.23的迁移过程中,需要注意的主要是一些基本语法的...
实例如下: <%@ 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。获取其他范围的变量: ```...
${pageContext.request.contextPath}${page.servletUrl}">首页 ... <!-- 分页导航结束 --> ``` 2. **分页导航逻辑** - 使用`<c:forEach>`标签来遍历页码范围,生成相应的链接。 - 通过`href`属性设置链接地址...
弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...
在使用EL表达式时,我们可以在JSP页面中直接引用Java对象的属性,例如 `${list}` 可以用来显示Model返回的列表数据,`${totalPages}` 可以显示总页数。EL表达式可以简化视图层的代码,让页面更加清晰,也更容易维护...
在描述的问题中,当一个Servlet转发到一个JSP页面时,如果JSP页面中的超链接使用的是相对路径,那么这可能导致路径混乱。例如,假设我们有以下路径: - `/a.jsp` - `/b.jsp` - `/c.jsp` 如果从`/a.jsp`通过Servlet...