zoukankan      html  css  js  c++  java
  • Spring3拦截引发的问题——WEB开发中的client路径

    什么是client路径?

    第一类、也就是htmljs文件等client訪问的文件里的路径,这里包含一些资源文件的引入(jscss还有各种图片等),或是跳转到静态html页面,总之获取的都是静态资源

    第二类、指定servlet跳转路径(比方<a href=””></a>或者location.href

    事实上这两类本质都一样,都是通过请求server来获得对应的资源。

    tomcat中一般用一个defaultServlet来处理静态资源的訪问。

    而第二类则通常是通过自定义的<url-pattern></url-pattern>来匹配

    client相对路径的使用方法


    第一种:相对于当前页面

    当我们在页面上使用<script type="text/javascript" src="resource/js/jquery.min.js"></script>

    等来引入资源文件时,这里的resource的绝对路径究竟是什么?

    事实上就是以你当前訪问的页面的地址为当前路径,你能够把它理解成一个基准路径,而src中的相对路径则是基于这个基准路径的。(貌似JSPhead里有个base标签,能够改这个基准路径。只是我没用过)

    比方你当前訪问的路径为http://localhost:8080/Spring/test.htm

    js文件在server上的绝对路径就是http://localhost:8080/Spring/resource/js/jquery.min.js

    假设你的当前訪问路径为http://localhost:8080/Spring/inner/test.htm

    那你要引入上述文件,就须要这么写了:

    <script type="text/javascript" src="../resource/js/jquery.min.js"></script>

    另外一种:相对于根路径

    首先,我认为在WEB应用里这应该算是绝对路径吧

    在浏览器中。”/”相当于就是当前站点的根文件夹。比方http://192.168.0.1/

    这个要和servlet中的”/”差别开来。在servlet中的”/”是WEB应用的根文件夹

    所以刚才引入js文件还能够这么写

    <script type="text/javascript" src="/Spring/resource/js/jquery.min.js"></script>

    可是这种路径就和我们的WEBproject名绑定起来了,不方便移植。

    事实上我们这个WEBproject名我们在程序中是能够用”request.getContextPath()”取到的

    得到的contextPath前面包括”/”。所以我们在引入的时候仅仅须要

    <script type="text/javascript" src="$!path/resource/js/jquery.min.js"></script>

    (这里我用的是velocity

    另外须要说明的一点是:

    Spring3中使用注解的时候,拦截路径

    @RequestMapping("/test")@RequestMapping("/test/")是有差别的

    第一个页面的当前路径是test的上一层,这里(能够把test想想成一个文件)

    而第二个页面的当前路径则已经变成了test(能够把test想象成一个文件夹)

    所以在写第一类相对路径的时候要注意,不然就会错误发生。

    另一个要注意:比方说用ajax请求@RequestMapping("/test/"),假设当前的文件夹为/test

    那么无论ajax怎样请求,当前路径依然是test的上层。不会改变

    Ps:我也是发生了这个错,才想到要记录一下的

  • 相关阅读:
    ASP.NET Core 进程内(InProcess)托管
    ASP.NET Core 中的 Main 方法
    ASP.NET Core Web 项目文件
    5)
    4)
    单词
    html5单词
    3)
    2)
    1)
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7101248.html
Copyright © 2011-2022 走看看