当前位置: 首页 > 面试题库 >

获取Web应用程序上下文的URL(基本URL)

刘修能
2023-03-14
问题内容

有时,您需要在servlet / JSP /基于的任何内容中构造指向Web应用程序上下文的完整URL HttpServletRequest。类似于
**http://server.name:8080/context/** 。Servlet API没有实现此目的的单一方法。

直接的方法是将所有URL组件附加到StringBuffer,例如

ctxUrl = sb.append(req.getScheme()).append("://")
.append(req.getgetServerName()).append(":")
.append(req.getServerPort()) etc

我想知道这种选择是否有问题(速度快10倍):

ctxUrl = req.getRequestURL();
ctxUrl = ctxUrl.substring(0, ctxUrl.lastIndexOf("/")));

上述两种方法是否 总是会 产生相同的结果?


问题答案:

它称为“基本URL”(您可以在HTML <base>标记中使用的一个)。您可以按以下方式获取它:

StringBuffer url = req.getRequestURL();
String uri = req.getRequestURI();
String ctx = req.getContextPath();
String base = url.substring(0, url.length() - uri.length() + ctx.length()) + "/";

您的ctxUrl.substring(0, ctxUrl.lastIndexOf("/")));方法将对包含多个文件夹的URL失败http://server.name:8080/context/folder1/folder2/folder3



 类似资料:
  • 设置如下--我有一个定时任务,它将发送验证电子邮件,以便用户: 如果我可以在这里设置thymeleaf模板解析器来处理这些链接,也会有所帮助,但为此我需要,它需要的实例。

  • 问题内容: 有没有办法在Spring应用程序中静态/全局地请求ApplicationContext的副本? 假设主类启动并初始化了应用程序上下文,它是否需要通过调用堆栈将其向下传递给需要它的任何类,或者是否有一种方法可以让类要求先前创建的上下文?(我认为必须是单身人士?) 问题答案: 如果需要访问容器的对象是容器中的Bean,则只需实现BeanFactoryAware或ApplicationCon

  • 我想在Java Spring boot中获取我的应用程序的当前url。但问题是,我想从类而不是从中获得它。我试图从获取这个,但我无法将其包导入我的类。 请帮我得到我的网站的网址,不应该硬编码。或者如果有一种方法可以使用到我的util类。

  • 我有一个与RESTful服务和MySQL数据库相结合的EJB应用程序。我想在我的Wildfly服务器上部署这个应用程序。我已经配置了一切,到目前为止,当我想通过Wildfly服务器上的Eclipse启动应用程序时,没有任何错误。问题是我不能通过浏览器访问重新源码--我想在浏览器中调用http://localhost:8080/rest-ejb-articleservice/v1/articles来

  • 我正在尝试找到一种方法来显式指定部署到Glassfish的Web应用程序的上下文路径3.1.2.2但到目前为止我还没有运气。有人能对此提供指导吗?背景如下: 我有一个Web应用程序,它由两个单独的Netbean(7.0)项目组成。第一个是Web服务,称为FOWS。第二个是使用FOWS网络服务的面向用户的Web应用程序。它被称为FooApp。 我最近将glassfish升级到3.1.2.2,希望解决

  • 我是Spring的初学者。今天,当我在阅读Spring core文档时,我在第1.3章中发现了以下说明。Bean概述 除了包含关于如何创建特定bean的信息的bean定义外,ApplicationContext实现还允许注册(由用户)在容器外部创建的现有对象。这是通过getBeanFactory()方法访问ApplicationContext的BeanFactory来完成的,该方法返回BeanFa