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

在网络应用程序中处理上下文的任何聪明方法?

邹京
2023-03-14
问题内容

在Java中,Web应用程序捆绑在WAR中。默认情况下,许多servlet容器将WAR名称用作应用程序的上下文名称。

因此,myapp.war被部署到http://example.com/myapp。

问题在于,Web应用程序将其“根”视为“根”,或者仅仅是“ /”,而HTML会将您的应用程序的根视为“ / myapp”。

Servlet API和JSP具有帮助进行管理的工具。例如,如果您在servlet中执行:response.sendRedirect(“ /
mypage.jsp”),则容器将在上下文前添加并创建url:http :
//example.com/myapp/mypage.jsp “。

但是,您不能使用HTML中的IMG标签来做到这一点。如果您执行,则可能会得到404,因为您真正想要的是“ /myapp/myimage.gif”。

许多框架也具有上下文感知的JSP标记,并且在JSP中有不同的方法来制作正确的URL(没有一种方法特别优雅)。

对于编码人员而言,跳进何时使用“ App Relative” URL和绝对URL相比是一个棘手的问题。

最后,存在Javascript代码的问题,该Javascript代码需要即时创建URL,并在CSS内嵌入URL(用于背景图像等)。

我很好奇其他人用来缓解和解决此问题的技术。许多服务器只是简单地对其进行修补和硬编码,要么写入服务器根目录,要么写入它们正要使用的任何上下文。我已经知道答案了,这不是我想要的。

你是做什么?


问题答案:

您可以使用JSTL创建网址。

例如,<c:url value="/images/header.jpg" />将上下文根前缀。

使用CSS,这通常对我来说不是问题。

我有一个像这样的网络根结构:

/ css
/ images

然后,在CSS文件中,您只需要使用相对URL(../images/header.jpg),而无需了解上下文根。

至于JavaScript,对我有用的是在页面标头中包含一些常见的JavaScript,如下所示:

<script type="text/javascript">
var CONTEXT_ROOT = '<%= request.getContextPath() %>';
</script>

然后,您可以在所有脚本中使用上下文根(或者,您可以定义一个函数来构建路径-可能更灵活)。

显然,这全部取决于您使用JSP和JSTL,但是我将JSF与Facelets一起使用,并且所涉及的技术是相似的-唯一真正的区别是以不同的方式获取上下文根。



 类似资料:
  • 问题内容: 我目前正在使用Express(Node.js)构建的应用程序,我想知道在不同环境(开发,生产)下处理不同robots.txt的最聪明方法是什么。 这是我现在所拥有的,但是我对解决方案不满意,我认为它很脏: (注意:这是CoffeeScript) 应该有更好的方法。你会怎么做? 谢谢。 问题答案: 使用中间件功能。这样,robots.txt将在任何会话,cookieParser等之前进行

  • 如果用户输入的路径(=webapp的名称)在Tomcat上不可用,那么他将看到默认的404 Tomcat页面。作为一个例子http://localhost:8080/asdfTomcat上没有名为“asdf”的网络应用程序。有办法处理这些情况吗?作为一个例子,向他展示了一个没有找到的习惯。html而不是默认的Tomcat错误页? 网络上有很多帖子,但它们都处理某个网络应用程序的特定 404 错误,

  • 问题内容: 为什么在执行中断处理程序时无法进行上下文切换?更具体地说,在linux内核中,中断处理程序在被中断的进程的上下文中运行。为什么不能在中断处理程序中进行上下文切换来调度另一个进程? 问题答案: 在多处理器上,上下文切换当然可以在执行中断处理程序时发生。实际上,将很难预防。 根据定义,在单CPU机器上,它一次只能运行一个控制线程。它只有一个寄存器集,一个ALU,等等。因此,如果中断处理程序

  • 要在控制台应用程序中开始使用Hangfire,您需要首先将Hangfire包安装到控制台应用程序。因此,使用您的软件包管理器控制台窗口进行安装: PM> Install-Package Hangfire.Core 然后添加任务存储安装所需的软件包。例如,使用SQL Server: PM> Install-Package Hangfire.SqlServer 仅需 Hangfire.Core 软件包

  • 当多个应用程序部署到应用程序服务器时,它们是否都共享相同的 JVM? 如果不是,每个应用程序是否都针对不同的JVM? 如果是,那么它不会成为性能问题吗?例如:多个应用程序使用相同的堆空间,这意味着更频繁的垃圾回收机制等? 将这些应用程序部署为带有tomcat的自包含Sprinboot不是一个好主意吗? 我知道我们可以选择使用不同的域为每个应用程序提供单独的JVM-但是仍然有许多应用程序服务器启动并

  • Checkmarx扫描抱怨某些“元素的值在没有经过适当清理或验证的情况下流过代码,并最终在OnItemDataBound方法中显示给用户 或者 如何清理这些值?HTML编码和解码是否容易避免此类漏洞结果? 请注意,这是针对dot net应用程序的。