我从事过许多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()-
../
您使用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-这是我能弄清楚的原因之一。不知道它是否还有其他意义。