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

一、现象与概念

1. 问题

在Servlet转发到JSP页面时,此时浏览器地址栏上显示的是Servlet的路径,而若JSP页面的超链接还是相对于该JSP页面的地址且该Servlet和该JSP页面不在同一个文件夹下时,则会出现路径混乱问题。

 

2. 绝对路径概念

相对于contextPath(当前Web应用的上下文)的路径。

解决方案:超链接用绝对路径而不是相对路径。若/代表的是站点的根目录,在其前面加上contextPath。

<a href="<%= request.getContextPath() %>/TestServlet">To B</a>

 

二、JavaWeb开发中的'/'含义总结

1. 当前Web应用的根路径

'/'代表http://localhost:8080/contextPath/ :由Servlet来处理的地址

1)转发:request.getRequestDispatcher("/path/b.jsp").forword(request, response);

2)web.xml文件中映射Servlet访问路径

<servlet-mapping><servlet-name>TestServlet</servlet-name><url-pattern>/TestServlet</url-pattern></servlet-mapping>

3)各种定制标签中的'/'。

 

2. Web站点的根路径

'/'代表http://localhost:8080/ :由浏览器来处理的地址

1)超链接:<a href="/TestServlet">To B</a>

2)form标签中的action:<form action="/b.jsp">

3)重定向:response.sendRedirect("/b.jsp");

 

3.站点根目录和css路径问题 (jsp是服务器端程序,地址是变化的,引用时一般用站点根目录的相对路径)
我们称类似这样的相对路径/test/…. 为相对于站点根目录 的相对路径 。
当在jsp中引入css时,如果其相对路径相对于当前jsp文件的,而在一个和这个jsp的路径不一样的servlet中forward这个jsp时,就会发现这个css样式根本没有起作用。这是因为在servlet中转发时css的路径就是相对于这个servlet的相对路径而非jsp的路径了。所以这时候不能在jsp中用这样的路径:<link href="one.css" rel="stylesheet" type="text/css">或者<link href="../../one.css" rel="stylesheet" type="text/css">类似href="one.css"和../../one.css的html相对路径是相对于引用这个css的文件(a.jsp)的相对路径 。而在servlet中转发时就是相对于这个servlet的相对路径了,因为jsp路径和servlet路径是不一样的 ,所以这样的引用肯定是出错的。
所以这个时候,要用站点根目录,就是相对于http://192.168.0.1/的目录,以“/”开头。
因此上述错误应更正为href=”/test/one.css” 类似的站点根目录的相对目录。这样在servlet转发后和jsp中都是相对于站点根目录的相对路径 ,就能正确使用所定义的css样式了。

 

页面跳转问题:

Forward 高, Redirect 低, 因为Redirect 的流程是这样的, request1 sent to server, server return back to client, 然后

request2 then sent to server. 但是Forward 仅在server side处理, 对client side 是透明的. 由于Redirect 有两次传输, 所以效率低.

范围:
由于对request.setAttribute() 来说, 它携带的对象生存范围只在request内, 所以Redirect 方式会导致request携带的对象丢失.

转载于:https://www.cnblogs.com/sbclmy/p/9053000.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux7 kickstart,Linux运维知识之CENTOS 7 验证KICKSTART文件是否完整方法

本文主要向大家介绍了Linux运维知识之CENTOS 7 验证KICKSTART文件是否完整方法&#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习Linux运维知识有所帮助。功能简介&#xff1a;CentOS 7 包含 ksvalidator 命令行程序&#xff0c;可使用该程序进行确认Kickstart文…

CI项目设计Redis队列

项目开发过程中需要设计提供可平衡的处理多个用户请求的队列。需求&#xff1a;当用户登录后&#xff0c;查看系统中已经登录的管理员队列&#xff0c;然后查看后台管理员的处理能力&#xff0c;如果已经不能处理新的请求&#xff0c;则把该管理员从处理队列中删除&#xff0c;…

c语言在函数中传递指针,[求助]关于文件指针在函数中传递的问题

[求助]关于文件指针在函数中传递的问题我写的一个程序中文件指针在各函数间传递。请各位整理一下思路。/**//* 。。。(开头部分省略) *//* 部分函数省略 *//* 打开号码文件&#xff0c;号码文件必须与该程序放在同一文件夹。*/void OpenFile(char * argv , FILE ** fin , FILE …

担当大任者的九大特征

一、忍得住孤独人生想要获得成功&#xff0c;必须忍得住孤独&#xff0c;尤其是在创业之初&#xff0c;很多时候为了达成目标&#xff0c;可能别人在休息时&#xff0c;我们还一个人在默默无闻的付出&#xff0c;这种过程是非常孤独的&#xff0c;但如果能挺得过去&#xff0c;…

c语言竖等于意思,C语言竖式问题

#include#includeint main(){char str[30];//键盘输入数组scanf("%s",str);int i,j;char sta[50];//字符串输入输出数组int count0;for(i1000;i<9999;i){for(j10;i<99;i){int proi*j;int pro1i*(j%10);int pro2i*(j/10);sprintf(sta,"%d%d%d%d%d",i,…

6章 Models

传统的MVC结构中&#xff0c;有模型这么一个概念。Django中&#xff0c;Models又是怎么一回事呢? 刚才生成的这些乱七八糟的数据迁移就是Django自带的一些应用 INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessio…

android activity之间传递对象,Android Activity之间的数据传递

一、通过startActivity来进行Activity的传值在Android中&#xff0c;如果我们要通过一个Activity来启动另一个Activity&#xff0c;可以使用 startActivity(Intent intent)方法来传入一个Intent对象&#xff0c;这个Intent对象我们可以精确的指定我们需要跳转的Activity上&…

I/O流

1.I/O流1.1 基本概念 I/O就是Input/Output的简写&#xff0c;也就是输入/输出的含义。 I/O流主要指像流水一样源源不断进行读写的状态/过程。 1.2 基本分类 以数据读写的单位不同分为&#xff1a;字节流 和 字符流。 其中字节流主要指以字节为基本单位进行读写的流&#xff0c;…

android蓝牙传输的是字符吗,Android蓝牙接收到的串行数据乱码

我已经通过以下线索了解我的疑问。但是&#xff0c;目前还不清楚。Android蓝牙接收到的串行数据乱码克里斯&#xff0c;这是一个不错的解决方法&#xff0c;你建议。在你提供的解决方案中&#xff0c;附加\ n的解决方案适合我&#xff0c;因为我纯粹将我的PC(MATLAB)中的浮点值…

请谈谈cookie,locaStorage的区别和特点

cookie和locaStorage有什么区别呢&#xff1f; 存储容量&#xff1a; Cookie存储的数据大小有限制&#xff0c;一般在4KB左右&#xff0c; LocaStorage可以存储更大的数据&#xff0c;一般在5MB甚至更多 存储位置&#xff1a; Cookie数据会随着每次HTTP请求自动发送到服务器端…

[UE4]更新UI的三种方式

一、函数绑定 二、属性绑定 只会列出匹配的数据类型。 三、事件驱动更新 啦啦啦啦啦 结论&#xff1a;函数和属性绑定的原理都是每帧都去调用绑定的函数/属性&#xff0c;效率比较低下&#xff0c;一般不推荐使用。事件驱动更新的效率最好&#xff0c;性能最好。 在正式的产品开…

使用handler倒计时

点击button暂停 public class MainActivity extends AppCompatActivity {BindView(R.id.button)Button button;BindView(R.id.first_textview)TextView textView;Handler mHandler;volatile boolean flagtrue;Object objectnew Object();MThread mThread;Overrideprotected voi…

android 编译主机,Android】源码编译 ---zzz

问题解决 参考1)/bin/bash: prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc: 权限不够解决&#xff1a;chmod ax prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc2)/bin/bash: build/core/find-jdk-tools-jar.sh: 权限不够/bin/bash: build/too…

C/C++ 面试题记录

1、new 、 delete 、 malloc 、 free 的区别与关系&#xff1f; new / delete 是C的运算符&#xff0c;malloc / free 是C的标准库函数。 new会调用对象的构造函数&#xff0c;delete会调用对象的析构函数。它们都可用于动态申请内存和释放内存。 对于非内部数据类型的对象而言…

android实现3种定位的切换,Android 滑动定位+吸附悬停效果实现

在前两篇文章中&#xff0c;分别介绍了tablayoutscrollview 和 tablayoutrecyclerview 实现的滑动定位的功能&#xff0c;文章链接&#xff1a;Android 实现锚点定位Android tabLayoutrecyclerView实现锚点定位仔细看的话&#xff0c;这种滑动定位的功能&#xff0c;还可以整体…

用JavaScript语言判断一个三位数是否为水仙花数

// 提示用户输入一个三位数// 如果不是三位数或者不是数字&#xff0c;则提示“非法输入”&#xff1b;// 如果输入合法&#xff0c;判断这个三位数是否为水仙花数。// &#xff08;每一位数的三次方之和等于这个数本身&#xff0c;就是水仙花数。例如&#xff1a;153 370 371 …

unity mmd不支持android,MMD模型导入Unity的解决方案

前言学了Unity后&#xff0c;总是感觉缺少资源&#xff0c;包括人物、物品模型、动作数据、贴图、特效&#xff0c;各种插件&#xff0c;还被骗去学了几天各种美术软件。说起模型和动作数据&#xff0c;就又想到MMD&#xff0c;毕竟有那么现成的资源&#xff0c;虽然不能商用&a…

关于windows cmd的一些便捷应用

在同事的指点下&#xff0c;我学会了一种非常方便的进入路径的方法 在windows文件夹中直接打开到要执行的文件的位置&#xff0c;然后在我的电脑那个路径当中输入cmd 之后&#xff0c;cmd的对话框会弹出来&#xff0c;并且显示在当前路径下&#xff0c;这样&#xff0c;有一些需…

android中的 listview,Android中ListView的初步认识(一)

ListView是安卓开发中常用的组件之一&#xff0c;它的作用是在一个垂直的列表中展现出所需的项目。接下来&#xff0c;我们看一下ListView的实现方法&#xff1a;第一种 是常见的在XML中定义然后在activity中使用findViewById来获取的方式(这个相当基础了&#xff0c;直接代码)…

Tcl 语言改写Java题目-1

Java题目:https://blog.csdn.net/wenzhi20102321/article/details/52274976 Program1. proc fun_1 {x} { if {$x<3} { return 1 } else { return [expr [fun_1 [expr $x - 1]] [fun_1 [expr $x - 2]]] }}puts [fun_1 10] program 2 #判断是不是素数…