zoukankan      html  css  js  c++  java
  • 关于WEB-INF目录不提供外部访问及JSP引用 js,css 文件路径问题

    在 web 项目开发过程中,我们常常使用到 JSP,以及对静态资源,js,css 等引用,但是我们应该把这些资源文件放在哪个目录下面咧,怎么引用。

    当然如果是前后端分离的项目倒不用考虑这些。

    WEB-INF:出于安全性的考虑,这个目录是禁止外部直接访问的,所以 JSP 页面放在这个目录及其子目录下面是起到保护作用的。

    在 jsp 页面中少不了的是对 js,css 文件的引用,那么我们引用的时候又有两种方式:

    1)相对路径:就是说相对于这个 jsp 页面位置,js,css 文件所在的位置,这种引用是相对的,当某一方位置发生变化是,这个相对路径就得跟着改变。

    在这种情况下我们把 jsp,js,css 文件都放到 WEB-INF 目录下是可以的,jsp 成功引用到 js,css 文件。

    2)绝对路径:这是我们在开发中常用的,request.getcontextPath() 这是获取 web 项目上下文,也就是说 web 根目录 WebContent(WEB-INF 的上一级)

    在使用绝对路径的时候,这样子,对于整个项目是绝对的路径。

    jsp 使用绝对路径引用 js,css 文件,同时 js,css 文件又放到了 WEB-INF 目录下面,这时候的引用是失败的,当我们在浏览器访问的时候,会出现找不到引用的 js,css 文件。

    分析:

    这个问题的原因正是由于 WEB-INF 拒绝外部直接访问, 但是你可能会想,我的 JSP 文件也放在这个目录下面呀,为什么浏览器可以访问咧。

    这时候,应该想想,你的 jsp 是直接通过 浏览器输入什么 http://..../xx.jsp 访问的?不是吧,大部分时候我们是直接访问 控制层 ,再由控制层控制返回那个 jsp 页面给浏览器的。

    所以这时候,就不属于直接通过浏览器外部访问这个 JSP 页面了,而是通过了控制层访问的,属于内部访问了,这样 WEB-INF 当然不会禁止内部访问。

    你可能又会想,为什么这些 js,css 文件又引用不了,因为这时候已经不属于内部访问了。

    那么为什么是外部访问咧,因为当以绝对路径引用的时候,request.getcontextPath()/WEB-INF/js/xx.js, 这时候会转换为 xxx/WEB-INF/js/xx.js,很显然就变成了外部引用了,WEB-INF 拒绝了访问,所以我们一般会放到 WEB-INF 目录外面,这样:xxx/js/xx.js

    相对路径之所以能引用成功是这样的效果:WEB-INF/jsp/xx.jsp,这是 jsp 文件路径,WEB-INF/js/xx.js,这是 js 文件路径,相对这个 jsp 文件引用,以它为出发点:../js/xx.js 你看,这样完全没有经过 WEB-INF 目录,所以引用成功了。


  • 相关阅读:
    [Apache commons系列]DBUtils 示例代码
    关于syslog
    Phoenix Tips (1)
    Phoenix 常用函数
    Phoenix 的数据类型
    最简单的Phoenix 访问 HBase例子
    SVNKIT 主要方法
    Linux 集群时钟同步
    Linux 集群时钟同步
    Linux 下定时提交SVN
  • 原文地址:https://www.cnblogs.com/molashaonian/p/7242008.html
Copyright © 2011-2022 走看看