[JAVA] Aktivieren Sie WebJars für leere Projekte in TERASOLUNA 5.x (= Spring MVC).

Dieses Mal wird in dem Entwicklungsprojekt, das aus dem von TERASOLUNA 5.x bereitgestellten leeren Projekt (= die Substanz ist Spring Framework) generiert wurde, die Datei der Clientbibliothek (CSS-Bibliothek, JS-Bibliothek) unter Verwendung des Mechanismus von WebJars angewendet. Ich werde Ihnen zeigen, wie Sie es einbauen (= eine Notiz machen).

Waht's TERASOLUNA 5.x ?

Hier können Sie herausfinden, wer TERASOLUNA 5.x ist hier. Schade, dass die Konfigurationsmethode XML-basiert ist und Spring Boot nicht unterstützt, aber sie steckt voller Know-how für die Entwicklung von Webanwendungen mit Spring, und die Wartung erfolgt kontinuierlich (einmal im Jahr). Dies erfolgt in einem kleineren Versions-Upgrade + α).

Überprüfungsversion

Generierung eines Entwicklungsprojekts

In TERASOLUNA 5.x "Einzelprojektkonfiguration" und "Konfiguration für mehrere Projekte (mehrere Module) Wir bieten zwei Arten von leeren Projekten (Mavne Archetype) von "/ terasolunaorg / terasoluna-gfw-web-multi-blank)" an, aber dieses Mal erstellen wir ein Projekt mit einer einzigen Projektkonfiguration.

Befehl


$ mvn archetype:generate -B\
 -DarchetypeGroupId=org.terasoluna.gfw.blank\
 -DarchetypeArtifactId=terasoluna-gfw-web-blank-archetype\
 -DarchetypeVersion=5.3.0.RELEASE\
 -DgroupId=com.example\
 -DartifactId=demo-webjars\
 -Dversion=1.0.0-SNAPSHOT

Ergebnis der Befehlsausführung


$ mvn archetype:generate -B\
>  -DarchetypeGroupId=org.terasoluna.gfw.blank\
>  -DarchetypeArtifactId=terasoluna-gfw-web-blank-archetype\
>  -DarchetypeVersion=5.3.0.RELEASE\
>  -DgroupId=com.example\
>  -DartifactId=demo-webjars\
>  -Dversion=1.0.0-SNAPSHOT
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> maven-archetype-plugin:2.3:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO] 
[INFO] <<< maven-archetype-plugin:2.3:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO] 
[INFO] 
[INFO] --- maven-archetype-plugin:2.3:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Batch mode
[INFO] Archetype repository not defined. Using the one from [org.terasoluna.gfw.blank:terasoluna-gfw-web-blank-archetype:5.3.0.RELEASE] found in catalog remote
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: terasoluna-gfw-web-blank-archetype:5.3.0.RELEASE
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.example
[INFO] Parameter: artifactId, Value: demo-webjars
[INFO] Parameter: version, Value: 1.0.0-SNAPSHOT
[INFO] Parameter: package, Value: com.example
[INFO] Parameter: packageInPathFormat, Value: com/example
[INFO] Parameter: package, Value: com.example
[INFO] Parameter: version, Value: 1.0.0-SNAPSHOT
[INFO] Parameter: groupId, Value: com.example
[INFO] Parameter: artifactId, Value: demo-webjars
[INFO] project created from Archetype in dir: /usr/local/apps/demo-webjars
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.617 s
[INFO] Finished at: 2017-09-03T13:01:31+09:00
[INFO] Final Memory: 16M/222M
[INFO] ------------------------------------------------------------------------
$

Konfiguration innerhalb des Projekts


$ tree demo-webjars
demo-webjars
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           ├── app
    │   │           │   └── welcome
    │   │           │       └── HelloController.java
    │   │           └── domain
    │   │               ├── model
    │   │               ├── repository
    │   │               └── service
    │   ├── resources
    │   │   ├── META-INF
    │   │   │   ├── dozer
    │   │   │   └── spring
    │   │   │       ├── applicationContext.xml
    │   │   │       ├── demo-webjars-codelist.xml
    │   │   │       ├── demo-webjars-domain.xml
    │   │   │       ├── demo-webjars-infra.xml
    │   │   │       ├── spring-mvc.xml
    │   │   │       └── spring-security.xml
    │   │   ├── ValidationMessages.properties
    │   │   ├── dozer.properties
    │   │   ├── i18n
    │   │   │   └── application-messages.properties
    │   │   └── logback.xml
    │   └── webapp
    │       ├── WEB-INF
    │       │   ├── views
    │       │   │   ├── common
    │       │   │   │   ├── error
    │       │   │   │   │   ├── accessDeniedError.jsp
    │       │   │   │   │   ├── businessError.jsp
    │       │   │   │   │   ├── dataAccessError.jsp
    │       │   │   │   │   ├── invalidCsrfTokenError.jsp
    │       │   │   │   │   ├── missingCsrfTokenError.jsp
    │       │   │   │   │   ├── resourceNotFoundError.jsp
    │       │   │   │   │   ├── systemError.jsp
    │       │   │   │   │   ├── transactionTokenError.jsp
    │       │   │   │   │   └── unhandledSystemError.html
    │       │   │   │   └── include.jsp
    │       │   │   └── welcome
    │       │   │       └── home.jsp
    │       │   └── web.xml
    │       └── resources
    │           └── app
    │               └── css
    │                   └── styles.css
    └── test
        ├── java
        └── resources

28 directories, 25 files
$ 

Erstellen Sie das Projekt

Verwenden Sie nach dem Erstellen des Projekts den Befehl Mavne, um die Kriegsdatei zu erstellen.

$ cd demo-webjars
$ mvn package
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building TERASOLUNA Server Framework for Java (5.x) Web Blank Project 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ demo-webjars ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 11 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ demo-webjars ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /usr/local/apps/demo-webjars/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ demo-webjars ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ demo-webjars ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ demo-webjars ---
[INFO] 
[INFO] --- maven-war-plugin:2.5:war (default-war) @ demo-webjars ---
[INFO] Packaging webapp
[INFO] Assembling webapp [demo-webjars] in [/usr/local/apps/demo-webjars/target/demo-webjars-1.0.0-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp resources [/usr/local/apps/demo-webjars/src/main/webapp]
[INFO] Webapp assembled in [324 msecs]
[INFO] Building war: /usr/local/apps/demo-webjars/target/demo-webjars.war
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.454 s
[INFO] Finished at: 2017-09-03T13:07:22+09:00
[INFO] Final Memory: 32M/258M
[INFO] ------------------------------------------------------------------------
$

Starten Sie die Web-App

Stellen Sie die erstellte Kriegsdatei mit dem Carog Mavne-Plugin auf dem Anwendungsserver (Tomcat) bereit und starten Sie sie.

$ mvn cargo:run
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building TERASOLUNA Server Framework for Java (5.x) Web Blank Project 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- cargo-maven2-plugin:1.6.2:run (default-cli) @ demo-webjars ---
[INFO] [en2.ContainerRunMojo] Resolved container artifact org.codehaus.cargo:cargo-core-container-tomcat:jar:1.6.2 for container tomcat8x
[INFO] [talledLocalContainer] Tomcat 8.x starting...
[INFO] [stalledLocalDeployer] Deploying [/usr/local/apps/demo-webjars/target/demo-webjars.war] to [/usr/local/apps/demo-webjars/target/cargo/configurations/tomcat8x/webapps]...
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: Server version:        Apache Tomcat/8.0.39
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: Server built:          Nov 9 2016 08:48:39 UTC
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: Server number:         8.0.39.0
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: OS Name:               Mac OS X
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: OS Version:            10.10.5
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: Architecture:          x86_64
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: Java Home:             /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: JVM Version:           1.8.0_131-b11
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: JVM Vendor:            Oracle Corporation
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: CATALINA_BASE:         /usr/local/apps/demo-webjars/target/cargo/configurations/tomcat8x
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: CATALINA_HOME:         /usr/local/apps/demo-webjars/target/cargo/installs/apache-tomcat-8.0.39/apache-tomcat-8.0.39
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: Command line argument: -Xms512m
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: Command line argument: -Xmx1024m
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: Command line argument: -Dcatalina.home=/usr/local/apps/demo-webjars/target/cargo/installs/apache-tomcat-8.0.39/apache-tomcat-8.0.39
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: Command line argument: -Dcatalina.base=/usr/local/apps/demo-webjars/target/cargo/configurations/tomcat8x
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: Command line argument: -Djava.io.tmpdir=/usr/local/apps/demo-webjars/target/cargo/configurations/tomcat8x/temp
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.VersionLoggerListener log
[INFO] [talledLocalContainer]Information: Command line argument: -Djava.util.logging.config.file=/usr/local/apps/demo-webjars/target/cargo/configurations/tomcat8x/conf/logging.properties
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.core.AprLifecycleListener lifecycleEvent
[INFO] [talledLocalContainer]Information: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /Users/shimizukazuki/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.coyote.AbstractProtocol init
[INFO] [talledLocalContainer]Information: Initializing ProtocolHandler ["http-nio-8080"]
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
[INFO] [talledLocalContainer]Information: Using a shared selector for servlet write/read
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.coyote.AbstractProtocol init
[INFO] [talledLocalContainer]Information: Initializing ProtocolHandler ["ajp-nio-8009"]
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
[INFO] [talledLocalContainer]Information: Using a shared selector for servlet write/read
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.Catalina load
[INFO] [talledLocalContainer]Information: Initialization processed in 595 ms
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.core.StandardService startInternal
[INFO] [talledLocalContainer]Information:Starten Sie den Dienst Catalina
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.core.StandardEngine startInternal
[INFO] [talledLocalContainer]Information: Starting Servlet Engine: Apache Tomcat/8.0.39
[INFO] [talledLocalContainer] 9 03, 2017 1:08:56 Uhr org.apache.catalina.startup.HostConfig deployWAR
[INFO] [talledLocalContainer]Information:Webanwendungsarchiv/usr/local/apps/demo-webjars/target/cargo/configurations/tomcat8x/webapps/cargocpc.Krieg einsetzen
[INFO] [talledLocalContainer] 9 03, 2017 1:08:57 Uhr org.apache.catalina.startup.HostConfig deployWAR
[INFO] [talledLocalContainer]Information: Deployment of web application archive /usr/local/apps/demo-webjars/target/cargo/configurations/tomcat8x/webapps/cargocpc.war has finished in 295 ms
[INFO] [talledLocalContainer] 9 03, 2017 1:08:57 Uhr org.apache.catalina.startup.HostConfig deployWAR
[INFO] [talledLocalContainer]Information:Webanwendungsarchiv/usr/local/apps/demo-webjars/target/cargo/configurations/tomcat8x/webapps/demo-webjars.Krieg einsetzen
[INFO] [talledLocalContainer] 9 03, 2017 1:08:58 Uhr org.apache.jasper.servlet.TldScanner scanJars
[INFO] [talledLocalContainer]Information: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
[INFO] [talledLocalContainer] 9 03, 2017 1:08:58 Uhr org.apache.catalina.core.ApplicationContext log
[INFO] [talledLocalContainer]Information: No Spring WebApplicationInitializer types detected on classpath
[INFO] [talledLocalContainer] 9 03, 2017 1:08:59 Uhr org.apache.catalina.core.ApplicationContext log
[INFO] [talledLocalContainer]Information: Initializing Spring root WebApplicationContext
[INFO] [talledLocalContainer] 9 03, 2017 1:09:00 Uhr org.apache.catalina.core.ApplicationContext log
[INFO] [talledLocalContainer]Information: Initializing Spring FrameworkServlet 'appServlet'
[INFO] [talledLocalContainer] date:2017-09-03 13:09:00	thread:localhost-startStop-1	X-Track:	level:INFO 	logger:o.springframework.web.servlet.DispatcherServlet 	message:FrameworkServlet 'appServlet': initialization started
[INFO] [talledLocalContainer] date:2017-09-03 13:09:00	thread:localhost-startStop-1	X-Track:	level:INFO 	logger:o.s.w.s.m.m.a.RequestMappingHandlerMapping      	message:Mapped "{[/],methods=[GET || POST]}" onto public java.lang.String com.example.app.welcome.HelloController.home(java.util.Locale,org.springframework.ui.Model)
[INFO] [talledLocalContainer] date:2017-09-03 13:09:01	thread:localhost-startStop-1	X-Track:	level:INFO 	logger:o.s.w.s.m.m.a.RequestMappingHandlerAdapter      	message:Looking for @ControllerAdvice: WebApplicationContext for namespace 'appServlet-servlet': startup date [Sun Sep 03 13:09:00 JST 2017]; parent: Root WebApplicationContext
[INFO] [talledLocalContainer] date:2017-09-03 13:09:01	thread:localhost-startStop-1	X-Track:	level:INFO 	logger:o.s.w.s.m.m.a.RequestMappingHandlerAdapter      	message:Looking for @ControllerAdvice: WebApplicationContext for namespace 'appServlet-servlet': startup date [Sun Sep 03 13:09:00 JST 2017]; parent: Root WebApplicationContext
[INFO] [talledLocalContainer] date:2017-09-03 13:09:01	thread:localhost-startStop-1	X-Track:	level:INFO 	logger:o.s.web.servlet.handler.SimpleUrlHandlerMapping 	message:Mapped URL path [/**] onto handler 'org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler#0'
[INFO] [talledLocalContainer] date:2017-09-03 13:09:01	thread:localhost-startStop-1	X-Track:	level:INFO 	logger:o.s.web.servlet.handler.SimpleUrlHandlerMapping 	message:Mapped URL path [/resources/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
[INFO] [talledLocalContainer] date:2017-09-03 13:09:01	thread:localhost-startStop-1	X-Track:	level:INFO 	logger:o.springframework.web.servlet.DispatcherServlet 	message:FrameworkServlet 'appServlet': initialization completed in 1222 ms
[INFO] [talledLocalContainer] 9 03, 2017 1:09:13 Uhr org.apache.catalina.startup.HostConfig deployWAR
[INFO] [talledLocalContainer]Information: Deployment of web application archive /usr/local/apps/demo-webjars/target/cargo/configurations/tomcat8x/webapps/demo-webjars.war has finished in 4,615 ms
[INFO] [talledLocalContainer] 9 03, 2017 1:09:13 Uhr org.apache.catalina.startup.HostConfig deployDirectory
[INFO] [talledLocalContainer]Information:Webanwendungsverzeichnis/usr/local/apps/demo-webjars/target/cargo/configurations/tomcat8x/webapps/host-Manager bereitstellen
[INFO] [talledLocalContainer] 9 03, 2017 1:09:13 Uhr org.apache.catalina.startup.HostConfig deployDirectory
[INFO] [talledLocalContainer]Information: Deployment of web application directory /usr/local/apps/demo-webjars/target/cargo/configurations/tomcat8x/webapps/host-manager has finished in 19 ms
[INFO] [talledLocalContainer] 9 03, 2017 1:09:13 Uhr org.apache.catalina.startup.HostConfig deployDirectory
[INFO] [talledLocalContainer]Information:Webanwendungsverzeichnis/usr/local/apps/demo-webjars/target/cargo/configurations/tomcat8x/webapps/Manager bereitstellen
[INFO] [talledLocalContainer] 9 03, 2017 1:09:13 Uhr org.apache.catalina.startup.HostConfig deployDirectory
[INFO] [talledLocalContainer]Information: Deployment of web application directory /usr/local/apps/demo-webjars/target/cargo/configurations/tomcat8x/webapps/manager has finished in 12 ms
[INFO] [talledLocalContainer] 9 03, 2017 1:09:13 Uhr org.apache.coyote.AbstractProtocol start
[INFO] [talledLocalContainer]Information: Starting ProtocolHandler ["http-nio-8080"]
[INFO] [talledLocalContainer] 9 03, 2017 1:09:13 Uhr org.apache.coyote.AbstractProtocol start
[INFO] [talledLocalContainer]Information: Starting ProtocolHandler ["ajp-nio-8009"]
[INFO] [talledLocalContainer] 9 03, 2017 1:09:13 Uhr org.apache.catalina.startup.Catalina start
[INFO] [talledLocalContainer]Information: Server startup in 5012 ms
[INFO] [talledLocalContainer] Tomcat 8.x started on port [8080]
[INFO] Press Ctrl-C to stop the container...

Wenn Sie auf das Anwendungsstammverzeichnis zugreifen, wird der folgende obere Bildschirm (HTML) angewendet.

$ curl -D - http://localhost:8080/demo-webjars/
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Track: c061e8853a3f49c2919c8ac6f46071cf
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Type: text/html;charset=UTF-8
Content-Language: ja-JP
Content-Length: 320
Date: Sun, 03 Sep 2017 04:11:03 GMT









<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Home</title>
<link rel="stylesheet"
    href="/demo-webjars/resources/app/css/styles.css">
</head>
<body>
    <div id="wrapper">
        <h1>Hello world!</h1>
        <p>The time on the server is 2017/09/03 13:11:03 JST.</p>
    </div>
</body>
</html>
$

Verwenden Sie WebJars

Dieses Mal werde ich versuchen, die CSS-Bibliothek Bootstrap mithilfe des Mechanismus von WebJars in die Anwendung zu integrieren.

pom.xml


<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>bootstrap</artifactId>
    <version>3.3.7-1</version>
</dependency>

Baue den Krieg wieder auf und setze ihn ein / starte ihn erneut.

$ mvn package cargo:run
...
$

Versuchen Sie, auf die WebJars-Bootstrap-CSS-Datei zuzugreifen.

$ curl -D - http://localhost:8080/demo-webjars/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Track: cda63d914b0142c5bd36c0e85dd8e22d
Accept-Ranges: bytes
ETag: W/"121200-1469407916000"
Last-Modified: Mon, 25 Jul 2016 00:51:56 GMT
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Type: text/css;charset=UTF-8
Content-Length: 121200
Date: Sun, 03 Sep 2017 04:24:44 GMT

/*!
 * Bootstrap v3.3.7 (http://getbootstrap.com)
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{fo....
...

Wenn für Anwendungsserver, die Servlet 3.0+ unterstützen, eine WebJars-JAR-Datei im Klassenpfad (WEB-INF / lib usw.) vorhanden ist, können Sie ohne spezielle Einstellungen darauf zugreifen.

Wenn Sie also nur WebJars verwenden,

src/main/webapp/WEB-INF/views/welcome/home.jsp


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Home</title>
<link rel="stylesheet"
    href="${pageContext.request.contextPath}/resources/app/css/styles.css">
<link rel="stylesheet"
      href="${pageContext.request.contextPath}/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css"> <!--★ Ergänzung-->
</head>
<body>
    <div id="wrapper">
        <h1>Hello world!</h1>
        <p>The time on the server is ${serverTime}.</p>
    </div>
</body>
</html>

Wenn ja, ist es OK.

Verwenden Sie den Webjar-Locator, um Versionsnummern zu entfernen

Vielleicht ... möchten viele Ingenieure beim Zugriff auf die CSS-Datei die Versionsnummer (in diesem Beispiel 3.3.7-1) nicht in die URL aufnehmen. Spring MVC bietet einen Mechanismus zum Ausschließen der Versionsnummer vom Anwendungscode (JSP usw.) durch Verknüpfung mit einer Bibliothek namens "webjar-locator".

pon.xml


<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>webjars-locator</artifactId>
</dependency>

src/main/resources/META-INF/spring/spring-mvc.xml


<mvc:resources mapping="/webjars/**" location="/webjars/">
    <mvc:resource-chain resource-cache="true"/> <!--Wenn Sie dieses Tag angeben, ist Spring ein Webjar-Aktiviert automatisch die Funktion der Verknüpfung mit dem Locator-->
</mvc:resources>

Erstellen Sie den Krieg neu, stellen Sie ihn bereit und starten Sie ihn erneut, entfernen Sie die Versionsnummer und versuchen Sie, darauf zuzugreifen.

$ curl -D - http://localhost:8080/demo-webjars/webjars/bootstrap/css/bootstrap.min.css
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Track: adb21119739e422bb3faf020ff5e9e3f
Last-Modified: Sat, 17 Sep 2016 02:28:22 GMT
Accept-Ranges: bytes
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Type: text/css;charset=UTF-8
Content-Length: 121200
Date: Sun, 03 Sep 2017 04:53:18 GMT

/*!
 * Bootstrap v3.3.7 (http://getbootstrap.com)
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{
...

Sie können darauf zugreifen.

Der Teil, der die zu lesende CSS-Datei angibt, ist ...

src/main/webapp/WEB-INF/views/welcome/home.jsp


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Home</title>
<link rel="stylesheet"
    href="${pageContext.request.contextPath}/resources/app/css/styles.css">
<link rel="stylesheet"
      href="${pageContext.request.contextPath}/webjars/bootstrap/css/bootstrap.min.css"> <!--★ Versionsnummer aus dem Pfad entfernen-->
</head>
<body>
    <div id="wrapper">
        <h1>Hello world!</h1>
        <p>The time on the server is ${serverTime}.</p>
    </div>
</body>
</html>

Wenn ja, ist es OK.

Ergreifen Sie beim Upgrade Maßnahmen gegen den Browser-Cache

Die Tatsache, dass Sie die Versionsnummer nicht in den Pfad aufnehmen, bedeutet, dass sich der Pfad auch dann nicht ändert, wenn Sie die Version der Bibliothek erhöhen. Dies bedeutet, dass abhängig von den Cache-Control-Einstellungen die vom Browser zwischengespeicherte Datei (die Datei vor dem Versions-Upgrade) verwendet werden kann. Wenn diese Dateien jedoch nicht zwischengespeichert werden, kommt es zu nutzlosem Netzwerkverkehr und Ressourcenzugriff auf der Serverseite. Daher wird erwartet, dass "die Systemlast zunimmt" und "die Geschwindigkeit beim Zeichnen des Bildschirms langsamer wird". ..

Um dieses Problem zu lösen

Sie können es tun ... wie (richtig) ... Spring bietet diese Funktion! !!

Registrieren Sie zunächst den von Spring bereitgestellten "ResourceUrlEncodingFilter" als Servlet-Filter.

** Wichtig: Reihenfolge der Servlet-Filterdefinition **

Definieren Sie ** nach ** nach dem Spring Security-Servlet-Filter (springSecurityFilterChain).

src/main/webapp/WEB-INF/web.xml


<filter>
    <filter-name>ResourceUrlEncodingFilter</filter-name>
    <filter-class>org.springframework.web.servlet.resource.ResourceUrlEncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ResourceUrlEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Daher verwendet JSP bei der Angabe des Pfads die von JSTL oder Spring bereitgestellte Tag-Bibliothek.

src/main/webapp/WEB-INF/views/welcome/home.jsp


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Home</title>
<link rel="stylesheet"
    href="${pageContext.request.contextPath}/resources/app/css/styles.css">
<link rel="stylesheet"
      href="${pageContext.request.contextPath}/webjars/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet"
      href="<c:url value='/webjars/bootstrap/css/bootstrap.min.css'/>"> <!--★ Verwenden Sie die JSTL-Tag-Bibliothek-->
<link rel="stylesheet"
      href="<spring:url value='/webjars/bootstrap/css/bootstrap.min.css'/>"> <!--★ Verwenden Sie die Spring-Tag-Bibliothek-->
</head>
<body>
    <div id="wrapper">
        <h1>Hello world!</h1>
        <p>The time on the server is ${serverTime}.</p>
    </div>
</body>
</html>

Dann ...

$ curl -D - http://localhost:8080/demo-webjars/
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Track: 5576191e3ed54e82a83b67236bc98b24
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Content-Type: text/html;charset=UTF-8
Content-Language: ja-JP
Content-Length: 609
Date: Sun, 03 Sep 2017 05:28:08 GMT









<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Home</title>
<link rel="stylesheet"
    href="/demo-webjars/resources/app/css/styles.css">
<link rel="stylesheet"
      href="/demo-webjars/webjars/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet"
      href="/demo-webjars/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css">
<link rel="stylesheet"
      href="/demo-webjars/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css">
</head>
<body>
    <div id="wrapper">
        <h1>Hello world!</h1>
        <p>The time on the server is 2017/09/03 14:28:08 JST.</p>
    </div>
</body>
</html>
$

Aus JSP generiertes HTML enthält jetzt die Versionsnummer im Pfad.

Ergreifen Sie Maßnahmen gegen den Browser-Cache

Standardmäßig werden leere TERASOLUNA 5.x-Projekte mit Spring Security-Servlet-Filtern bereitgestellt und so eingestellt, dass der Zugriff auf andere Pfade als "/ resources / **" nicht zwischengespeichert wird. Mit anderen Worten, der Zugriff auf "/ webjars / **" wird nicht zwischengespeichert, sodass Sie die CSS-Datei jedes Mal neu abrufen müssen, wenn Sie den Bildschirm zeichnen.

Um dieses Verhalten zu ändern, können Sie den Zugriff auf / webjars / ** von der Spring Security-Verarbeitung ausschließen.

src/main/resources/META-INF/spring/spring-security.xml


<sec:http pattern="/resources/**" security="none"/>
<sec:http pattern="/webjars/**" security="none"/> <!--★ Ergänzung-->
<sec:http>
    <!-- ... -->
</sec:http>

Wenn Sie in diesem Zustand zugreifen ...

$ curl -D - http://localhost:8080/demo-webjars/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Track: a27dba531c8f4c79af0657ceaf5b430b
Last-Modified: Sat, 17 Sep 2016 02:28:22 GMT
Accept-Ranges: bytes
Content-Type: text/css;charset=UTF-8
Content-Length: 121200
Date: Sun, 03 Sep 2017 05:48:20 GMT

/*!
 * Bootstrap v3.3.7 (http://getbootstrap.com)
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{...
...

Sie können sehen, dass der von Spring Security angegebene Cache-Control-Header nicht mehr vorhanden ist. Ich habe es mit Chrome und Safari überprüft

Es war ein Gefühl, dass es sich bewegte. (Es kann eine Lüge sein ...)

Vom Verarbeitungsziel von HanderInterceptor ausschließen

Im leeren Projekt TERASOLUNA 5.x wird standardmäßig der folgende "HandlerInterceptor" angewendet. Verhindern Sie daher, dass er beim Abrufen von Ressourcen aus WebJars angewendet wird.

src/main/resources/META-INF/spring/spring-mvc.xml


<mvc:interceptor>
    <mvc:mapping path="/**" />
    <mvc:exclude-mapping path="/resources/**" />
    <mvc:exclude-mapping path="/webjars/**" /> <!--★ Ergänzung-->
    <mvc:exclude-mapping path="/**/*.html" />
    <bean
        class="org.terasoluna.gfw.web.logging.TraceLoggingInterceptor" />
</mvc:interceptor>

Zusammenfassung

Mit WebJars

Da es einen Verdienst gibt, möchte ich ihn positiv nutzen.

Referenzseite

Recommended Posts

Aktivieren Sie WebJars für leere Projekte in TERASOLUNA 5.x (= Spring MVC).
So realisieren Sie mit TERASOLUNA 5.x (= Spring MVC) das Hochladen großer Dateien
[Java Spring MVC] Entwicklungsbestätigungscontroller
Ermöglichen Sie die Code-Vervollständigung in Eclipse für Mac
Funktionsweise des Dispatcher-Servlets in Spring MVC