当前路径_[JSP] 07 JSP 路径问题

首先先明确一下下列URL的
假设一个URL是这样的losthost:8080/myservlet/path
服务器根路径:losthost:8080/
项目根路径:losthost:8080/myservlet/
明确了服务器根路径和项目根路径之后,我们就可以开始学习后面的知识了
servlet路径问题
请求转发和重定向的相对路径写法总结:
Servlet重定向jsp
resp.sendRedirect("jsp的相对路径/servlet的别名");//重定向jsp页面
Servlet请求转发jsp
req.getRequestDispatcher("jsp的相对路径/servlet的别名")
.forward(req, resp);//请求转发到jsp页面
服务器根目录
服务器的webapps目录路径 localhost:8080/
项目根目录
服务器的webapps目录下项目路径 localhost:8080/jsp/
注意:
以上两种写法其实都是相对路径,相对路径指的是从当前请求路径查找jsp所经过的路径。
请求转发和重定向的绝对路径写法总结:
重定向:
在重定向中的路径中第一个/表示服务器根目录。
示例:
resp.sendRedirect("/虚拟项目名/资源路径");//重定向jsp页面
请求转发:
在请求转发中第一个/表示项目根目录
示例:
tDispatcher("/资源路径").forward(req, resp);//请求转发到jsp页面
jsp路径问题
精华总结:
- 在jsp页面中进行资源之间的跳转时,使用绝对路径 。
- 在jsp中路径中的第一个/表示服务器根目录。
- 在Myeclipse中创建的jsp页面会自动生成路径处理代码basePath而basePath的值为当前项目 根目录。
- request.getSchema()返回的是当前连接使用的协议,一般应用返回的是http、SSL返回的是https;
- request.getServerName()返回当前页面所在的服务器的名字;
- request.getContextPath()返回当前页面所在的应用的名字。
问题:
在jsp页面中进行资源之间的跳转时,如果书写的是相对路径这样会造成如果当前文件的路径发生变更,从当前路径查找资源的相对路径都要重新进行书写。
解决:
将相对路径编程绝对路径
使用:
在jsp中路径中的第一个/表示服务器根目录。
示例:
<a href="/虚拟项目名/资源路径">访问关键字</a>
注意:
Myeclipse
创建的jsp页面会自动生成路径处理代码basePath
而basePath的值为当前项目根目录,并且在head标签中使用了
<base href="<%=basePath%>">
相当于将当前页面的资源全部默认定位为从项目根目录开始查找,我们就不需要写第一个/了
IDEA
需要手动输入或者更改模板

页面报错处理

注意:
basePath方式和添加/方法只能二选一。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
System.out.println(basePath);
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'path.jsp' starting page</title><!-- 问题:在jsp页面中进行资源之间的跳转时,如果书写的是相对路径这样会造成如果当前文件的路径发生变更,从当前路径查找资源的相对路径都要重新进行书写。解决:将相对路径编程绝对路径使用:在jsp中路径中的第一个/表示服务器根目录。示例:<a href="/虚拟项目名/资源路径">访问关键字</a>注意:在Myeclipse中创建的jsp页面会自动生成路径处理代码basePath而basePath的值为当前项目根目录,并且在head标签中使用了<base href="<%=basePath%>">相当于将当前页面的资源全部默认定位为从项目根目录开始查找,我们就不需要写第一个/了注意:basePath方式和添加/方法只能二选一。--></head><body>我是path.jsp<a href="a/a.jsp">a.jsp</a></body>
</html>

相关文章:

CPU时间戳获取
inline long long timt(){long long p; int&a*(((int*)&p)1);__asm__ __volatile__("rdtsc":"a"(p),"d"(a));return p; } 因为在64位CPU上rdtsc出来的结果仍然是在%eax和%edx,而%rax却不是由%eax和%edx拼起来的(反正我试了它没用...也许…

NYOJ 366 D的小L
地址:http://acm.nyist.net/JudgeOnline/problem.php?pid366 方法;用next_permutation(pɝmjʊteʃə)来求解,递归调用代码 1 #include<stdio.h>2 #include<algorithm>3 using namespace std;4 int main(…

MySQL 语句整理 2019-5-3
MySQL 语句整理 在整理完Oracle的一些常见用语句后,由于MySQL的语法跟Oracle略有不同,随跟PN的MySQL视频进行了间接整理. 查询薪水大于1800, 并且部门编号为20或30的员工sql select deptno,ename,sal from emp where sal > 1800 and (deptno 20 or deptno 30); and 优先级…

联想e580没有声音_现在你可以购买通过 Linux 认证的联想 ThinkPad 和 ThinkStation
曾经有一段时间,ThinkPad 是 Linux 用户的首选系统。但那是在 ThinkPad 还是 IBM 的产品的时候。来源:https://linux.cn/article-12283-1.html作者:Abhishek Prakash译者:Xingyu.Wang曾经有一段时间, ThinkPad 是 Linu…

linux平台下防火墙iptables原理(转)
原文地址:http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646466.html iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的&a…

SQL语法大全
SQL语句大全 --语 句 功 能--数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库表中删除数据行UPDATE --更新数据库表中的数据--数据定义CREATE TABLE --创建一个数据库表DROP TABLE --从数据库中删除表ALTER TABLE --修改数据库表…

Node.js的url模块简介
什么是URL URL是Uniform Location Resource的缩写,翻译为“统一资源定位符”,也就是描述资源位置的固定表示方法。被URL描述的资源可以位于互联网上,也可以位于本地。 URL的组成结构 基本URL包含模式(或者成为协议)&am…

python游戏结束显示分数代码_当游戏循环在Python中运行时,多线程来显示游戏分数?...
我想根据比赛时间的推移得分。为此,我想让两个循环同时运行。游戏循环和得分循环,每1.5秒加1。当我运行程序时,分数不会出现。我是否正确使用多线程?这是最好的办法吗?为了简单起见,我只发布了相关代码。谢…

NOIP2015解题报告 By ljt12138
Day1t1 幻方 练过的一道题,简单模拟,用二维数组存储,ij两个游标记录横纵坐标,利用题目条件改变坐标直到填入n个数即可。复杂度O(n^2) AC Day2t2 图的最小环 首先抽象出图论模型。每个人对应点,传输对应边。因为自己…

设计模式笔记——Adapter
适配器模式Adapter 将一个类的接口转换成用户希望的另外一个接口。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用的环境要求不一样的情况。 package adapter.pattern; /*** * author Real H LI**/ public class Existed {public void OldRequest(){Sy…

iOS12-crash错误-reason: 'UITableView failed to obtain a cell from its dataSource'
错误原因: cellForRowAtIndexPath函数返回了nil override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {let cell tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: in…

with as python_python - with as的用法
摘自:http://www.cnblogs.com/DswCnblog/p/6126588.htmlWith 是什么?有一些任务可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取…

wcf系列学习5天速成——第四天 wcf之分布式架构(转载)
今天是wcf系列的第四天,也该出手压轴戏了。嗯,现在的大型架构,都是神马的, nginx鸡群,iis鸡群,wcf鸡群,DB鸡群,由一个人作战变成了群殴....... 今天我就分享下wcf鸡群,高…

检测jQuery.js是否已加载的判断代码
转载自http://www.jb51.net/article/27185.htm 测类、方法、变量或属性是否已存在,这是Javascript编程基础知识。在这里我们就是要检测jQuery()或$()函数是否存在 当然,该方法不局限于jQuery的检测,对与任何Javascript变量或函数都是通用的。…

Java中常见的锁简述
在Java的应用中,或多或少的都会接触到一些锁,那么问题就来了,在Java中,常见的锁有哪些,都有什么样的作用?? 这里给大家简单的简述一下这些学常见的锁。 本文件所涉及到的锁: 1.公平锁…

加了好友怎么还掉血_微信聊天窗口出现风险提醒,无法添加好友解决办法
再更,你想马上解封,你得有朋友。没有朋友,你就等个十天半个月!更新一下 帖子浏览人挺多的,有问题可以在评论里相互交流,下面是原文:先让我说一句脏话:傻x微信风控系统 终于特么的聊天…

[小明爬坑系列]AssetBundle原理介绍
一.简介 Assetbundle 是Unity Pro提供提供的功能,它可以把多个游戏对象或者资源二进制文件封装到Assetbundle中,提供了封装与解包的方法使用起来很便利。 二.移动平台特点 Assetbundle是可以把预制,文件以及场景都打包到Assetbundle中去的,但是在移动平台…

Ubuntu16.04菜单栏侧边栏不显示
2019独角兽企业重金招聘Python工程师标准>>> (1)只有桌面上显示一些原有的文档或图片。但打开文档或者图片后也是没有窗口菜单栏,这样连关闭都没法点,快捷AltF4也没有反应。而且鼠标点击拖动不了…

C 语言中的 strtok 调用小技巧
1 #include <stdio.h>2 #include <string.h>3 4 char *my_strtok(char *buf, char *delims)5 {6 static int first 1;7 if(first){ //8 first 0; // 互斥操作,确保后面代码仅在本次调用执行9 return strtok(buf, delims); 10…

powershell连接数据库_PowerShell 连接SQL Server 数据库
PowerShell 通过ADO.NET连接SQL Server数据库,并执行SQL脚本。工作中整理的一小段脚本,后来没有用上,先记录在这里:建立数据库连接查询返回一个DataTatble对象执行一条SQL语句通过事物执行多条SQL语句## 建立数据库连接.#function…

GDB调试进阶
GDB 调试 ------------------------------------------------------------------------------- gdb 帮助文档 help -- 查看 gdb 的命令种类 help <CmdType> -- 查看 CmdType 种类的 gdb 命令 apropos <keyWord> -- 查看关键字 keyWord 的相关命令 info <keyWord…

RubyGems 库发现了后门版本的网站开发工具 bootstrap-sass
安全研究人员在官方的 RubyGems 库发现了后门版本的网站开发工具 bootstrap-sass。该工具的下载量高达 2800 万次,但这并不意味着下载的所有版本都存在后门,受影响的版本是 v3.2.0.3,研究人员呼吁用户尽可能快的更新,认为可能有数…

读大叔深入理解javascript(2)
Module模式的应用: var Caculator function(eqt){var box document.getElementById(eqt);return {add:function(x,y){return xy;}} }; var a new Caculator(11); a.add(1,3); // return 4 这种方式每次都需要new 一下,也就是说每个实例在内存里都是一…

android 无法接收广播_别告诉我你不认识Android中广播接收者(二)
前面我们了解了什么是广播接收者与广播接收者的创建,这一次我们要接着继续去了解广播接收者的相关知识,这些知识包括广播接收者的注册、自定义广播与广播的类型。当我们学习完广播接收者之后,该如何才能让它起到作用呢?还有广播接…

jQuery中$(function(){})与(function($){})(jQuery)的区别
首先,这两个函数都是在页面载入后执行的函数,其中两者的区别在于: 在jQuery中$(function(){})等同于jQuery(function(){}),另一个写法为jQuery(document).ready(function(){ }),在DOM加载完成之后立即执行,…

UITableView注意点
在iOS应用中,UITableView应该是使用率最高的视图之一了。iPod、时钟、日历、备忘录、Mail、天气、照片、电话、短信、 Safari、App Store、iTunes、Game Center⋯几乎所有自带的应用中都能看到它的身影,可见它的重要性。然而在使用第三方应用时ÿ…

083、Prometheus架构(2019-05-05 周日)
参考https://www.cnblogs.com/CloudMan6/p/7692765.htmlPrometheus 是一个非常优秀的监控工具,准确的说,应该是监控方案。Prometheus 提供了监控数据搜集、存储、处理、可视化和告警一整套的解决方案。Prometheus 重要组件的架构如下:Prometh…

自动获取mysql建表语句_脚本工具---自动解析mysql建表语句,生成sqlalchemy表对象声明...
常规建表语句:CREATE TABLE test_table (id int(11) NOT NULL,name char(64) NOT NULL,password char(64) NOT NULL,PRIMARY KEY (name,id)) ENGINEInnoDB DEFAULT CHARSETutf8 COMMENTtest;解析脚本代码:# coding:utf-8import redeftable_design_transf…

对云风 cstring 第二次解析
前言 从明天起 关心粮食和蔬菜 我有一所房子 面朝大海 春暖花开 本文前提条件 1.了解 posix 线程 2.了解 原子操作 3.具备简单C基础,或者 你也敲一遍. 如果上面不太清楚,你可以翻看我以前的博客,或者百度搜索. 结论 1.云风前辈的 玩具 cstring 有点坑, 内存管理很随意(也可能时…

C# 获取当前路径方法
//获取包含清单的已加载文件的路径或 UNC 位置。 public static string sApplicationPath Assembly.GetExecutingAssembly ( ).Location; //result: X:\xxx\xxx\xxx.dll (.dll文件所在的目录.dll文件名) //获取当前进程的完整路径,包含文件名(进程名)。 string st…