zoukankan      html  css  js  c++  java
  • jsp/html页面中的路径

    Html/Jsp页面中的路径,是供浏览器使用的。“/”代表的是服务器根目录,一个服务器会有多个web应用,所以请求资源时需要加应用名才能正确访问。

    页面中使用的相对路径,也是由浏览器根据当前页面的url或<base>元素解析成完整请求路径的。

    页面中使用路径的常用方式如下:

    1.当前应用的根路径+静态资源的相对路径:

    <link type="stylesheet" href="${pageContext.request.contextPath}/satic/ css/common.css">
    <form action="${pageContext.request.contextPath}/servlet/login" method="post">

    浏览器解析时会将”/”解析为服务器。如果不加当前应用的根路径,有可能会错误地把static当作应用名,取决于部署时path的设置。所以最好统一添加应用的根路径。

    获取当前应用的根路径:

      EL表达式:${pageContext.request.contextPath};  

      JSP:<% =request.getContextPath() %>

    若工程文件就是在根目录下,通过request.getContextPath()返回的字符串为空。

    2.当前应用的绝对路径+静态资源的相对路径:

    <%@ page language="java" pageEncoding="GBK" contentType="text/html;charset=gbk" isELIgnored="false"%>
    <%
      String appContext= request.getContextPath();//  获取当前应用的根路径构建当前应用的绝对路径(/appName)
      String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + appContext ;
      // 将basePath存入pageContext中,将来用EL表达式读取
      pageContext.setAttribute("basePath",basePath);
    %>
    <html>
        <body>
            <a href="${pageScope.basePath}/jsp/login.jsp">
        </body>
    </html>

    缺点:每个请求前都要加${pageScope.basePath}

     

    3.利用<base>标签

    默认情况下,页面中相对路径的请求都是相对于当前页面的url发出的;如果当前页面存在<base>标签,则请求是相对<base>中设定的值。

    <%@ page language="java" pageEncoding="GBK" contentType="text/html;charset=gbk" isELIgnored="false"%>
    <%
        String appContext= request.getContextPath();// 获得当前应用的根路径
        String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() + appContext ;
    %>
    <html>
        <head>
           <base href="<%=basePath%>">      <!--设定base标签-->
        </head>
        <body>
            <a href="/jsp/login.jsp">Login</a>
        </body>
    </html>

    缺点: 对于被包含的文件依然无效。

    Servlet内所有的路径都要用绝对路径,即以”/”开头,代表当前的web应用。

    req.getRequestDispatcher("/pages/login.jsp").forward(req, resp);转发路径中”/”代表当前应用。   

    以上皆为个人理解,如有错误之处,欢迎留言指正。
  • 相关阅读:
    Azure 中 Linux 虚拟机的大小
    排查在 Azure 中创建、重启 Linux VM 或调整其大小时发生的分配故障
    如何在 Azure 中的 Linux 经典虚拟机上设置终结点
    针对通过 SSH 连接到 Azure Linux VM 时发生的失败、错误或被拒绝问题进行故障排除
    Linux 内核超时导致虚拟机无法正常启动
    Java并发编程(十三)同步容器类
    可以开发着玩一下的web项目
    org.tmatesoft.svn.core.SVNCancelException: svn: E200015: authentication canc
    FastDFS单机搭建以及java客户端Demo
    做前端(单纯页面和js)遇到的问题辑录(一)
  • 原文地址:https://www.cnblogs.com/kevin2chen/p/6542690.html
Copyright © 2011-2022 走看看