jsp - 如何使用 "<%=request.getContextPath()%>"比 "../"更好

标签 jsp contextpath

我参与了许多 J2EE 项目,其中 View 层是 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,这里我导入了我的同一个项目包中的外部资源,即在我的 war 中。

现在上面的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">

在第二个例子中,我也引用了我的 war 中存在的资源。

现在考虑以上两种情况,第一种情况作为最佳实践被赋予更重要的意义。

为什么?

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

使用第二种情况,我们的项目是否与上下文路径更紧密地耦合?

请给我解释一下。

最佳答案

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-这是我能弄清楚的一个原因。不知道还有没有意义。

关于jsp - 如何使用 "<%=request.getContextPath()%>"比 "../"更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19724565/

相关文章:

java - Struts2 - JSP EL - 串联似乎不起作用

java - 使用Spring boot渲染jsp页面出错?

java - 支柱2.5 : Validation occurring but no message displayed

java - tomcat 无法获取 ServletContext.getContextPath()

xml - Tomcat 6 到 Tomcat 7 导致上下文路径停止协作

css - 当我将 Spring 引导框架与 Thymeleaf 和上下文路径一起使用时,如何在 css 文件中导入 css?

java - 是否可以动态地交替使用多个项目中的 Freemarker 模板?

java - 如何使用 Struts 2 标签从 JSP 访问查询字符串?

eclipse - unable to run eclipse project on tomcat server(Server Tomcat v7.0 Server at localhost failed to start.)