jsp相对路径绝对路径

很长一段时间纠结过JSP中的相对路径和绝对路径,也研究过一段时间,今天趁着有点时间,记下来,也有大家分享一下。

1)我们先来理解一下相对路径

首先还是我们的开始,建一个WEB项目,只是测试一下而已,名称就随便啦。我的项目结构如下:



哈哈,经常看动作片的应该知道,donnieYen是哪个家伙啦,就是丹哥。弄几张他的照片放放。

就只有两个页面。两个页面都很简单的,只有图片和一个链接。

其中a.jsp中有内容:

Html代码  收藏代码

<img width="400" height="300" src="../images/donnieYen.jpg" /> 

<a href="../testServlet">去b页面</a> 

  这里的链接是调用servlet,这里大家就自己起名字啦,在web.xml中映射一下就OK了。

b.jsp内容:

Html代码  收藏代码

<img width="400" height="300" src="../images/donnieYen2.jpg" /> 

注意,我们这里都是用到相对路径,..是最好的证明了。

而我们的TestServlet很简单,只是一句跳转的代码:

Java代码  收藏代码

req.getRequestDispatcher("jsp/b.jsp").forward(req, resp); 

注意,这里我们直接写jsp/b.jsp的原因是因为在servlet里面,request跳转的路径是相对于当前项目的,所以我们不需要..这样来表示上一级目录的。由于它默认是在当前项目下,所以我们用

Java代码  收藏代码

req.getRequestDispatcher("/jsp/b.jsp").forward(req, resp); 

这样的效果和上面是一样的。



下面我们就来看看效果啦,当我们打开a.jsp



效果这样,简单明了,当我们点击"去b页面"时,会调用servlet进行跳转:

我们看到效果:



啥意思呢?这个是chrome下的没有图片时的默认效果,IE下会不一样。但表明它是找不到图片的。

但我们直接来访问b.jsp,可以看到:



我们可以看到。这表明它的路径是没问题的。但为什么servlet跳转的时候会有问题呢?



这个我们需要来看看我们访问的路径了。

当我们点击链接进行跳转时,是访问servlet,此时浏览器的URL为:

Html代码  收藏代码

http://localhost:8080/Test/testServlet 

    此时转到我们的b.jsp,这里怎么办呢?取图片的时候..返回上一层,也就是项目目录下Test的上一层,是什么东西,我们就不知道啦。反正在那个目录下是没有images文件夹的。如果我们非要通过servlet来进行跳转,那么我们能怎样呢?很简单,我们只要把b.jsp修改成:

Html代码  收藏代码

<img width="400" height="300" src="data:images/donnieYen2.jpg" /> 

这样就OK了。在当前目录下,也就是Test目录下进行访问images文件夹,这肯定没问题啦。

那么我们点击跳转的时候就可以看到如上面直接访问时的效果了,图片出来了。



但这样又有问题了,当我们直接访问b.jsp的时候,它又没了,因为我们直接访问的时候,浏览器的URL是:

Html代码  收藏代码

http://localhost:8080/Test/jsp/b.jsp 

而此时的images也就是jsp目录下的images目录,哪来的images目录,所以也就不显示啦。



而如果我们希望这两种方法都可以搞定,我们要怎么做呢?

其实也简单,只要用绝对路径就OK了,注意,这里的绝对路径不同于HTML中的绝对路径,HTML中的绝对路径是由浏览器来进行解析的,它会包括IP地址和端口信息,而我们JSP的绝对路径是由容器来解析的,它默认是当前的访问地址加端口,所以那前面的一段就不用我们管了,我们只需要确定项目路径即可。

那究竟怎么做呢?

我们直接看代码,我们把b.jsp改成下面的形式:

Html代码  收藏代码

<img width="400" height="300" src="<%=request.getContextPath() %>/images/donnieYen2.jpg" /> 

然后我们通过两种方式来访问:

点击链接访问:



直接访问b.jsp:



两种方式都没问题,这证明我们的路径是可以生效的。

一般情况下,为了避免不必要的麻烦,我们通过都用这种方式来处理那些链接,这样可以避免不同访问方式会出现链接不正常的问题。



2)相对路径和绝对路径大家应该理解了吧,下面有一种跳转的方式,就是客户端跳转,sendRedirect跳转,这个跳转的路径跟我们前面的request的跳转不一样,它不是相对于我们的项目的,所以我们在跳转的路径中不能按照request中的逻辑来进行处理。

我们来看看按照前面request的路径来进行请求:

Java代码  收藏代码

resp.sendRedirect("/jsp/b.jsp"); 

这样访问的结果是什么?不知道,那我们来看看。



熟悉的404错误。什么?不熟悉,那就杯具啦。慢慢就熟悉了。

找不到页面,那怎么办,说明我们的路径出错啦,我们改一下。

Java代码  收藏代码

resp.sendRedirect("jsp/b.jsp"); 

  下面的结果呢:



没问题呢。什么原因呢?



实际上是因为sendRedirect是客户端跳转,它的路径并不是相对于当前的项目,如果我们以绝对路径/来进行跳转的话,我们需要指定项目名,在这里也就是Test,跳转的路径也就是:



Java代码  收藏代码

/Test/jsp/b.jsp 

这样才可以进行正确的跳转。

查看图片附件

jsp相对路径绝对路径的更多相关文章

  1. JSP Servlet 路径解析 路径设置

    转自:http://ethen.iteye.com/blog/800415 在用JSP和Servlet编写Web应用时,经常遇到的问题就是找不到.do路径,或者.do路径不能解析,其实归根到底就是Se ...

  2. 自建目录中jsp页面访问servlet路径出错404

    ---恢复内容开始--- 自建目录中jsp页面访问servlet路径出错404 使用eclipse建立的项目,总是会遇到路径问题,比如jsp页面访问servlet,jsp在默认的路径.jsp在自建目录 ...

  3. jsp篇 之 jsp页面中的路径问题

    jsp页面中的路径问题: 一般情况下,jsp中路径问题是和我们之前在servlet中讨论的html里面的路径问题是一 样的,但是在[jsp中可以动态获得该项目的url]. 如果在jsp页面的上面写了这 ...

  4. jsp中的绝对路径、相对路径和访问jsp的方式

    1.jsp的绝对路径 绝对路径在复制jsp时不用修改路径都会正常显示,但是绝对路径${pageContext.request.contextPath}只有jsp可以识别 例如:相对路径:image/l ...

  5. Servlet跳转到JSP页面后的路径问题相关解释

    一.现象与概念 1. 问题 在Servlet转发到JSP页面时,此时浏览器地址栏上显示的是Servlet的路径,而若JSP页面的超链接还是相对于该JSP页面的地址且该Servlet和该JSP页面不在同 ...

  6. jsp 中的绝对路径和相对路径 ./ 和 ../的区别?

    原文地址! https://www.cnblogs.com/brucetie/p/4109913.html 1. 相对路径 相对路径,当前的文件,以根目录为基准,相对于另一个文件的位置. 2.绝对路径 ...

  7. JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址

    在写java程序时不可避免要获取文件的路径...总结一下,遗漏的随时补上 1.可以在servlet的init方法里 String path = getServletContext().getRealP ...

  8. javaWeb项目中的路径格式 请求url地址 客户端路径 服务端路径 url-pattern 路径 获取资源路径 地址 url

    javaweb项目中有很多场景的路径客户端的POST/GET请求,服务器的请求转发,资源获取需要设置路径等这些路径表达的含义都有不同,所以想要更好的书写规范有用的路径代码 需要对路径有一个清晰地认知 ...

  9. C#中网站根路径、应用根路径、物理路径、绝对路径,虚拟路径的区别

    C#中网站根路径,请站点的最外一层 /表示 应用根路径 ~/表示,有时候C#程序路径并不是网站路径 物理路径 server.mappath("~/") 是指应用程序放在服务器硬盘的 ...

  10. 根据图片的路径(绝对路径/相对路径都可以),生成base64的

    根据图片的路径(绝对路径/相对路径都可以),生成base64的 <!DOCTYPE html> <html> <head> <meta charset=&qu ...

随机推荐

  1. SQL布尔盲注

    看不到回显时使用盲注 布尔盲注 在进行SQL注入时,web页面仅返回True和False 布尔盲注会根据web页面返回的True或者False信息,对数据库中的信息,对数据库中的信息进行猜解,并获取数 ...

  2. 使用easyexcel导入62个字段,十万加行数的excel

    使用easyexcel导入62个字段,十万加行数的excel 1️⃣ 准备工作 1. 版本对应 在easyexcel官网的常见问题栏中往下滑找到 2. 下载jar包 maven项目不想多说,在pom. ...

  3. PHP常用类

    PHP常用类 一.分页类 <?php /** * 分页类 * 调用方式: * $p=new Page(总条数,显示页码链接数量,当前页码,每页显示条数,[链接]); * print_r($p-& ...

  4. 音频处理实用AI工具

    最近在做音频处理相关的工作,主要有以下几个好用的工具. 1. 语音转文字--whisper 这是一款由OpenAI开发的语音转文字工具,项目地址位于:openai/whisper. 这个工具是用来生成 ...

  5. 限流设置之Nginx篇

    question1:为什么用到Nginx,Nginx有什么功能? 1.反向代理(建议先看正向代理,反向代理则是同样你要与对方服务器建立连接,但是,代理服务器和目标服务器在一个LAN下,所以我们需要与代 ...

  6. Intellij IDEA 中 .properties文件中文乱码

    在别的地方显示正常的 application.properties 文件,放到 idea 中就会有乱码,如下图所示 idea 右下角编码那里还是灰色的,不能更改 解决方法 点开 idea 的 sett ...

  7. ASP.NET Core分布式项目实战(Consent Controller Get请求逻辑实现)--学习笔记

    任务20:Consent Controller Get请求逻辑实现 接着上一节的思路,实现一下 ConsentController 根据流程图在构造函数注入 IClientStore,IResourc ...

  8. NC26212 小石的签到题

    题目链接 题目 题目描述 小石和小阳玩游戏,一共有 \(n\) 个数,分别为 \(1 \sim n\) .两人轮流取数,小石先手.对于每轮取数,都必须选择剩下数中的任意一个数 \(x\) ,同时还要取 ...

  9. 惠普CP1025 因转印离合器导致打印不全大片空白的问题

    问题症状 自检只打印出一部分, 后面大部分都是空白. 如果是碳盒缺粉, 应该是均匀地浅或者空白, 如果是成像鼓的问题, 应该是从上到下成条状的不均匀, 这样显示一节后空白的情况是没见过, 上网查有类似 ...

  10. 【Unity3D】表面着色器

    1 前言 ​ 固定管线着色器一.固定管线着色器二 中介绍了 ShaderLib 的基本用法,本文将接着讲解表面着色器(Surface Shader)的用法.固定管线着色器基于 ShaderLib 命令 ...