Html/Jsp页面中的路径,是供浏览器使用的。“/”代表的是服务器根目录,一个服务器会有多个web应用,所以请求资源时需要加应用名才能正确访问。

页面中使用的相对路径,也是由浏览器根据当前页面的url或<base>元素解析成完整请求路径的。

页面中使用路径的常用方式如下:

1.当前应用的根路径+静态资源的相对路径:

<link type="stylesheet" href="${pageContext.request.contextPath}/satic/ css/common.css">
<form action="${pageContext.request.contextPath}/servlet/login" method="post">

浏览器解析时会将”/”解析为服务器。如果不加当前应用的根路径,有可能会错误地把static当作应用名,取决于部署时path的设置。所以最好统一添加应用的根路径。

获取当前应用的根路径:

  EL表达式:${pageContext.request.contextPath};

  JSP:<% =request.getContextPath() %>

若工程文件就是在根目录下,通过request.getContextPath()返回的字符串为空。

2.当前应用的绝对路径+静态资源的相对路径:

<%@ page language="java" pageEncoding="GBK" contentType="text/html;charset=gbk" isELIgnored="false"%>
<%
  String appContext= request.getContextPath();// 获取当前应用的根路径构建当前应用的绝对路径(/appName)
  String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + appContext ;
  // 将basePath存入pageContext中,将来用EL表达式读取
  pageContext.setAttribute("basePath",basePath);
%>
<html>
<body>
<a href="${pageScope.basePath}/jsp/login.jsp">
</body>
</html>

缺点:每个请求前都要加${pageScope.basePath}

 

3.利用<base>标签

默认情况下,页面中相对路径的请求都是相对于当前页面的url发出的;如果当前页面存在<base>标签,则请求是相对<base>中设定的值。

<%@ page language="java" pageEncoding="GBK" contentType="text/html;charset=gbk" isELIgnored="false"%>
<%
String appContext= request.getContextPath();// 获得当前应用的根路径
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() + appContext ;
%>
<html>
<head>
<base href="<%=basePath%>"> <!--设定base标签-->
</head>
<body>
<a href="/jsp/login.jsp">Login</a>
</body>
</html>

缺点: 对于被包含的文件依然无效。

Servlet内所有的路径都要用绝对路径,即以”/”开头,代表当前的web应用。

req.getRequestDispatcher("/pages/login.jsp").forward(req, resp);转发路径中”/”代表当前应用。   

jsp/html页面中的路径的更多相关文章

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

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

  2. JSP在项目中的路径问题

    一.JSP中获得当前应用的相对路径和绝对路径  根目录所对应的绝对路径 : request.getRequestURI() 文件的绝对路径 : application.getRealPath(requ ...

  3. java爬虫系列第三讲-获取页面中绝对路径的各种方法

    在使用webmgiac的过程中,很多时候我们需要抓取连接的绝对路径,总结了几种方法,示例代码放在最后. 以和讯网的一个页面为例: xpath方式获取 log.info("{}", ...

  4. Servlet中相对路径与绝对路径

    相对路径与绝对路径: 相对路径:相对路径指的是相对于当前文件所在目录的路径! http://localhost:8080/servlet01/ http://localhost:8080/servle ...

  5. Java Web中相对路径与绝对路径的分析

    一.相对路径与绝对路径 1.相对路径: 相对路径指的是相对于当前文件所在目录的路径! 相对路径易出问题: 当在页面间相互跳转时不会产生问题: 当从Servlet中转发到指定页面时,服务器会相对于当前S ...

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

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

  7. JSP、Servlet中的相对路径和绝对路径 页面跳转问题

    转自:http://blog.csdn.net/wym19830218/article/details/5503533/ 1.JSP.Servlet中的相对路径和绝对路径 前提:假设你的Http地址为 ...

  8. jsp页面中引入文件路径问题的解决方案(使用request获取项目路径)【原创】

    在项目页面中,总会引入一些js和css,相对路径or绝对路径的选择就显得至关重要了!下面是项目中遇到的问题和解决方案,做一下记录! 环境: myEclipse创建工程,使用jsp+css+js,项目目 ...

  9. 在一个jsp页面中引用另一个jsp文件的路径的问题

    为了提高代码的重用性,经常需要在一个jsp页面中引用另一个jsp文件的代码.关于引用时的路径的问题.下面只介绍动态引用的,我觉得静态引用的应该也一样. 相对路径: 一.在同一个文件夹下,a.jsp中引 ...

随机推荐

  1. maven的web项目手工发布

    网上有很多人都认为maven的web项目发布时,要用这个命令那个命令,太麻烦了,用纯手工打造发布更为方便. 第一步,导出你所在项目maven的依赖包. 打开cmd窗口执行命令:mvn dependen ...

  2. Hadoop之RPC简单使用(远程过程调用协议)

    一.RPC概述 RPC是指远程过程调用,也就是说两台不同的服务器(不受操作系统限制),一个应用部署在Linux-A上,一个应用部署在Windows-B或Linux-B上,若A想要调用B上的某个方法me ...

  3. [Python]再学 socket 之非阻塞 Server

    再学 socket 之非阻塞 Server 本文是基于 python2.7 实现,运行于 Mac 系统下 本篇文章是上一篇初探 socket 的续集, 上一篇文章介绍了:如何建立起一个基本的 sock ...

  4. folly教程系列之:future/promise

         attension:本文严禁转载. 一.前言 promise/future是一个非常重要的异步编程模型,它可以让我们摆脱传统的回调陷阱,从而使用更加优雅.清晰的方式进行异步编程.c++11中 ...

  5. node.js系列(模块):request模块实现与php的通讯

    app.js: var express = require('express'); var request = require('request'); var app = express(); /*r ...

  6. 获取camera截屏图片

    Camera camera; SpriteRenderer sprRender; Texture2D t2d = New Texture2D(1300, 760, TextureFormat.RGB2 ...

  7. STM8驱动HX711

    普及:HX711AD一款专为高精度电子秤而设计的 24 位 A/D 转换器芯片:                 获取数据方法:两个普通IO      DOUT输入:GPIO_Mode_In_FL_N ...

  8. CF #edu 11 C. Hard Process

    题目链接:http://codeforces.com/problemset/problem/660/C 大意是给一个01数组,至多可以将k个0变为1,问最后数组中最长能有多少个连续的1,并输出. 问题 ...

  9. css过渡模块和2d转换模块

    今天,我们一起来研究一下css3中的过渡模块.2d转换模块和3d转换模块 一.过渡模块transition (一)过度模块的三要素: 1.必须要有属性发生变化 2.必须告诉系统哪个属性需要执行过渡效果 ...

  10. zabbix主动上报的python脚本

    本代码linux.window平台通用. 不过我遇到一个Windows2008缺少运行库的提示,可能这个是Python3.6开发的.需要安装vc2015运行库吧.我没调试成功. linux平台还可以监 ...