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

与“ ../”相比,如何更好地使用“ <%= request.getContextPath()%>”

萧飞
2023-03-14
问题内容

我从事过许多J2EE项目,其中视图层是JSP。在大多数项目中,我已经看到我们使用scriptlet中的contextPath引用了外部资源,例如图像,javascript,jsp,css等。

代码如下,

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>GC Demo Using HandlebarsJS</title>
    <script type="text/javascript" src="<%=request.getContextPath()%>/js/jqueryUI-AutoComplete/jquery-1.9.1.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath()%>/js/jqueryUI-AutoComplete/jquery-ui-1.10.3.custom.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath()%>/js/handlebarsJS/handlebars.js"></script>
    <link rel="stylesheet" type="text/css" href="${pageContext.servletContext.contextPath}/js/jqueryUI-AutoComplete/jquery-ui-1.10.3.custom.css">

从上面的jsp中,我将在同一项目包(即我的战争)中导入外部资源。

现在可以将上面的JSP编写成下面的代码,

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>GC Demo Using HandlebarsJS</title>
    <script type="text/javascript" src="../js/jqueryUI-AutoComplete/jquery-1.9.1.js"></script>
    <script type="text/javascript" src="../js/jqueryUI-AutoComplete/jquery-ui-1.10.3.custom.js"></script>
    <script type="text/javascript" src="../js/handlebarsJS/handlebars.js"></script>
    <link rel="stylesheet" type="text/css" href="../js/jqueryUI-AutoComplete/jquery-ui-1.10.3.custom.css">

在第二个示例中,我也是在参考战争中存在的资源。

现在考虑以上两种情况,第一种情况作为最佳实践具有更大的意义。

为什么?

使用第二种情况的缺点是什么?

使用第二种情况,我们的项目是否与contextpath更紧密地结合在一起?

请给我解释一下。


问题答案:

request.getContextPath()-返回应用程序的根路径,而 ../-返回文件的父目录。

您使用request.getContextPath(),因为它将始终指向应用程序的根目录。如果要将jsp文件从一个目录移动到另一个目录,则无需进行任何更改。现在,考虑第二种方法。如果要将jsp文件从一个文件夹移动到另一个文件夹,则必须在引用文件的每个位置进行更改。

同样,使用request.getContextPath()的更好方法是在变量中设置’request.getContextPath()’,然后使用该变量来引用您的路径。

<c:set var="context" value="${pageContext.request.contextPath}" />
<script src="${context}/themes/js/jquery.js"></script>

PS-这是我能弄清楚的原因之一。不知道它是否还有其他意义。



 类似资料:
  • 问题内容: 每个案例都有不同的用例吗?什么时候应在makeStyles上使用withStyles? 问题答案: 所述钩API()只能与功能的部件使用。 的高次成分API()可与类组件或功能的部件使用。 它们都提供相同的功能,并没有在无差异的参数和。 如果您将其与功能组件一起使用,则建议您使用Hook API()。与(并在内部委托)相比,有一点额外的开销。 如果您要自定义Material- UI组件

  • 我有一个习惯,就是把所有东西都存储在本地,并确保我的网站即使在没有互联网连接的情况下也能在本地服务器上运行。这一直是我的原则,因此我的网站可以独立脱机运行,最特别的是在开发阶段,我的页面刷新速度非常快,即使没有互联网,我也可以继续开发我的网站。 因此,在我所有的web应用程序和网站中,我总是下载我需要的软件包和库,并在本地链接到它们以获取包含或不包含的内容。 我知道越来越多的人通过公共CDN和其他

  • 问题内容: 当在使用Doctrine类时需要自定义查询时,有人可以为我提供一些明确的理由(支持事实)来使用/学习DQL与SQL吗? 我发现,如果无法使用ORM的内置关系功能来实现某些目标,通常会在扩展的Doctrine或DoctrineTable类中编写自定义方法。在这种方法中,用直接的SQL编写所需的代码(使用带有适当准备好的语句/注入保护等的PDO)。DQL似乎是学习/调试/维护的另一种语言,

  • 问题内容: Docker和OpenShift都是用于实现PaaS服务的框架。 他们如何比较架构和功能? 问题答案: 主要区别在于,Docker作为一个项目仅专注于运行时容器,而OpenShift(作为系统)既包含运行时容器也包括REST API,协调和Web界面,以部署和管理各个容器。 仅比较运行时容器,OpenShift和Docker都使用内核隔离功能将租户进程分开。对于主要通过LXC实现的Do

  • 问题内容: 我只是想知道哪种方法更好(或者我是否缺少更好的方法)。我试图确定一个单词的第一个字母和最后一个字母是否相同,并且有两个明显的解决方案。 要么 据我了解,第一个只是提取字符串的片段并进行字符串比较,而第二个则是从任一端提取字符并将其作为字节进行比较。 我很好奇两者之间是否存在性能差异,并且是否有任何“可取的”方式来做到这一点? 问题答案: 如果用字母表示您的符文,请使用: 如果您的意思是

  • 问题内容: 我看到了Java的AtomicInteger如何在CAS(比较和交换)操作中内部工作。基本上,当多个线程尝试更新值时,JVM在内部使用基础CAS机制并尝试更新值。如果更新失败,请使用新值重试,但不要阻止。 在Java8中,Oracle引入了新的Class LongAdder类,该类在高竞争下似乎比AtomicInteger更好。一些博客文章声称LongAdder通过维护内部单元格表现更

  • 我对反应几乎是全新的。我看了留档,看了一些YT的视频。现在我正在尝试将我在网上找到的一些React类组件转换为功能组件。这就是我已经走了多远:我的功能组件(codesandbox)。 它是一个基于用户输入字段使用元素自动包装SVG文本的组件。 我特别是有一个困难的时间与useEffect挂钩。据我所知,它应该充当和的等价物。现在我已经完成了几乎所有的设置,但是每当在文本区域中添加新文本时,它都不会

  • 你可能必须和不好相处的人相处。甚至可能你本身就是一个不好相处的人。如果你是那种与同事和权威人物有许多矛盾的人,你应该珍惜这种独立所暗示的东西,但需要在不牺牲你的智力或原则的前提下提高你的人际交往能力。 在这方面没有什么经验,或者先前生活的行为模式在工作场合的经验不能适用的一些程序员,对这种事情会非常困扰。不好相处的人经常习惯于拒绝,并且与他人相比,他们更不容易受社交压力所影响。关键是合适地尊重他们