running gwt server code on apache

149 views
Skip to first unread message

dav...@googlemail.com

unread,
Nov 8, 2023, 5:47:52 AM11/8/23
to GWT Users
On my development machine I test my code in jetty. The client code calls a server to get the client ip address. This works fine and I see a server at localhost:8080/foo/bar as I expect. If I browse to it I get a 405 as GET request are not allowed, but that's not a problem as it does the job it's supposed to do ie pass request address back to client code.

It does not work in production were the code is run on apache; the server is not created as on jetty, so that's not unexpected. I first suspicion was that modsecurity is preventing the creation of the server, but that proves to be not so. I also see the same failure over http as over https.

I have a pretty basic apache2 setup on debian (apart from adding modsecurity) and the site config is pretty bog standard for both http and https. I'm guessing I need to tweak something somewhere to allow the server to be created?

Ed

unread,
Nov 8, 2023, 7:31:36 AM11/8/23
to google-we...@googlegroups.com
jetty is application server while apache2  is a web server.  tomcat is the apache app server.

--
You received this message because you are subscribed to the Google Groups "GWT Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-tool...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-web-toolkit/6aafe876-bff0-4b02-86f2-239e94201324n%40googlegroups.com.

dav...@googlemail.com

unread,
Nov 8, 2023, 12:31:19 PM11/8/23
to GWT Users
hi Ed

Yes understood and most of  the "app" is GWT produced javascript, part of a web page, which I've always run on apache2 and don't really want to change that for the ip address supplying servelet which is a recent addition. I already also run  a backend tomcat with an AJP connection to apache2 for a couple of  java coded apps. So is setting up the WEB-INF directory of my GWT "app" separately in tomcat the preferred way to do this or at least a possibility?

Prior to adding  the server code the WEB_INF directory was not needed by apache2 I believe, rather just the javascript, directory. so that does appear to be a reasonable way to go?

David

Leon Pennings

unread,
Nov 9, 2023, 8:40:02 AM11/9/23
to GWT Users
You can deploy the web application on tomcat and use mod_proxy on apache2 to forward https (or http if required) to tomcat on 8080 (or another port if required)

Op woensdag 8 november 2023 om 18:31:19 UTC+1 schreef dav...@googlemail.com:

dav...@googlemail.com

unread,
Nov 9, 2023, 12:34:00 PM11/9/23
to GWT Users
yeah that sounds doable, I think it's along the lines I was already thinking

So mydomain..com is served by apache2 and includes the GWT javascript

Apache2 also has a conf for subdomain.mydomain.com that creates a backend  AJP to tomcat where I serve subdomain.mydomain.com/appA and subdomain.mydomain.com/appB

So I just create a ROOT folder in webapps, pop a copy of my GWT code's WEB-INF there and that does a job.

But not the job! The servelet that GWT server code creates to pass the remote ip to the client code is now running at subdomain.mydomain.com/foo/bar instead of mydomain.com/foo/bar, so the GWT produced client javascript served at mydomain.com and the servelet can't talk.

I feel there must be a solution, but just now I don't see it and even thus far, I feel I'm jumping through hoops. Am I missing a recommended way to do this?

Leon

unread,
Nov 9, 2023, 12:47:46 PM11/9/23
to google-we...@googlegroups.com
As far as I know, gwt uses relative paths wrt it's own context root. So the client calls should always be able to reach the gwt servlets. I've never had to configure anything to make that happen.
If you setup apache2 to forward virtual name based hosts to tomcat, apache2 is nothing more than a proxy server to 127.0.0.1:8080. Then you can keep the tomcat fairly simple and straightforward.
There are multiple examples online of how to deploy a .war file to tomcat on the internet. It's nothing more than that.


You received this message because you are subscribed to a topic in the Google Groups "GWT Users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/google-web-toolkit/z7HMUEfBOZk/unsubscribe.
To unsubscribe from this group and all its topics, send an email to google-web-tool...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-web-toolkit/63dd206e-2a3c-4d5f-8fba-fbd036aa2d2an%40googlegroups.com.

Ed

unread,
Nov 9, 2023, 2:33:37 PM11/9/23
to google-we...@googlegroups.com
i think gwt has a same source domain filter

dav...@googlemail.com

unread,
Nov 10, 2023, 11:24:24 AM11/10/23
to GWT Users
Leon, Ed

Thanks for looking at this. I realized I have an apache2 problem at this stage more than a GWT one.

A bit of proxy code in tomcat and apache2 + enabling  proxy_http has fixed the problem. Most of my  enlightenment came from


and also seeing that an apache module was needed from the logs. Production machine is debian and proxy_http does not seem to be enabled by default.

I expect there are other ways to skin this cat, especially since I'm using AJP anyway, but I think I'll leave it here :-)

David

dav...@googlemail.com

unread,
Nov 10, 2023, 12:34:14 PM11/10/23
to GWT Users
Spot why this can never work ie running a site on apache2 that proxies to a webapp running on tomcat to get the request ip address

clue -whose ip address is going to be returned?  :-)

Leon

unread,
Nov 10, 2023, 12:48:08 PM11/10/23
to google-we...@googlegroups.com
What can never work? 
I have done this many times with gwt applications. Works like charm.

dav...@googlemail.com

unread,
Nov 10, 2023, 1:22:20 PM11/10/23
to GWT Users
Leon

The servelet runs at subdomain.mydomain.com/foo/bah. To enable the client code on mydomain.com to connect, I configure apache and tomcat to make that servelet also appear at mydomain.com/foo/bah by proxying. It's great! I get the request ip as I wanted, but the request is from the server itself, not from the remote ip of the end user.

I think I've read that there is a way to allow java rpc to go outside the originating domain? I will look into that.

Leon

unread,
Nov 10, 2023, 1:26:21 PM11/10/23
to google-we...@googlegroups.com
If you want the request ip in your servlet use;

getThreadLocalRequest().getHeader("X-Forwarded-For");


dav...@googlemail.com

unread,
Nov 10, 2023, 3:05:18 PM11/10/23
to GWT Users
Hi Leon

I owe you pizza :-)

I wasn't aware of that method and it supplies the fix; *everything* working as I hoped now.

Thanks very much
Reply all
Reply to author
Forward
0 new messages