在jsp(serlvet)中,页面的"变换"有两种方式,第一重定向,第二转发:

先说重定向,它的调用方式是这样的

response.sendredirect("uri");

特点就是 转换后的uri地址会在地址栏显示不过之前的request里的数据不能传送给新的页面#

重定向就是,让服务器再发一个请求#

如下图,浏览器看到response里面的sendredirect,就会重新发一个请求,那么之前的请求所带的数据自然就没有了#





转发:

实现方式是这样的:

RequestDispatcher dispatcher=request.getRequestDispatcher("b.jsp")
dispatcher.forward(request,response);

它的特点刚好与重定向相反,转发的新的地址不会再浏览器地址栏上出现,不过request的信息在新的页面里仍然可以使用#

大致的示意图如下:

步骤2与步骤3的运行都在服务器内部,它对用户(浏览器)来说是透明的,那么新的地址,肯定不会显示在地址栏上,而且之前的request信息自然就可以用了#



先看项目框架图:

资源引用

我们先看jsp中关于资源的引用

b.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<img width="400" height="300" src="../images/b.jpg" /> 这是第一张<br/>
<img width="400" height="300" src="data:images/b.jpg" /> 这是第二张<br/>
<img width="400" height="300" src="/images/b3.jpg" /> 这是第三张<br/>
<img width="400" height="300" src="<%=request.getContextPath()%>/images/b.jpg" />  这是第四张<br/>
<img width="400" height="300" src="PathTest/images/b.jpg" />  这是第五张<br/>    

当我们直接访问b.jsp时,效果如下

根据上面的图,我们至少能得到一个结论

在jsp中,默认的根路径是并不是项目的地址,而是只到端口号那一层#即   http://ip:port/

因而,我们在jsp中引用图片,js等资源的时候,可以用两种方式

相对地址: 就是第一张图片的样子#

绝对地址: 地址以"/"开始,并且得包括项目名称#访问第四张图片的方式,tomcat容器会解析成<img width="400" height="300" src="/PathTest/images/b.jpg" />  这是第四张<br/>

服务器端跳转

OK我们看第一个例子:

a.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<img width="400" height="300" src="../images/a.jpg" />
<a href="../testServlet">去b页面</a>  

testServlet.java

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //    request.getRequestDispatcher("jsp/b.jsp").forward(request, response);
        request.getRequestDispatcher("/jsp/b.jsp").forward(request, response);
    } 

如果使用服务器跳转,那么默认路径就是当前的项目,因而,上面两种url方式(不管url前面是否有"/")都可以#

(我解释一下,这个默认路径与上文说的jsp的默认路径不是一回事,这里是说,在代码层次,或者说在容器里,跳转到视图时,根路径指的是当前项目的路径#这个大家得明白#)

OK,我们跳转到了b.jsp

看看效果



由于是服务器端跳转,地址还是servlet的,并没有改变#

那么大家想想http://localhost:8900/PathTest/testServlet 在这个地址下(记着是服务器端跳转,"b.jsp"这个页面对用户来说就是透明的,你压根就不知道你到底访问的是那个页面# 另一方面,servlet的地址是:http://localhost:8900/PathTest/testServlet, 目录却是:http://localhost:8900/PathTest)

此时访问图片1的模式 ../images/b.jpg访问的图片地址其实就是:http://localhost:8900/images/b.jpg 怎么可能会有照片?

所以,在项目中,图片一的那种相对路径的方式是没办法两全其美的#

所以最好使用,图片四的访问方式,用绝对路径#

客户端跳转

我们改动servlet,如下:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.sendRedirect("/jsp/b.jsp");
    } 

进入a.jsp,然后点击去b页面,效果如下:

我们把servlet换成:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.sendRedirect("jsp/b.jsp");
    } 

点击去b页面后,地址栏成为http://localhost:8900/PathTest/jsp/b.jsp

显示出图片一与图片四

通过上面的例子,我们又可以得出结论

客户端跳转时,它的路径并不是相对于当前的项目#

所以,如果使用绝对路径,那么就得加上项目名称如下:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       response.sendRedirect(request.getContextPath()+"/jsp/b.jsp");
    }

参考资料:

本文大范围的参考了

http://cxshun.iteye.com/blog/1123913

这篇博客,特此说明,并表示感谢

jsp中的路径与跳转的更多相关文章

  1. 关于在jsp中的路径问题

    前言: jsp作为javaweb开发中常见的视图技术,我们平时在开发项目使用的过程中,经常会导入一些静态资源,比如css\js\jpg.png等图片格式的文件,这些文件的路径成了问题,经常会出现索引不 ...

  2. jsp中超链接路径的写法

    主题 超链接不就是一个地址字符串吗?这能有什么花头? LZSB! 曾经我也是这么想的.... 最近对apache的学习让我对网页中超链接,CSS,js的路径的写法有了一些新的认识. 所以这篇文章主要分 ...

  3. jsp中的路径问题

    在学jsp的时候我每次都遇到路径的问题,每次都不能够说100%的把这搞定,这让我很烦恼,今天下午花了点时间来把路径问题整理了下. 一:首先我们在加载项目(我的项目名称是FinalExam)是的路径是h ...

  4. jsp中的两种跳转方式分别是?有什么区别?

    在JSP中跳转有两种方式 forward跳转:<jsp:forward page ="跳转页面地址"> response跳转:response.sendRedirect ...

  5. Jsp中解决session过期跳转到登陆页面并跳出iframe框架的方法

    1.可以用javaScript解决在你想控制跳转的页面,比如login.jsp中的<head>与</head>之间加入以下代码: <script language=”Ja ...

  6. JSP中的路径

    我的原则 所有路径一律使用绝对路径,就是以"/"开头的或者带host的路径.形如: /imgs/1.jpg <%= request.getContextPath()%> ...

  7. jsp中的setHeader页面跳转备忘录

    1 <!-- response.setHeader("refresh","3;url=你想跳的页面")--> <%-- response.se ...

  8. JSP中的两种跳转方式分别是什么,有什么区别?

    forward跳转:<jsp:forward page ="跳转页面地址"> response跳转:response.sendRedirect("跳转页面地址 ...

  9. JSP中解决session超时跳转到登陆页面并跳出iframe框架或局部区域的方法

    当session会话超时,页面请求被重新定位到了登陆界面.但登录界面在iframe中的解决方案:在登录页面中加入下面的js代码: <script type="text/javascri ...

随机推荐

  1. Bootstrap3 排版-缩略语

    当鼠标悬停在缩写和缩写词上时就会显示完整内容,Bootstrap 实现了对 HTML 的 <abbr> 元素的增强样式.缩略语元素带有 title 属性,外观表现为带有较浅的虚线框,鼠标移 ...

  2. The type org.apache.commons.lang.exception.NestableRuntimeException cannot be resolved.

    最近自己练手写项目时,遇到了这个错,写个文章记录下, The type org.apache.commons.lang.exception.NestableRuntimeException canno ...

  3. Swift完成fizz buzz test

    看到一篇文章上说,很多貌似看过很多本编程书的童鞋连简单的fizz buzz测试都完不成. 不知道fizz buzz test为何物的,建议自行搜之. 测试要求是,编写满足以下条件的代码: Write ...

  4. iOS学习笔记--触摸事件

    最近空闲时间在学习iOS相关知识,几周没有更新文章了,今天总结下这些天的学习内容,也整理下iOS的学习笔记,以便以后查阅翻看- iOS中的事件可以分为3大类型: 触摸事件 加速计事件 远程控制事件 响 ...

  5. Angularjs + Bootstrap 制作的一个TODO List

    看了一个关于Angularjs的视频,视频内容讲解的是如何制作一款TODO list形式的SPA(Simple Page Application,单页面应用).为了增强理解,下面写了一篇文章,用以复习 ...

  6. 根据ccid取得账户,更改某段值再创建账户,返回新的ccid

    CREATE OR REPLACE PACKAGE cux_cuxaprebate_utl IS * =============================================== * ...

  7. Android Multimedia框架总结(十三)CodeC部分之OpenMAX框架初识及接口与适配层实现

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52629598 前言:上篇中介绍O ...

  8. Java学习之继承中的执行顺序详解

    代码块(理解) (1)用{}括起来的代码. (2)分类: A:局部代码块 用于限定变量的生命周期,及早释放,提高内存利用率. B:构造代码块 把多个构造方法中相同的代码可以放到这里,每个构造方法执行前 ...

  9. Python 键盘鼠标监听

    异想天开的想记录一下自己每天的键盘键位走向,于是就在网上搜索了一下相关的实现,然后就发现了一个第三方的库pyHook.封装的很好,我们只需要傻瓜式的调用里面的API就可以了. 下面是我在使用pyHoo ...

  10. 详解EBS接口开发之库事务处理带提前发运通知(ASN)采购接收入库-补充

     A)   Via ROI Create a ASN [ship,ship]  for a quantity =3 on STANDARD PURCHASE ORDER Create  via R ...