页面转发引起文件路径失效

转发和重定向的区别之一是:采用转发,URL不会发生变化。即从一个servlet转发到一个jsp页面,url仍为servlet的地址。这样,原来jsp页面中使用到相对路径的地方要进行修改。否则,是找不到文件的。

      例如:假设jsp页面在project文件夹下,css源文件在project/style文件夹下。

                  从servlet转发到jsp页面的地址为http://localhost:8080/ project/item/Servlet/ShowItemServlet

                   jsp页面中引入css文件的地址为<link rel="stylesheet"href="style/css.css">,

                  这时,就出现了调用页面的url和被调用页面的url不一致,相当于css文件的地址为http://localhost:8080/ project/item/Servlet/ShowItemServlet/syle/css.css ,这样,css文件自然是无法找到的。

 

  解决办法:

      1. 修改页面中元素的路径。

         将引入的css的链接改为<link rel="stylesheet"href="../style/css.css">,即先由servlet的地址退回到project目录下,这样,就找到了project/style/css.css文件了。

         缺点:如果servlet的路径较深,这样做容易出现错误,并且,页面中所有的链接全部都要进行这样的修改,所以,不推荐这样的修改方式。

  1. 使用html的<base>标签。

         在html的头部加入<base href="http://localhost:8080/project/">,其他引入文件的地址不变,仍为<link rel="stylesheet" href="style/css.css">,这样,css文件的路径是正确的。

        

       默认情况下,页面中的相对路径,都是相对于当前URL请求的地址去寻找资源的。html中的base标签,用来设置当前页面的默认起始路径,设置了base标签后,浏览器不再使用当前文档的URL,而是使用指定的url来解析页面中所有的相对URL。

       原理就是上面讲的这些,但是,在实际的项目中,base标签中的url一般不会直接写死在代码中,而是通过动态获取得到。

       String path =request.getContextPath();

      String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

      <base href="basePath">



 

     Request.getcontextPath: 得到项目的名字     /project 

     Request.getSchema()       返回页面使用的协议名称        这里使用的是http协议  

     Request.getServerName()   返回当前页面所在的服务器的名字     如果是本机,就为localhost   

    Request.getServerPort()   返回当前页面所在的服务器使用的端口

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值