zoukankan      html  css  js  c++  java
  • Servlet--超链接,表单提交,重定向,转发4种情况的路径

    实际编码中我们常常写路径,写路径既能够写相对路径,也能够写绝对路径。我2年曾经我就养成了习惯。仅仅要是写路径我从来都是写绝对路径,由于万一将来我们的项目的文件夹发生变化。原来要是写相对路径的话就会有路径依赖关系。改的地方太多了。并且相对路径在某些情况下还有点特殊,有的是相对于原来的请求的文件夹,有的是相对于整个web应用,所以我强烈建议大家以后写路径统一用绝对路径(以“/”开头)来写,“/”表示网站的根路径。



    写路径的情况无非以下4种情况,这里做一个整理。

    • 1,超链接

    如果使用以下的文件夹结构:

               

    当前的请求路径:http://localhost:8080/linkin/Linkin.html或者http://localhost:8080/linkin/Linkin.jsp

    相对路径:

    1,我们来看看在linkin.html中引入linkin.js和linkin.html文件相对路径应该怎么写?

    <span style="white-space:pre">	</span><script type="text/javascript" src="../scripts/linkin.js"></script>
    	<link rel="stylesheet" type="text/css" href="../styles/linkin.css">

    2,假设在linkin.jsp中引入linkin.js和linkin.html文件相对路径应该怎么写?

    <span style="white-space:pre">	</span><script type="text/javascript" src="scripts/linkin.js"></script>
    	<link rel="stylesheet" type="text/css" href="styles/linkin.css">

    注意:上面的html文件和jsp文件引入静态资源相对路径还不一样,记住以下的一句话,假设是在server上直接执行的静态资源比方html文件引入别的静态资源这里的“相对”就是物理意义上的相对,假设是在server上要跳转的这样的视图资源比方jsp文件引入别的静态资源这里的“相对”是相对于上整个webproject的相对。2者不同的。


    绝对路径:以“/”开头。“/”表示根文件夹,之后从项目名依次開始写。


    <script type="text/javascript" src="/linkin/scripts/linkin.js"></script>
    <link rel="stylesheet" type="text/css" href="/linkin/styles/linkin.css">

    • 2,表单提交
    当前的请求路径:http://localhost:8080/linkin/Linkin.jsp
    相对路径:<form action="LinkinServlet" method="POST">
    绝对路径:<form action="/linkin/LinkinServlet" method="POST">

    • 3。重定向
    当前请求路径:http://localhost:8080/linkin/LinkinServlet
    相对路径:resp.sendRedirect("jsp/Linkin1.jsp");
    绝对路径:resp.sendRedirect("/linkin/jsp/Linkin1.jsp");

    • 4,转发
    当前请求路径:http://localhost:8080/linkin/LinkinServlet
    相对路径:req.getRequestDispatcher("jsp/Linkin1.jsp").forward(req, resp);

    绝对路径:req.getRequestDispatcher("/jsp/Linkin1.jsp").forward(req, resp);


    总结:
    1。虽然我们不怎么写相对路径,可是难免会维护别人的代码。所以还是要了解一下的。假设在超链接中使用了到了相对路径,假设要是没有server跳转。比方html这些文件。则相对就是文件所在的文件夹。要是经过了server跳转,比方jsp这些文件或者通过XXX.do跳转到的页面上的话,这里的相对是相对于整个web应用,不一样的。


    2。绝对路径比較好,以后我们写路径都直接写绝对路径就好。除了转发。绝对路径的开头“/”代表域名之后的东西,也就是说相当于省去了整个url上面的主机IP和port号而已。项目名称还是要写的。

    转发是唯一一个比較特殊的,由于转发本身就是在web应用内部跳转的。所以不能写项目名称,直接从项目名称后面開始写。


    • 假设还不理解,请好好理解以下这句话:
    传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB网站的根文件夹。假设创建RequestDispatcher 对象时指定的相对URL以“/”开头。它是相对于当前WEB应用程序的根文件夹。


    3,假设有代码洁癖的人在写绝对路径的时候,不想在jsp出现项目名称这样的硬码,怎么办呢?用<%=request.getContextPath()%>来取代。比方:

    <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/common.css" />
    <script type="text/javascript" src="<%=request.getContextPath()%>/jquery/base/jquery-1.8.0.js"></script>


    • 最后统一来整理下请求路径:

    请求路径是把请求导向到一个 servlet 来响应服务。

    它是由几个重要的部分来组成的。

      通过 HttpRequest 对象,暴露了例如以下信息(对比顾用的文件夹结构):
    1)上下文路径(Context Path) 
    该路径的前缀是和 ServletContext 相关的。假设 Context 就是 Web server的 URL 命名空间的缺省的根上下文时,那么上下文路径将会是一个空的字符串。

        假设上下文并非server的命名空间的根,则上下文路径就以“/”開始,但不能以“/”结束。
    2)Servlet 路径(Servlet Path) 
    该路径就是直接与激活该请求的对应映射。它也是以“/”开头。

    但要注意的是,假设指定的请求是与“/*”模式相匹配,则此时 Servlet 路径就是一个空字符串。
    3)路径信息(PathInfo) 
    请求路径中除了上下文路径和 Servlet 路径以外的部分。当没有额外的路径时路径信息就是空的(null),或者它会以“/”開始的字符串。

      在 HttpServletRequest 接口中定义例如以下的方法来訪问请求路径的对应信息:getContextPath(); getServletPath(); getPathInfo();    值得注意的是,请求 URI 和路径的各部分之间的 URL 编码的不同之外。以下的等式恒成立:    requestURI = contextPath + servletPath + pathInfo


  • 相关阅读:
    maven 阿里镜像
    红黑树数据结构剖析
    一个简单的通用Makefile实现
    如何取消开机硬盘自检
    用友u8采购发票如何取消审核
    应付帐款—制单处理,出现“供应商被锁定”的解决方法
    用友系统管理员密码清除
    用友软件系统管理员账号admin密码忘记了,如何解决?
    用友 提示“尚有已全部暂估报销的单据未进行处理,不能进行12月的期末处理!”
    MySQL Windows版安装详解
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7281344.html
Copyright © 2011-2022 走看看