Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

making the welcome page of a website to be a servlet

Tags:

java

servlets

Can I make the welcome-file of the website to be a servlet ? If yes , how ? I was trying something like :

 <welcome-file-list>
    <welcome-file>FilterForwarded</welcome-file>
</welcome-file-list>

<!-- FilterForwarded is a servlet -->

While deploying I do not see any error but when I try to open the website abc.com I get a message from the browser that it is unable to connect to this website.Why is it so ?

I want when anyone visits the website,I should be able to store the client's public IP. To do this I wrote a Filter which after taking the IP , passed it to the servlet (from there I could update the logs). After storing the IP , client be automatically redirected to index.jsp. Is there any way to achieve this ?

EDIT :

    <servlet-mapping>
       <servlet-name>FilterForwarded</servlet-name>
       <url-pattern>/FilterForwarded</url-pattern>
   </servlet-mapping>

This is the mapping defined in web.xml . When I use /FilterForwarded in welcome-file I get this message when I try to deploy : Bad configuration: Welcome files must be relative paths: /FilterForwarded

From the logs :

com.google.apphosting.utils.config.AppEngineConfigException: Welcome files must be relative paths: /FilterForwarded
at com.google.apphosting.utils.config.WebXml.validate(WebXml.java:125)
at com.google.appengine.tools.admin.Application.<init>(Application.java:150)
at com.google.appengine.tools.admin.Application.readApplication(Application.java:225)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:145)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:69)
at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:65)
like image 832
Suhail Gupta Avatar asked Sep 07 '12 11:09

Suhail Gupta


1 Answers

If you map the filter to /* you should be able to intercept all requests and then log the IP from there.

Or is your requirement to only log Client IP for the landing page?

If so, you could change the default servlet for the Servlet container, but bear in mind this will change the default servlet for all requests that do not match mappings in your web.xml.

<servlet-mapping>
    <servlet-name>FilterForwarded</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

A more complex, but potentially better solution, is to front your Java web container with a web server and use rewrite rules to proxy to your backend Servlets. This way will mean that you can control the Servlet that is accessed for your landing page without overriding the default servlet for all non-matching requests. This might be overkill for your problem though.

like image 186
groodt Avatar answered Oct 23 '22 19:10

groodt