zoukankan      html  css  js  c++  java
  • JSP的相对路径深入研究(多次完善)

    第一种情况 :直接访问JSP文件

    URL是 http://localhost/Context path/jsp/index.jsp

    要在index.jsp引用go.gif文件:

    1、使用决对路径

    <img src='<%=request.getContextPath() %>/images/go.gif'/>

    浏览器寻找方式: 域名+/Context path/images/go.gif   ,可找到。

    2、使用相对路径

    <img src='../images/go.gif'/>

    浏览器寻找方式:通过地址栏分析,index.jsp所在目录(jsp)的上一层目录(WebRoot)下的images/go.gif文件

    3、使用base href

    <%=request.getContextPath() %>太麻烦,可以在每一个jsp文件顶部加入以下代码

    <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <base href="<%=basePath%>">

    <img src='images/go.gif'/>

    浏览器寻找方式: basePath的值http://localhost/Context path/再加上images/go.gif,可找到。

    ------------------------------------------------------------------------------

    第二种情况: servlet转发到jsp

    1、使用相对路径

    URL是http://localhost/Context path/servlet_2   (转发到/jsp/index.jsp)

    错误:

    根据/jsp/index.jsp路径计算,得到 <img src='../images/go.gif'/>

    正确:

    <img src='images/go.gif'/>

    原因:

    index.jsp是保存在服务器端的/jsp/index.jsp目录下面,但通过转发后浏览器并不知道/jsp/目录的存在,因为地址栏中没有体现出来。所以服务器端/jsp/目录并不会对相对路径产生影响

    浏览器寻找方式:通过地址栏分析http://localhost/Context path/servlet_2 ,相对于servlet_2所在目录(/)下面找到images/go.gif文件

    2、使用相对路径

    URL是http://localhost/Context path/servlet/ser/ser/servlet_1 (转发到/jsp/index.jsp)

    “/servlet/ser/ser/servlet_1 是在web.xml文件配置的

    错误:

    根据/jsp/index.jsp路径计算,得到 <img src='../images/go.gif'/>

    正确:

    <img src='http://www.cnblogs.com/../images/go.gif'/>

    原因:

    index.jsp是保存在服务器端的/jsp/index.jsp目录下面,但通过转发后浏览器并不知道/jsp/目录的存在,因为地址栏中没有体现出来。所以服务器端/jsp/目录并不会对相对路径产生影响

    浏览器寻找方式:通过地址栏分析http://localhost/Context path/servlet/ser/ser/servlet_1,相对于servlet_1所在目录(ser)的上一层目录的上一层目录的上一层目录(/)下的images/go.gif文件

    3、使用决对路径

    <img src='<%=request.getContextPath() %>/images/go.gif'/>

    ------------------------------------------------------------------------------

    总结:相对路径是由浏览器通过地址栏分析出来的,与服务器端文件的存放路径没有关系,由其是使用Servlet,struts转发到某jsp文件后,某jsp在服务器端存放的位置是/a/b/c/d/f/g.jsp , 但经过Servlet,struts转发后,浏览器的地址栏可不一定是/a/b/c/d/f/这样的层次。所以相对路径的计算以浏览器地址栏为准。原创地址:http://elf8848.iteye.com/

    struts2中可以使用命名空间,来保证浏览器地址栏中的目录层次与服务器端目录层次的一致性,这样程序员通过服务器端的目录层次计算相对路径,在浏览器中也是正常的。

    但我们理解了原理,就算不使用命名空间,自己也有强大的控制力。

    转载入注明出处:JAVA应用与开发办公室 http://elf8848.iteye.com/

  • 相关阅读:
    七、vertical-align属性、透明度属性及兼容、ps常用工具、常见的图片格式、项目规范、命名参考、iconfont的使用
    自定义注解!绝对是程序员装逼的利器!!
    令人爱不释手的Python列表推导式
    用Python画colorbar渐变图+修改刻度大小+修改渐变颜色
    pandas:使用函数批量处理数据(map、apply、applymap)
    【Python3】xlwt/xlrd模块读取和新建excel并生成直方图
    什么是可串行化MVCC
    python计算和媳妇在一起天数的小程序,最后绘制成花.
    520了,用32做个简单的小程序
    “TensorFlow 开发者出道计划”全攻略,玩转社区看这里!
  • 原文地址:https://www.cnblogs.com/yaowen/p/2920646.html
Copyright © 2011-2022 走看看