`
Vince_Lee
  • 浏览: 60959 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

路径问题 解决 ${pageContext.request.contextPath} <%=request.getContextPath()%>

阅读更多

 

一.问题
    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),写出更加健壮的代码。

 

三、注意

 

今天在写一个struts的时候遇到路径问题最后用了这条语句解决<form action="${pageContext.request.contextPath}/login.do"> 

这里要注意的是如果用了上面的 ${pageContext.request.contextPath} 表达式的の时候那么你的web.xml要保证头是这样的

<?xml version="1.0" encoding="gbk"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

确保是2.4的schema ,2.5的也可以,也有人说:

2.2 以上的都行吧!主要是使用jstl标签

 

 

分享到:
评论

相关推荐

    jsp页面中${pageContext.request.contextPath}介绍

    ${pageContext.request.contextPath}是JSP取得绝对路径的方法 例如:浏览器地址栏为”http://localhost:8080/test/index.jsp “ 那么:取出来的就是”http://localhost:8080/test”,简写为”/test” /test 等价于 ...

    java web 登录验证码生成类

    &lt;img src="${pageContext.request.contextPath}/checkcode.jsp"/&gt; 另外在web.xml中配置验证码类的加载: &lt;servlet&gt; &lt;servlet-name&gt;CheckCodeImage&lt;/servlet-name&gt; &lt;servlet-class&gt;...

    jsp+mysql师生作业互动系统

    &lt;li&gt;&lt;a href="${pageContext.request.contextPath}/student!list"&gt;学生信息管理&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="${pageContext.request.contextPath}/exam!list"&gt;学生作业情况查询&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="${pageContext....

    springMVC+mybatis

    &lt;form action="${pageContext.request.contextPath}/my/login" method="post"&gt; &lt;div&gt;${message }&lt;/div&gt; 邮箱:&lt;input type="text" name="name"&gt; &lt;br&gt; 密码: &lt;input type="password" name="pwd"&gt; &lt;br&gt; ...

    JavaScript中${pageContext.request.contextPath}取值问题及解决方案

    在JSP里取${pageContext.request.contextPath},方式一是可以正常取到,但方式二却取到的是 字符“${pageContext.request.contextPath}” 方式一: [removed] var t = "${pageContext.request.contextPath}"; ...

    人脸识别研究综述

    人脸识别,用于进行人脸检测.二、javaEE框架学习笔记 2、&lt;%@ taglib prefix=...其中:“${pageContext.request.contextPath}”就是获取request的绝对路径,它的作用相当于“&lt;%=pageContext.request.contextPath%&gt;” 3、

    ext时间控件,可以选择时分秒

    var context = '${pageContext.request.contextPath}'; var allEquString = '&lt;%=request.getAttribute("allEquString")%&gt;'; [removed] [removed][removed] &lt;/head&gt; &lt;body&gt; &lt;/body&gt; &...

    struts2<s:if>使用心得

    &lt;a href="${pageContext.request.contextPath}/ga/needModify.action?taskInstanceId=&lt;s:property value="id"/&gt;"&gt;准备资料&lt;/a&gt; &lt;/s:elseif&gt; &lt;s:else&gt; &lt;s:property value="#taskName" /&gt; &lt;/s:else&gt; &lt;/td...

    JspSmartUpload上传文件到文件夹重名问题解决方法

    &lt;%@ page language="java" contentType="text/html; charset=gbk"%&gt; &lt;%@ page pageEncoding="gbk"%&gt; &lt;%@ page import=...&lt;%=su.getRequest().getParameter("content") %&gt; &lt;br&gt; &lt;br&gt; &lt;/body&gt; &lt;/html&gt;

    轮播jar包

    &lt;li&gt;&lt;img src = "${pageContext.request.contextPath}/resources/img/login/Desert."&gt;&lt;/li&gt; &lt;li&gt; &lt;img src = "${pageContext.request.contextPath}/resources/img/login/Whitebackground."&gt; &lt;div class = ...

    ajax、mysql、jstl实现分页、局部刷新界面

    String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %&gt; &lt;%@ taglib uri=...

    flash-swf格式计算器使用Object控件嵌入html即可使用(文件内有dom)

    value="${pageContext.request.contextPath }/common/plugins/calc/calc.swf"&gt; &lt;param name="flashvars" value="lcName=1165260.9155424985958207&amp;&amp;"&gt; &lt;param name="wmode" value="opaque"&gt; ...

    smartupload上传组件3个版本打包

    包括三个版本+相关实例&lt;br&gt;&lt;br&gt;jspsmartupload-javaword的.jar&lt;br&gt;smartupload-CSDN的.jar&lt;br&gt;smartUpload-据说是修正中文错误.jar&lt;br&gt;=======================================================&lt;br&gt;在JSP 中上传...

    java上传文件实例

    String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %&gt; &lt;!DOCTYPE ...

    jsp运行时的问题集合

    自己在实际开发中,发现并解决问题的总结。

    JSTL高级用法

    ${pageContext.request.contextPath} 服务的web application 的名称 ${pageContext.request.method} 取得HTTP 的方法(GET、POST) ${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0) ${...

    基于iframe实现类似于ajax的页面无刷新

    form id=”form0″ action=”${pageContext.request.contextPath}/news/baikeAdd.form” enctype=”multipart/form-data” method=”POST” target=”hidden_frame”&gt; … … &lt;/form&gt; &lt;iframe name=’...

    小型的图书管理

    form action="${pageContext.request.contextPath}/book?method=add" method="post"&gt; &lt;p&gt;书籍名称:&lt;input type="text" name="bookname" /&gt; &lt;p&gt;书籍作者:&lt;input type="text" name="bookauthor" /&gt;...

    jsp编程关于上传下载设计

    out.println("&lt;BR&gt;" + mySmartUpload.getFiles().getCount() + " files could be uploaded.&lt;BR&gt;"); // Display the number of files uploaded out.println(count + " file(s) uploaded."); %&gt; &lt;% ...

Global site tag (gtag.js) - Google Analytics