• Web开发中的路径问题总结


    原文地址:http://zzqrj.iteye.com/blog/806909


             路径问题在Web开发中算是令人比较蛋疼的问题,尤其是用相对地址时,同样的代码,在不同的目录结构中竟然会出现有对有错的结果,让人茫然不知所措。这种错误,究其原因,还是对Web中路径的概念一知半解,为彻底避免这种错误,提高开发效率,这里对Web中路径问题稍作总结。

    1. 服务器端的相对地址
       

        是在服务器端解析的,是相对于web应用的地址
        servlet中的相对地址应该是相对于web应用,即相对于http://localhost:8080/webapp/

    2. 重定向的路径问题


        forward跳转: servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的,
        所以,要forward到a.jsp应该这么写: request.getRequestDispatcher("/user/a.jsp")这个/相对于当前的web应用webapp, 其绝对地址就是:http:// localhost:8080 /webapp/user/a.jsp


        sendRedirect跳转: response.sendRedirect(address);这个address是在客户端解析的,要跳转到a.jsp,应该这么写:response.sendRedirect("/webapp/user/a.jsp");
     
    3. 客户端的相对地址


        所有的html中的相对地址都是相对于http:// localhost:8080 / 的,而不是http:// localhost:8080 /webapp/ 的。
        Html中的form表单的action属性的地址应该是相对于http:// localhost:8080 / 的。

        所以,如果提交到a.jsp为:action="/webapp/user/a.jsp";提交到servlet为action="/webapp/handleservlet"
        Javascript也是在客户端解析的,所以其相对路径和form表单一样。

    4. 两种相对路径
     
        相对于根目录的路径:

        /jsp/path/pathTest.jsp 
        在服务器端解析为绝对路径为:http://localhost:8080/webapp/jsp/path/pathTest.jsp  
        在客户端解析为的绝对路径为:http://localhost:8080/jsp/path/pathTest.jsp

        相对于当前目录的路径:  

        jsp/path/pathTest.jsp  
        当前目录的路径为http://localhost:8080/webapp/jsp/path

        那么绝对路径为:http://localhost:8080/webapp/jsp/path/jsp/path/pathTest.jsp

     
    5. 站点根目录和css路径问题


        当在jsp中引入css时,如果其相对路径相对于当前jsp文件的,会正常找到相应的css
        但是如果从一个和当前jsp的路径不一样的Servlet中forward到这个jsp时,当前的相对路径是哪个Servlet的相对路径,而不是jsp所在的路径,这时不能在jsp中用这样的路径:<link href="css.css" rel="stylesheet" type="text/css">或者<link href="../../css.css" rel="stylesheet" type="text/css">。

        这中情况下,要用站点根目录来引用css文件,就是相对于http://ip/ 的目录,以"/"开头,即href="/webapp/css.css"。这样在servlet转发后和jsp中都是相对于站点根目录的相对路径,就能正确使用所定义的css样式了。

        也可以理解为在客户端(jsp/html文件中),引用文件时,都要用/wabapp/***开头,因为客户端的相对地址是http://localhost:8080/

    6. servlet中几个获取路径方法的对比

        对于url: http://localhost:8080/webapp/blog/list

        那么分别调用request.getContextPath( )、request.getServletPath( ) 、 request.getURI( )、request.getURL( )分别返回什么路径?

        这几个方法都是在HttpServletRequest接口中定义的。

        

        1). request.getContextPath( )返回web应用程序的路径,上例中该方法将返回/webapp;

        2). request.getServletPath( ) 返回Servlet的路径。上例中该方法将返回/blog/list;

        3). request.getRequestURL( )返回请求的URL,上例中即为http://localhost:8080/webapp/blog/list ;

        4). request.getRequestURI( )返回HTTP请求行中请求URI的部分。上例中该方法将返回/webapp/blog/list
    ================================== 赵客缦胡缨,吴钩霜雪明。 银鞍照白马,飒沓如流星。 ==================================
  • 相关阅读:
    ActiveMQ学习(四)——应用程序接口
    ActiveMQ学习(三)——MQ的通讯模式
    ActiveMQ学习(二)——MQ的工作原理
    ActiveMQ学习(一)——MQ的基本概念
    java获取对象属性类型、属性名称、属性值 【转】
    Java方法的参数是按值传递的.【转】
    Jquery 操作 select
    JQuery中根据属性或属性值获得元素
    XML 标记使用的特殊字符对应内置实体
    创建DBLink语句
  • 原文地址:https://www.cnblogs.com/lucare/p/9312668.html
Copyright © 2020-2023  润新知