• jsp界面项目绝对路径问题


    1. 方法一:直接采用绝对路径 (不推荐)    
    2. 在JSP页面端,获得本项目的绝对地址(如果你的项目叫MyApp,那么获得到的地址就是 http://localhost:8080/MyApp/):    
    3. 代码如下:    
    4. <!-- **************方法一***************** -->    
    5. <%@ page language="java" pageEncoding="GBK" contentType="text/html;charset=gbk" isELIgnored="false"%>    
    6. <%    
    7. String path = request.getContextPath();    
    8. // 获得本项目的地址(例如: http://localhost:8080/MyApp/)赋值给basePath变量    
    9. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";    
    10. // 将 "项目路径basePath" 放入pageContext中,待以后用EL表达式读出。    
    11. pageContext.setAttribute("basePath",basePath);    
    12. %>    
    13. <html>    
    14. <head> </head>    
    15. <body>    
    16. <a href="${pageScope.basePath}jsp/register.jsp">    
    17. </body>    
    18. </html>    
    19. <!-- *************************************-->    
    20.   
    21. 我们可以看到,在标签 <a>中的href属性内,我们直接采用了    
    22. “本项目路径 ${pageScope.basePath}” 加上 "jsp/register.jsp" ,    
    23. 从而构成一个绝对路径(即: http://localhost:8080/MyApp/jsp/register.jsp)    
    24.   
    25. 但是这样做有一个很不好的地方,那就是我们必须要在每个链接的前面都要加上 “${pageScope.basePath}”    
    26. 如果这样做的话,将是一件很可怕的事情。    
    27.   
    28. (二)方法二: 利用html中的 <base>标签(推荐)    
    29. 下面是对html中的 <base>的介绍:    
    30. base 元素可规定页面中所有链接的基准 URL    
    31. 默认情况下,页面中的链接(包括样式表、脚本和图像的地址)都是相对于当前页面的地址(即:浏览器地址栏里的请求URL)。    
    32. 我们可以使用 <base>标签中的href属性来设置,所有的“相对基准 URL”。    
    33.   
    34. 上面说的是什么意思呢?我们来看看代码就知道咯~~    
    35.   
    36. 这是JSP端的代码    
    37. 下面的代码 (十分类似上面 "方法一" 中的JSP代码)    
    38. 但是这里我们并没有采用 ${pageScope.basePath}+"相对路径地址" 的方法,    
    39. 而是采用了html文件中的 <base>标签:    
    40. 代码如下:    
    41. <!-- *************JSP代码******************-->    
    42. <%@ page language="java" pageEncoding="GBK" contentType="text/html;charset=gbk" isELIgnored="false"%>    
    43. <%    
      1.   String path = request.getContextPath();    
      2.   // 获得项目完全路径(假设你的项目叫MyApp,那么获得到的地址就是 http://localhost:8080/MyApp/):    
      3.   String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";    
    44. %>    
    45. <html>    
    46. <head>    
    47. <!-- base需要放到head中 -->    
    48. <base href=" <%=basePath%>">    
    49. </head>    
    50. // 这里我们就可以直接使用相对路径(即: 相对于base标签)    
    51. <a href="jsp/login.jsp">Login </a>    
    52. </html>    
    53. <!-- *************************************-->    
    54.   
    55. 大概看完了上面的代码,或许您还是有些疑惑 *_*~~    
    56. 不过当您看到了,下面的代码,可能就豁然开朗了 (*^__^*) 嘻嘻……。    
    57.   
    58. 当我们去执行上面的那段JSP代码后,我们可以在浏览器中可以查看,他所返回给客户端的html代码:    
    59. 执行完上述JSP后,所返回的html代码如下:    
    60. <html>    
    61. <head>    
    62. <base href="http://localhost:8080/MyApp/">    
    63. </head>    
    64. // 设置了 <base>后,相对路径,相对于的就是base中的路径,而不再是浏览器地址的请求路径啦~~~    
    65. <a href="jsp/login.jsp">Login </a>    
    66. </html>    
    67.   
    68. 我们可以看到JSP返回的html代码中,包含了 <base href="http://localhost:8080/MyApp/">内容。    
    69. 也就是说,在本html文件中,遇到的所有 “相对链接(例如: <a href="jsp/login.jsp">)”,都是相对于base    
    70. 的路径(即:http://localhost:8080/MyApp/),所以我们就可以进行的使用 相对链接,而不必担心,    
    71. 转发操作(forward)或 请求地址不同不同所造成的页面无法找到的错误啦~(即: HTTP: 404)。。。   
    72.   
    73. 三、针对方法二如果写在界面上,每个界面都需要引用获得项目完全路径的值,下面采用Request的监听器来实现:
              1.   创建一个Request的监听器类

                public class RequestListener implements ServletRequestListener {

                private HttpServletRequest request;

                @Override
                public void requestInitialized(ServletRequestEvent sre) {
                  request = (HttpServletRequest) sre.getServletRequest();
                  String path = request.getContextPath();
                  String ctx = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
                  request.setAttribute("basePath", ctx);
                }

                @Override
                public void requestDestroyed(ServletRequestEvent sre) {

                }
                }

            1. 在web.xml配置文件中配置:

              <listener>
                    <listener-class>com.cjonline.RequestListener</listener-class>
              </listener>

            2. 在jsp界面引用:  <base href=" ${basePath}">    
            3. 界面或js文件的url都可以使用相对路径。         例如  <a href="jsp/login.jsp">Login </a>    。
  • 相关阅读:
    selenium--下拉列表选择
    Java——基本类型包装类,System类,Math类,Arrays类,BigInteger类,BigDecimal类
    Java——Object类,String类,StringBuffer类
    Java——面向对象进阶(final关键字,static关键字,匿名对象,内部类,四种访问修饰符,代码块)
    Java——面向对象进阶(构造方法,this,super)
    Java——面向对象进阶(抽象类,接口)
    Java——面向对象编程
    java——类型转换,冒泡排序,选择排序,二分查找,数组的翻转
    CentOS7下安装MySQL
    Java——定义类,引用类数据类型,集合类型(array list)
  • 原文地址:https://www.cnblogs.com/lbangel/p/3146349.html
Copyright © 2020-2023  润新知