• HTML的相关路径与绝对路径的问题---通过网络搜索整理


    问题描述:
        在webroot中有个index.jsp 在index.jsp中写个表单。
      现在在webroot中有个sub文件夹,sub文件夹中有个submit.jsp想得到index.jsp表单的数据

      index.jsp
      < form action="????这边要怎么写才才能指向submit.jsp" method="post">

        数据

      < /form>

    问题解决:

    HTML的相关路径与绝对路径的问题。
    先看一下下面的URL:
    http://192.168.1.1:8080/hello/index.html
    一个URL由
    服务器地址: http://192.168.1.1:8080
    WEB应用上下文:  /hello
    网页或请求:  /index.html
    三个部分组成。
    WEB应用发布时,WEB应用上下文可以自行指定,如放在ROOT/下的话,WEB应用上下文就是空,如:
    http://192.168.1.1:8080/index.html
    它的WEB应用上下文就是空。

    HTML协议中要求,form的action属性,以“/”开头是绝对路径,不以“/”开头的是相对路径。
    绝对路径是相对于服务器地址而言的,相对路径是相对于当前网页或请求而言的。
    举一个例子,你的当前网页位置是:
    http://192.168.1.1:8080/hello/page/index.html
    其中/hello是WEB应用上下文;/page/index.html是网页。
    在这个网页上有一个请求需要指向
    http://192.168.1.1:8080/hello/servlet/checkUser.cgi
    index.html中的form应该怎么写呢?
    可以写成绝对路径(相对于http:/192.168.1.1:8080)
    < form action="/hello/servlet/checkUser.cgi" >
    ...
    < /form>
    也可以写成相对路径(相对于http://192.168.1.1:8080/hello/page)
    < form action="../servlet/checkUser.cgi" >
    ...
    < /form>

    当前如果你的WEB应用是基于JSP的话,有许多第三方的标签库如JSTL或基于Struts的标签库都可以在form中自动为你加上WEB应用上下文,如二楼东走西顾的例子。
    如果你准备在JSP使用基本语句生成网页的话,六楼honglei915提供了一个很好的例子,只不过“/”更规范一些,如:
    < %!String basePath=request.getContextPath();%> 
    < form action="<%=basePath%>/sub/submit.jsp" method="post"> 
    < /form> 

    在JSP中,脚本化语言如“<%=contextPath%>”可以从page,request,session及application中取值。
    下面的代码可以看到结果是因为contextPath被保存在page中:
    < % String contextPath = request.getContextPath(); %>
    < form action="<%=contextPath%>/sub/submit.jsp" method="post"> 
    < /form> 

    EL表达式如“${contextPath}”只能从request,session及application中取值。
    上述代码修改一下就可以支持EL表达式:
    < % 
      String contextPath = request.getContextPath(); 
      // 将contextPath保存到request中
      request.setAttribute("contextPath", contextPath);
    %>
    < form action="${contextPath}/sub/submit.jsp" method="post"> 
    < /form> 

    另外还有两个方法:

    方法一:
    < %!String basePath=request.getContextPath();%>
    < form action="<%=basePath%>subsubmit.jsp" method="post"> 
    < /form>

    basePath 是你项目的根路径,推荐这样做,不管以后你的sub 文件夹怎么移动,都是可以成功提交的。

    使用这个方法需要理解"<%=basePath%>是什么

    关于"<%=basePath%>的理解请参考:http://www.cnblogs.com/fifiyong/p/JSP.html

    方法二:

    <form action="${pageContext.request.contextPath}/sub/submit.jsp" method="post"> 
    < /form> 

    ${pageContext.request.contextPath}等价于<%=request.getContextPath()%> 或者可以说是<%=request.getContextPath()%>的EL版 意思就是取出部署的应用程序名或者是当前的项目名称

    比如项目名称是ajax01 在浏览器中输入为http://localhost:8080/ajax01/login.jsp ${pageContext.request.contextPath}或<%=request.getContextPath()%>取出来的就是/ajax01,而"/"代表的含义就是http://localhost:8080

    所以我们项目中应该这样写${pageContext.request.contextPath}/login.jsp

  • 相关阅读:
    负载均衡--hash slot算法
    redis cluster slots数量 为何是16384(2的14次方)
    ZooKeeper原理与它的集群工作流程
    5分钟入门chrony
    微服务的下一步,离不开服务网格
    sar统计日流量与实时流量
    docker查看jvm内存占用
    k8s编排
    Rsync 排除文件
    Kubernetes 中优雅停机和零宕机部署
  • 原文地址:https://www.cnblogs.com/fifiyong/p/HTML.html
Copyright © 2020-2023  润新知