I want to build and deploy my Angular 2 front end to a Tomcat application server. For getting started I\'ve followed exactly the steps of the following introduction: https:/
I had to use a slight variation of @alokstar's answer. I had to add a "-d" or "--deploy" flag as well. This could be due to change in version.
I am running angular-cli version: 1.0.0-beta.28.3
Note: * The ng build documents production flag as "-prod" and not "--prod"
With my tomcat running on port 8080, I could access the app using: http://localhost:8080/my_app
I had a similar situation. The front-end app was ready using angular-2 and webpack and I wanted to deploy it on tomcat server. I followed the following steps:
Run command “ng build --prod --bh /[URL you want to extend for production]” on your Angular 2 project folder.
It will create dist folder in your angular2 app & 'your-project-name' from step 1 will be used on the tomcat server URL.
Copy all the files of newly created dist folder & paste them in webapps folder of Java application.
Create war file.
Deploy that war on server.
Hope it helps!
The problem is related to the tag <base href="/" />
. This is just wrong when using a webserver like tomcat or trying to load the app directly from filesystem with firefox index.html
. This must be changed to <base href="./" />
. When the app still has problems check how the script files are imported. I tried to use angular2-webpack with tomcat and also needed to change all script tags to not use a leading slash in there src attribute.
<script src="js/vendor.js" ></script>
With webpack the behavior is controlled by the attribute output.publicPath
. In the angular2 documentation and in the angular2-webpack this is set to
output.publicPath="/"
Which leads to absolute path in the links. When removed webpack will use relative paths and the links for scripts and images work.
If you are not using HashLocationStrategy so refresh will give you 404 for tomcat deployment. In such case you have to use web.xml for your solution and provide all your route to point to index.html. Here is the code snippets that you can apply for your path and then Angular routes will handle this.
<servlet>
<servlet-name>index</servlet-name>
<jsp-file>/index.html</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/home</url-pattern>
</servlet-mapping>
As suggested earlier by other configure your index.html(by ) to load the app.
This is how i deployed my application on tomcat. It all depends on the base href you are providing in the index.html. All the images should be kept under 'assets' folder. And the path for any image in the project must be relative starting from this folder ie.
src="assets/img/img1.jpg"
As doing this, will remove the difficulty of file not found, which will arise in the deployment of the application.
Now, these steps will do the rest.
Application will be accessible at http://localhost:8080/my_app
If you dont want the context 'myApp' for your application, then try doing base href='./' Or just make the production build using the command ng build --prod
This helped in my case. Hope, it helps.