web-dev-qa-db-ja.com

「../」よりも「<%= request.getContextPath()%>」の使用方法が優れている

ビューレイヤーがJSPである多くのJ2EEプロジェクトに取り組んできました。ほとんどのプロジェクトで、スクリプトレットの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">

ここの2番目の例でも、戦争に存在するリソースを参照しています。

上記の2つのケースの両方を考慮すると、最初のケースにはベストプラクティスとしてより重要性が与えられます。

どうして?

そして、2番目のケースを使用することの欠点は何ですか?

2番目のケースを使用すると、プロジェクトはcontextpathとより緊密に結合されますか?

私に説明してください。

24

request.getContextPath()-はアプリケーションのルートパスを返し、../-ファイルの親ディレクトリを返します。

Request.getContextPath()を使用します。これは常にアプリケーションのルートを指すためです。 jspファイルをあるディレクトリから別のディレクトリに移動する場合、何も変更する必要はありません。次に、2番目のアプローチを検討します。 jspファイルをあるフォルダーから別のフォルダーに移動する場合、ファイルを参照しているすべての場所で変更を行う必要があります。

また、request.getContextPath()を使用するより良い方法は、変数に「request.getContextPath()」を設定し、その変数をパスの参照に使用することです。

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

PS-これが、私が理解できる1つの理由です。それにそれ以上の意義があるかどうかわからない。

53
Sudarshan_SMD