zoukankan      html  css  js  c++  java
  • JSP中的路径

    我的原则

    所有路径一律使用绝对路径,就是以"/"开头的或者带host的路径。形如:

    /imgs/1.jpg
    <%= request.getContextPath()%>/imgs/1.jpg //推荐使用
    

    应该尽量避免使用类似".","./","../../"等类似的相对该文件位置的相对路径。一方面,这样当文件移动时,很容易出问题。另一方面,绝对路径用起来简单。

    相对路径和绝对路径

    相对路径(Relative Path)以引用文件的网页所在位置为参考基础,而建立出的目录路径。形如:

    imgs/1.jpg;    ../imgs/1.jpg;     ./imgs/1.jpg

    绝对路径(absolute path)以Web 站点根目录(形如:http://localhost:8080/)为参考基础的目录路径。之所以称为绝对,意指当所有网页引用同一个文件时,所使用的路径都是一样的。形如:

    http://localhost:8080/yourwebapp/index.jsp
    /imgs/1.jpg

    "." -- 代表目前所在的目录,相对路径。 如:<a href="./abc">文本</a> 或 <a href="abc">

    ".." -- 代表上一层目录,相对路径。 如:<a href="../abc">文本</a>

    "../../" -- 代表的是上一层目录的上一层目录,相对路径。 如:<img src="../../abc" />

    "/" -- 代表根目录,绝对路径。 如:<a href="/abc">文本</a> 或 <img src="/abc" />

    "D:/abc/" -- 代表根目录,绝对路径。

    前端后台根目录

    前端——服务器的根目录"/":所代表的路径形如:

    http://localhost:8080/ 

    后台——Web应用的根目录"/":所代表的路径形如:

    http://localhost:8080/yourwebapp/ 

    前端地址(浏览器解析)

    所有的html页面中的绝对地址都是相对于host根目录(http://localhost:8080/)的,是由浏览器解析。路径前的"/"代表host根目录。

    注:host代表指定请求资源的Intenet主机和端口号

    jsp页面中html标签如<a> <img><form>路径前面的"/"代表(http://localhost:8080/)。

    eg:

    <form action="myaction"> //绝对URL地址是http://localhost:8080/yourwebapp/myaction 

    注意这里是因为,后面讲到的basePath。

    <form action="<%=basePath%>myaction"> //绝对URL地址是http://localhost:8080/yourwebapp/myaction 
    <form action="/myaction"> //绝对URL地址是http://localhost:8080/myaction //路径错误 

    服务器端地址(tomcat解析)

    服务器端的绝对地址指的是相对于你的web应用的地址(http://localhost:8080/yourwebapp/),是由tomcat解析。在jsp和servlet中路径前的"/"代表webapp的根目录。

    其用到的地方有:forward、url-pattern

    servlet中request.getRequestDispatcher(address);假设你要forward到项目根目录下的user目录下a.jsp应该这么写:

    request.getRequestDispatcher("/user/a.jsp").forward(request, response);

    这个"/"当前的web应用yourwebapp根目录,其绝对URL地址就是:

    http://localhost:8080/yourwebapp/user/a.jsp。 

    然而sendRedirect中redirect是客户端的行为,所以应该是以浏览器解析的方式来书写url;

    /yourwebapp/user/a.jsp

    JSP页面中的basePath

    新建一个JSP页面自动生成如下代码:

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

    说明:

    path="/yourwebapp";//项目名 
    basePath="http://localhost:8080/yourwebapp/";//host+项目名 

    base标签的href属性规定页面中所有相对链接的基准URL。解决了前面叙述的前后台路径不统一的问题。

    eg:

    <a href="<%=path %>/counter/one.jsp">one.jsp</a>//注意path后面没有"/",得加上。 

    html页面输出为:

    <a href="/yourwebapp/counter/one.jsp">one.jsp</a> 

    因为有<base>标签的存在,相对路径会失效,例如:

    <img src="imgs/1.jpg">

    无论图片所在的网页在哪个目录,在yourwebapp/目录下,还是在yourwebapp/news/目录也好。其浏览器解析出图片的URL为:

    http://localhost:8080/yourwebapp/imgs/1.jpg 

    也就是说:所有前面不带"/"或者host的路径A,浏览器解析的URL为: basePath+A。

    从而形成了前后台路径使用的统一。

  • 相关阅读:
    第十周总结
    冲刺(四)
    冲刺(三)
    冲刺(二)
    冲刺(一)
    生成热词
    c#简单日志类
    WPF 后台代码 实现DynamicResource 绑定赋值
    WPF ListboxItem 双击事件 Command绑定
    mysql的命令行安装,忘记密码,密码重置问题
  • 原文地址:https://www.cnblogs.com/klguang/p/4743258.html
Copyright © 2011-2022 走看看