java怎么取到web服务的根路径

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java怎么取到web服务的根路径相关的知识,希望对你有一定的参考价值。

java获取根路径有两种方式:

1)在servlet可以用一下方法取得:
request.getRealPath(“/”)
例如:filepach = request.getRealPath(“/”)+”//upload//”;
2)不从jsp,或servlet中获取,只从普通java类中获取:
String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
SAXReader() saxReader = new SAXReader();
if(path.indexOf(“WEB-INF”)>0)
path = path.substring(0,path.indexOf(“/WEB-INF/classes”)+16);
// ‘/WEB-INF/classes’为16位
document = saxReader.read(path+filename);
else
document = saxReader.read(getClass().getResourceAsStream(filename));
参考技术A Java取得web工程目录获取方法:
1.可以在servlet的init方法里
String path = getServletContext().getRealPath("/");
这将获取web项目的全路径
例如 :E:\eclipseM9\workspace\tree\
tree是web项目的根目录
2.也可以随时在任意的class里调用:
this.getClass().getClassLoader().getResource("/").getPath();
这将获取到classes目录的全路径
例如 : E:\eclipseM9/workspace/tree/WEB-INF/classes/
这个方法也可以不在web环境里确定路径。
参考技术B 右键点击项目名,点最后一个选项,选path就能看到路径 参考技术C request.getPath();

貌似这个,反正样子差不多 你找找看 (response.getPath())
参考技术D jsp中,request.getContextPath()

在 AppEngine 的根路径上处理 _escaped_fragment_

【中文标题】在 AppEngine 的根路径上处理 _escaped_fragment_【英文标题】:Handling _escaped_fragment_ on root path in AppEngine 【发布时间】:2014-02-21 09:12:17 【问题描述】:

我正在使用 Google App Engine 来托管一个带有 Python 网络服务的 AngularJS 应用程序。根路径 / 设置为返回 index.html,/api/* 请求转到 Python 控制器以进行 web 服务调用,任何其他路径都转到静态资源(图像、视图等)

我正在尝试使用 hashbang/_escaped_fragment_ 技术为搜索引擎索引获取应用程序设置。据我了解,http://www.whatever.com/#!/news 的网址将被搜索引擎转换为http://www.whatever.com/?_escaped_fragment_=/news

编写一些代码来处理该请求不是问题,但是让该代码在根路径上侦听是一个问题,因为它已映射到 index.html

在发出 _escaped_fragment_ 请求时,是否有元标记或其他东西告诉搜索引擎使用不同的路径(不是 /)?

如果没有,Google App Engine 中是否有办法请求/提供 index.html,但如果存在 _escaped_fragment_ 查询参数,则转到控制器处理请求?

目前我发现唯一可行的方法是为根路径设置一个控制器,用于检查 _escaped_fragment_ 参数。如果存在,它会为搜索引擎呈现内容,如果不存在,它会读取 index.html 并将其写入响应。我希望有更好的选择。

【问题讨论】:

【参考方案1】:

您可以简单地将以下内容添加到您的页面,然后处理www.example.com?_escaped_fragment_=

<meta name="fragment" content="!">

来自 Google Developers 制作 AJAX 应用程序可抓取Getting Started 教程:

换句话说,如果您将&lt;meta name="fragment" content="!"&gt; 放入 www.example.com 页面,爬虫会临时将此 URL 映射到 www.example.com?_escaped_fragment_= 并将向您的 服务器。然后,您的服务器应返回相应的 HTML 快照 到 www.example.com


也来自Full Specification 页面,更具体地说来自没有哈希片段的页面部分:

适用以下重要限制:

    元标记只能出现在没有哈希片段的页面中。 只有“!”可能会出现在内容字段中。 元标记必须出现在文档的头部。

【讨论】:

也许我误解了你的答案,但这听起来像是我已经在做的事情。我试图让爬虫向 www.example.com/crawler-prefix/?_escaped_fragment_=/original/path 发出请求 “爬虫前缀”是我想要在这里工作的主要内容。如果无法做到这一点,那么我正在 App Engine 中寻找一种将 / 路径映射到静态文件的方法,除非查询参数存在,在这种情况下我希望它转到控制器。 @user605331 我想我现在理解你了.. 你将不得不在应用程序中处理它,而不是只在app.yaml 中映射它,如果@987654328 没有_escaped_fragment_ 参数@请求,渲染启用 AngularJS index.html 否则为爬虫渲染一些东西.. 好的,那就是我现在正在做的事情。很遗憾没有更好的办法来处理这个案子。 @user605331 对于其他请求,您无论如何都必须这样做.. 那么为什么不为根路径处理它呢?它不是完全静态的网站,否则您将如何生成爬虫所需的页面?!

以上是关于java怎么取到web服务的根路径的主要内容,如果未能解决你的问题,请参考以下文章

在 AppEngine 的根路径上处理 _escaped_fragment_

如何通过Java代码获取tomcat服务器的绝对路径

为啥我的控制器中的根路径映射到 Spring Boot Web 应用程序中的 index.html?

java中怎么获得tomcat路径

java程序读取资源文件时路径如何指定

js中判断空及获取当前服务的根路径