2016-02-21 9 views
5

Wir webjars mit Maven in unserem Projekt verwenden. So haben wir Hunderte von JSPs mit Code wie folgt:Remove webjars Version von url

<%--JSP CODE--%> 
<script src="<c:url value="/webjars/jquery/2.2.0/jquery.min.js" />" type="text/javascript"></script> 
<script src="<c:url value="/webjars/bootstrap/3.3.6/js/bootstrap.min.js" />" type="text/javascript"></script> 
......... 

Und wie Sie es ist eine mühsame Arbeit auf neuere Versionen von webjars aktualisieren erraten kann. Also habe ich mich für die Lösung, die mir erlauben, Skripte wie diese zu importieren:

<%--JSP CODE--%> 
<script src="<c:url value="/webjars/jquery/jquery.min.js" />" type="text/javascript"></script> 
<script src="<c:url value="/webjars/bootstrap/js/bootstrap.min.js" />" type="text/javascript"></script> 
......... 

Grundsätzlich ich eine webjar Version von url entfernen möchten. Können Sie schlagen schöne und einfache Lösung für dieses Problem?

Bisher komme ich mit Ressource-Servlet-up, die die Datei zurückzugeben, indem die URL erraten kann. Aber diese Lösung beinhaltet vollständige Ressource Scannen zu Beginn einer Anwendung.

+1

Wenn Sie minifying Sie diese js Dateien in einen separaten Ordner und mit einem Namen erstellen können, die nicht mit der Version enthält ... – khmarbaise

Antwort

5

Werfen Sie einen Blick auf webjars-locator Projekt, können Sie es verwenden, um richtige Anfrage Controller zu erstellen.

Bei Spring MVC mit diesem wäre:

@ResponseBody 
@RequestMapping("/webjarslocator/{webjar}/**") 
public ResponseEntity locateWebjarAsset(@PathVariable String webjar, HttpServletRequest request) { 
    try { 
     String mvcPrefix = "/webjarslocator/" + webjar + "/"; // This prefix must match the mapping path! 
     String mvcPath = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); 
     String fullPath = assetLocator.getFullPath(webjar, mvcPath.substring(mvcPrefix.length())); 
     return new ResponseEntity(new ClassPathResource(fullPath), HttpStatus.OK); 
    } catch (Exception e) { 
     return new ResponseEntity<>(HttpStatus.NOT_FOUND); 
    } 
} 

Haftungsausschluss: Dies ist der Code von WebJarsdocumentation (Abschnitt Making dependencies version agnostic).

In diesem Fall können Sie für js Bibliotheken in folgenden Weise fragen:

<link rel='stylesheet' href='/webjarslocator/bootstrap/css/bootstrap.min.css'> 

Bitte beachten Sie, dass in dieser URL keine Version ist.

Sie können auch versuchen, diese Anfragen zu optimieren (und damit - Dateisystem-Scans) von Cache, aber ich bin mir fast sicher, dass irgendeine Art von Cache bereits in webjars-locator beteiligt ist (ich nicht überprüft habe, dass).