zoukankan      html  css  js  c++  java
  • java web中的相对路径和绝对路径

    以往一直没注意javaweb中的相对路径和绝对路径问题,有时有问题了,才想起去看看是否是路径的问题,一直对路径问题都是一知半解。今天就姑且记录一下,毕竟事如春梦了无痕嘛,倘不记之笔墨,未免有辜彼苍之厚。

    对于一个URL地址,我们在编码的时候不会去这样写http://localhost/TestProject/registerUserServlet

    大多只会在form表单的提交路径中写上registerUserServlet或者/TestProject/registerUserServlet

    如此这般。

    那其实这两种写法效果是一样的,只是前者叫做相对路径或者叫做绝对路径

    • 相对路径:以./开头,可以省略
    • 绝对路径:以/开头

    我们先来看相对路径,只要搞清楚当前资源与目标资源之间的相对关系,相对路径是非常容易的。

    我们通过举例来说明。

    我们建立一个javawebl类型的项目

    web文件夹下我们新建一个location.html文件

    <body>
        <h1>相对路径</h1>
        <h1>找到当前资源和目标资源之间的相对位置关系</h1>
        <P>
            当前资源:location.html
            http://localhost/day15/location.html
        </P>
        <P>
            目标资源:
            http://localhost/day15/responseDemo
        </P>
        <a href="./responseDemo">
            responseDemo2
        </a>
        <a href="responseDemo">
            responseDemo2
        </a>
    
    

    src/com/helius/servelt文件夹下新建一个responseDemo的servlet类,来处理location.html

    中的响应。

    那此时采用上图中的两种写法都是可以的,因为相对路径中的./可以省略。

    分析:当我们打开浏览器,准备访问这个html文件,我们访问的路径是什么呢?

    显然是 http://localhost/day15/location.html

    day15我们称为虚拟目录,虚拟目录可以在idea中的启动的tomcat中配置。

    也就是apache-tomcat-7.0.94confserver.xml中配置的Context标签

    <Context path="/day15" docBase="c:work_folder" />
    

    另外这个文件是在web目录下的,也就是项目根目录

    所以得出它的访问路径 http://localhost/day15/location.html

    再来看responseDemo这个从哪里来的呢,当然是我们在web.xml中配置的

    <servlet>
            <servlet-name>ResponseDemo</servlet-name>
            <servlet-class>ResponseDemoServlet</servlet-class>
        </servlet>
     
        <servlet-mapping>
            <servlet-name>ResponseDemo</servlet-name>
            <url-pattern>/responseDemo</url-pattern>
        </servlet-mapping>
    

    注:Servlet3.0可以直接通过注解进行配置

    所以当我们请求这个类的路径就是http://localhost/day15/responseDemo

    将两个路径比较一下,使用相对路径可以通过href="responseDemo"进行访问。


    再来看绝对路径

    绝对路径要分两种情况了,需要判断定义的路径是给谁用的?判断请求从哪里发出?

    • 给客户端使用:需要加虚拟目录
      • <a>标签,<form>标签、重定向
    • 给服务端使用:不需要加虚拟目录
      • 转发

    再来看用绝对路径怎么改写上个例子

        <h1>绝对路径</h1>
    
        <a href="/day15/responseDemo">
            responseDemo2
        </a>
    

    绝对路径以/开头,显然,这个超链接肯定是通过用户点击,也即是客户端使用,请求也由客户端发出,所以需要加上虚拟目录day15

    同理,我们可以思考,哪些是客户端发出的请求呢?

    比如使用

    1. form表单进行提交
    2. 点击超连接
    3. 重定向:切记重定向是客户端行为,

    哪些是服务端行为呢?

    比较常见的就是转发操作

    Tips:如果动态获取虚拟目录

    request.getContextPath()
    

    好吧,这次记录的比较简洁,希望这次不会再忘记了。

    你所看得到的天才不过是在你看不到的时候还在努力罢了!
  • 相关阅读:
    第三方支付
    优化MySQL插入方法的五个妙招
    MySQL的数据类型和建库策略详解
    mysql 文本搜索
    mysql 存储过程
    mysql 游标的使用
    mysql 触发器
    mysql 保留点
    MySQL 使用硬链接配合truncate 删除2.2T的表
    25-ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/heliusKing/p/11111167.html
Copyright © 2011-2022 走看看