单个 WAR 中的 Angular 4 和 Java 后端项目
Posted
技术标签:
【中文标题】单个 WAR 中的 Angular 4 和 Java 后端项目【英文标题】:Angular 4 and Java BackEnd Project in a single WAR 【发布时间】:2018-07-11 13:23:50 【问题描述】:我创建了一个 Angular 4 项目并使用 JAVA REST API 项目作为后端。我需要我可以将我的 angular 4 项目作为 JAVA 战争文件中的静态内容移动。
我为 Angular 项目创建了生产版本,并从 dist 文件夹复制文件并将其粘贴到 java 项目的 webcontent 中。我能够读取角度项目的索引文件,但其他文件给出 404。
请帮助我如何在我的 java 项目中移动我的 angular 项目以获取用于生产的单个 war 文件。
WEB.XML :-
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>userInformation</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey RESTful Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.newgen.ap2</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>com.newgen.ap2.CrossOrigin</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey RESTful Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
【问题讨论】:
你为什么要这样做? 检查这个***.com/questions/45915379/…或这个github.com/marco76/java-demo 这两个都用 Maven 但我不想用 maven... @NishantVarshney 是的,我明白是什么,这就是让我感到困惑的原因。您确定要在每次更改 UI 中的标签时更改后端的部署?他们甚至没有理由必须在同一台服务器上运行,更不用说同一个 war 文件了 【参考方案1】:将您的 web.xml 更改为以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>userInformation</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey RESTful Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.newgen.ap2</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>com.newgen.ap2.CrossOrigin</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Jersey RESTful Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
这个想法是使用不同的 Servlet 来为您的静态资源提供服务。
这里还有一些可能有用的 SO 帖子:
Servlet filters' order of execution
How are Servlet url mappings in web.xml used?
What happens if I have two servlet mappings in web.xml that match a request?
【讨论】:
以上是关于单个 WAR 中的 Angular 4 和 Java 后端项目的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Spring Boot Rest 服务和 Angular App 捆绑在一个 war 文件中
使用war将spring-boot和angular 7应用程序部署到tomcat 8.5中
如何根据 Angular 6 中的 Firebase 实时数据库中的键获取单个记录