У меня есть одностраничное веб-приложение, которое при сборке должно быть установлено на сервере приложений java-ee, например Glassfish. То есть я должен упаковать его в WAR.
Это одностраничное веб-приложение сильно отделено от его внутреннего приложения, оно должно быть само по себе сборочным и развертываемым. Таким образом, WAR должен включать и включать одностраничное веб-приложение.
Если возможно, я бы хотел решить эту проблему без использования кода Java.
В случае одностраничного приложения маршрутизация URL должна работать следующим образом:
Если запрошенный URL-адрес соответствует файлу статического ресурса (html, js, css и т. Д.), Этот файл должен быть обработан.
В любом другом случае index.html
должен быть обслужен.
Если вторая точка не применяется, к приложению (по умолчанию) можно получить доступ только в точке входа (index.html
). И не с URL-адресами, указывающими непосредственно на какие-либо подчиненные.
Существует обходной путь, поскольку в Ember.js можно установить опцию для использования URL-адресов субшоу на основе хеша. Но это имеет свои ограничивающие недостатки, и я бы хотел полностью их избежать.
Однако решение, которое у меня есть в настоящее время, работает только путем включения указанного обходного пути. Я использую Maven и maven-assembly-plugin
для достижения этой цели.
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>My App</name>
<build>
<finalName>finalName</finalName>
<plugins>
<plugin>
<!-- assemble static content -->
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>static.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
static.xml
(dist
- это каталог, куда ember-cli помещает скомпилированные ресурсы, которые мне нужно включить.)
<?xml version="1.0" encoding="UTF-8"?>
<assembly>
<id>static</id>
<formats>
<format>war</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>dist</directory>
<includes>
<include>**</include>
</includes>
<excludes>
<exclude>WEB-INF/*</exclude>
</excludes>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>WEB-INF</directory>
<includes>
<include>**</include>
</includes>
<outputDirectory>/WEB-INF</outputDirectory>
</fileSet>
</fileSets>
</assembly>
У меня также есть файл web.xml в папке WEB-INF, но он по существу пуст.
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
</web-app>
Итак, чтобы подвести итог вопроса: возможно ли иметь указанную логику маршрутизации без написания какого-либо Java-кода, то есть без какого-либо "склеивания" или "посредника" модуля на стороне сервера?