We have a java web application with gradle build configuration which contains 2 modules as below:
project-web.war -- contains all statc files, js, jsp, etc. Also it contains all the project, spring configuration with rest controller layer.
project-main.jar -- contains all the business & DAO layer logic.
Currently we are deploying both of these modules in Apache tomcat. Our project is going through with some architectural changes & one of the requirement is to add all the static content in Apache server so that static content can be served quickly.
I am beginner in regard to Apache http web server. I have below questions:
If I put all the static contents in Apache http server, then can I remove all the static contents from project-web? Can both of these project exist separately?
Going forward static content of project will be in Apache http web server and web app will be deployed in Apache tomcat, in addition both of these server will be in different VM machine. How web app in tomcat can access static content from Apache web server in different VM machine?(E.g. how jsp can point to images?)
Would it be fine idea to create a separate project for just static content as it will independent of web project in future and just need to be deployed in Apache http server?
Answers for above questions will be appreciable & other related suggestions are also welcome. Thanks!
1) If I put all the static contents in Apache http server, then can I remove all the static contents from project-web?
Yes.
Can both of these project exist separately?
They can, but the stuff in the webapp will (should) never be accessed so what would be the point?
2) Going forward static content of project will be in Apache http web server and web app will be deployed in Apache tomcat, in addition both of these server will be in different VM machine. How web app in tomcat can access static content from Apache web server in different VM machine?(E.g. how jsp can point to images?)
The webapp doesn't need to access the images. The browser needs to access the images. The Apache HTTPD configuration can be set up to take care of that transparently without requiring any JSP changes.
3) Would it be fine idea to create a separate project for just static content as it will independent of web project in future and just need to be deployed in Apache http server?
Yes.
Related
As Tomcat is a widely used java web server, and Apache is also a web server, what's the different between them in real project usage?
After some research, I got a simple idea like,
Apache Tomcat <=> For java fans
Apache <=> More general web server, eg. PHP:XAMPP,LAMP
The differences between Apache and Apache Tomcat are:
Apache:
It is developed in C.
It is an HTTP server. That means that it serves files through HTTP protocol.
It can host applications coded in any programming languages, not just Java.
It is capable of request/response processing and load balancing.
It can generally handle requests for static html pages. However, it can still handle dynamic requests for pages coded in languages like PHP, Perl and Ruby.
Apache Tomcat:
It is developed in Java.
It is a JSP/Servlet container. That means it handles the lifecycle for servlets.
It is supposed to host applications those are coded in Java. However, it can also execute Perl scripts.
Beyond the basic request/response processing, it can also manage the entire JSP/Servlet lifecycle.
It can handle both static and dynamic content. The static page are generated using HTML, while the dynamic content are generated using Servlet and JSP.
Apache is more for a static web site with basic functions.
Apache tomcat is container above Apache which can used with Java backend project.
They can be used separately or run together.
Apache - It's a web server, which helps in serving static content mostly. But, it can also handle dynamic requests for pages coded in languages like PHP, Perl and Ruby.
Tomcat - It's an application server, which helps in deploying dynamic content using Java.
Apache Tomcat - Here, both are used in conjunction where Apache serves static content, and forwarding the requests for dynamic content to Tomcat.
Content refers to web pages.
I am using Glassfish v3.1 for a Java web application, which gets data from other servers as well. One of these servers is running Geoserver GIS. I can only have the Glassfish server on a public IP.
In order to load a map image, I can call from the JSF pages or any HTML page something like:
http://10.10.10.10:1234/map/query?someparameters&format=image/jpeg
which returns a jpeg image.
If I hardcode this into the pages, it works fine locally (i.e. when 10.10.10.10 is accessible by the browser) but of course fails remotely.
Other than grabbing the image as a file/stream through a bean and then serving it to the server, is there a simpler way to serve these images through the web server? Ideally using Glassfish as some kind of proxy that pushes all request for say http://myserver.com/map to http://10.10.10.10:1234?
HTTP Proxy Servlet looks like it will do what you are looking for. There are likely to be other methods (like putting GF and the geoserver behind an Apache server and using mod_proxy) that would work, too.
I am using Jetty for the first time to deploy a GWT web app connecting to a Restlet API and I am trying to understand the best way to use it.
I want to make it embeddable so that I can update config during run-time (allowing me to add new domain names etc).
Our web server currently runs Apache to serve a PHP web app and this will be our first time deploying a GWT app and using Jetty.
Is it possible to use Jetty in parallel with Apache (both serving requests on port 80) and since I am embedding it do I use Apache before it reaches Jetty? So Apache receives request and forwards to Jetty?
Both server cannot run on same port. But you can run both on same machine. So use a separate port for jetty.
Jetty receives the request through its own port and doesn't depend on other server.
I want to setup and Apache and Tomcat together and deploy my war file on the this setup. My question is how I separate my application for apache and tomcat ?Please give me example.
Thanks
Kumara
Generally I place static files as well as rewriting, AJP, and other customization filters at the Apache layer, pass through necessary URLs over to Tomcat and Servlet processing.
If you are completely contained in the .war and don't have a need for the features of a web server, Tomcat is perfectly happy serving HTTP directly.
Recently our Software Analytic provider (NETTRACKER) sent us a plugin in order to be able to capture visitors in a better way. This plugin is for Apache 1.x and Apache 2.x. They said and I quote
that since Apache Tomcat is built on Apache HTTP server the configuration of the plugin should be the same.
I have looked for a httpd.conf in our tomcat deployment but we cannot find one, the only configuration that is similar to that one is the server.xml under the /conf directory.
If someone has better information regarding these two incredible products (Apache HTTP server and Apache Tomcat) I will greatly appreciate to draw the differences.
EDIT:
In case you are curious we know that Apache Web Server and Tomcat can work together using the mod_jk option and other proxys. But this will be too complex for our deployment.
Apache Tomcat and Apache HTTP are completely different server technologies. It is impossible to use a plugin for Apache HTTP server with Tomcat.
Apache HTTP server is developed in C and so are the plug-ins. On the contrary Tomcat is now completely developed in Java. Tomcat doesn't only serve static content, but it can also serve JSP pages and servlets.
Tomcat is used for hosting Java Web Applications. It can sure serve static content - you can host a web application using only Tomcat. Secure connections are supported and the performance is also very good (comparable with the performance of HTTP server).
A plain installation of Apache serves static content. Using the appropriate plug-ins, HTTP requests can be redirected to an application server (Tomcat, JBoss, Glassfish) or a script language interpreter (PHP). With this way dynamic content can be generated. The big advantages of Apache are the numerous plug-ins available, which allows administrators to configure and monitor web sites any way they want and that is the most widespread server available. This makes it the most secure solution, since it is thoroughly tested and any discovered flaw is corrected very quickly.
The best solution would be to use Tomcat proxied by an Apache server. It isn't so difficult to set up. If you can't do this, then you can't take advantage of Apache's plug-ins.
You see this confusion all the time. Many people think that Apache is a web server where in reality it is the name of an organization that has a web server project called "The Apache HTTP Server Project". In short the web server is called HTTPD (D as in daemon or Unix process).
Tomcat is another Apache project. This project implements a Java servlet engine to serve JSP pages and servlets. Tomcat and HTTPD have nothing to do with each other. However, you can set up HTTPD and Tomcat so that they work together. This way you can have HTTPD serve all static content, do URL rewriting and much more fancy stuff that the built in Tomcat web server can't do (or can't do very well). Whenever a JSP page is requested, HTTPD will pass the request on to Tomcat. Tomcat will process the request and will hand the output back to HTTPD which in turn will send it to the client.
Apache has many interesting projects. E.g. there is also a project called Geronimo which is a Java Enterprise server (J2EE). You can e.g. choose to embed Tomcat inside Geronimo to handle requests for JSP's and servlets where Geronimo does the more enterprisy stuff (LDAP, Messaging etc.). And you guessed it probably already, you can use HTTPD as a static content server for Geronimo as well.
totally bogus. Apache httpd plugins are written in C, Tomcat is pure Java.
Tomcat is a Java servlet engine. It can be hosted under Apache or IIS or quite a number of other external facing web servers. It sounds like you may be currently running your Tomcat instance standalone...
If you serve the JSP/servlets off of port 8080 and have it do things standalone, on the same host machine that Apache is running on, this can allow you to have them loosely coupled. Having multiple web servers fielding independent requests is not recommended, especially if you want to use server-based authentication along with Apache. Typically, you have one outside facing server that shepherds everything through it... Apache does this quite well, and the plugin you mention probably relies on this type of setup (everything gets wired through Apache) for its features/capabilities, based on your brief description of it.
If you would like to serve up your Tomcat servlets under Apache, you could configure apache to forward a class of URIs to your tomcat server instances. you could achieve this type of forwarding through mod_rewrite. this is a slower option performance-wise, as it adds slight overhead on everything you server up. You could also proxy incoming requests via a CGI mechanism similarly, from Apache to Tomcat.
mod_jk will simplify deployment and increase performance for placing Tomcat into an Apache server config. It is pretty painless to configure if you follow the docs, so I am not sure what you mean by "too complex" for your deployment -- if you want Apache and have Tomcat already, it would seem only a matter of slight config changes to get mod_jk downloaded and installed.