2013-11-01 7 views
18

Ich habe an einer Anzahl von J2EE-Projekten gearbeitet, bei denen der Ansichtslayer JSP ist. In den meisten Projekten habe ich gesehen, dass wir externe Ressourcen wie Bilder, Javascript, JSPs, CSS usw. mit dem KontextPfad im Scriptlet referenzieren.Wie funktioniert "<% = request.getContextPath()%>" besser als "../"

Der Code ist wie folgt,

<%@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"> 

Aus der obigen jsp, hier habe ich die externen Ressourcen am importieren, das in meinem gleichen Projektbündel das heißt in meinem Krieg sind.

Nun ist die gleiche oben JSP kann wie folgt Code geschrieben werden,

<%@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"> 

Hier im zweiten Beispiel auch ich die Ressourcen in meinem Krieg vorhanden bin Referenzierung.

Wenn wir nun die beiden oben genannten Fälle betrachten, wird dem ersten Fall mehr Bedeutung beigemessen.

Warum?

und was sind die Nachteile der Verwendung des zweiten Falles?

Wird mit dem zweiten Fall unser Projekt enger mit dem Kontextpfad verbunden?

Bitte erklären Sie mir.

+0

Wo ist der Kontextpfad im zweiten Fall? –

+0

falscher Thread xD –

Antwort

45

request.getContextPath()- kehrt Stammpfad der Anwendung, während ../ - übergeordnetes Verzeichnis einer Datei zurückgibt.

Sie verwenden request.getContextPath(), da es immer auf root Ihrer Anwendung verweist. Wenn Sie Ihre jsp-Datei von einem Verzeichnis in ein anderes verschieben möchten, muss nichts geändert werden. Betrachten wir nun den zweiten Ansatz. Wenn Sie Ihre JSP-Dateien von einem Ordner in einen anderen verschieben möchten, müssen Sie Änderungen an jedem Speicherort vornehmen, an den Sie Ihre Dateien verweisen.

Auch besser Ansatz der Verwendung von request.getContextPath() wird sein, "request.getContextPath()" in einer Variablen und verwenden Sie diese Variable für die Verweisung Ihres Pfades.

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

PS- Dies ist der eine Grund, den ich herausfinden kann. Ich weiß nicht, ob es eine größere Bedeutung hat.

+1

Ist "$ {pageContext.servletContext.contextPath}" und anders als was Sie vorschlagen? Welcher sollte benutzt werden und warum? –

+0

$ {pageContext.servletContext.contextPath} und $ {pageContext.request.contextPath} geben denselben contextPath mit Ausnahme einer Bedingung, wenn der Servlet-Container einem Kontext durch mehr als einen Kontextpfad entspricht, d. H. Auf Ihre einzelne Anwendung wird über mehrere Kontextpfade zugegriffen. Es empfiehlt sich in diesem Fall $ {pageContext.servletContext.contextPath} zu verwenden. –

+0

Bessere Vorgehensweise bei der Verwendung von request.getContextPath() ist es, 'request.getContextPath()' in einer Variablen zu setzen und diese Variable für die Verweisung Ihres Pfades zu verwenden. Kann jemand hervorheben, warum es ist? –