2013-11-01 219 views
18

私はビュー層がJSPであるJ2EEプロジェクトの数に取り組んできました。ほとんどのプロジェクトでは、スクリプトレット内のcontextPathを使用して外部リソース(イメージ、javascript、jsp、cssなど)を参照していることがわかりました。次のように「<%= request.getContextPath()%>」は「../」よりも優れています

コードは、上記の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="<%=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上記と同じ

、ここでも私は戦争に存在するリソースを参照しています第二の例では
<%@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番目のケースを使用して、私たちのプロジェクトはコンテキストパスと密接に結びついていますか?

私に説明してください。

+0

2番目のケースのコンテキストパスはどこですか? –

+0

間違ったスレッドxD –

答えて

45

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つの理由です。これ以上意義があるのか​​どうかは分かりません。

+1

「$ {pageContext.servletContext.contextPath}」はあなたの提案と異なっていますか?どちらを使うべきなのですか? –

+0

$ {pageContext.serverContext.contextPath}と$ {pageContext.request.contextPath}は、サーブレットコンテナが複数のコンテキストパスによるコンテキストと一致する場合、つまり単一のアプリケーションに複数のコンテキストパスを使用してアクセスする場合、1つの条件を除いて同じcontextPathを与えます。そのような場合は、$ {pageContext.servletContext.contextPath}を使用することをお勧めします。 –

+0

また、request.getContextPath()を使用するより良い方法は、変数に 'request.getContextPath()'を設定し、その変数をパスの参照に使用することです。誰かがその理由を強調できますか? –

関連する問題