我曾在多个J2EE项目中工作,其中视图层是JSP。 在大多数项目中,我们使用上下文路径(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文件中存在的资源。
现在考虑以上两种情况,第一种情况被认为是最佳实践,给予更多重视。
为什么?
使用第二种情况有哪些缺点?
使用第二种情况是否会使我们的项目与上下文路径更加紧密耦合?
请解释一下。