Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I map a "root" Servlet so that other scripts are still runnable?

I'm trying to build a Servlet that calls a JSP page similar to the following:

public void doGet(HttpServletRequest req, HttpServletResponse resp)         throws IOException, ServletException {     req.getRequestDispatcher("/WEB-INF/main.jsp").forward(req, resp); } 

I need this Servlet to respond to the domain's root (eg: http://example.com/) so I'm using the following mapping in the web.xml:

<servlet-mapping>     <servlet-name>MainServlet</servlet-name>     <url-pattern>/*</url-pattern> </servlet-mapping> 

The problem I'm having is that this matches EVERYTHING, so when the dispatcher forwards to "/WEB-INF/main.jsp" this matches the url-pattern so the Servlet gets run again. This results in a loop that runs until it dies with a java.lang.StackOverflowError.

How can I match the root without preventing other scripts from being runnable?

like image 763
Jeremy Logan Avatar asked Jun 23 '09 02:06

Jeremy Logan


People also ask

Can servlet mapping have multiple url patterns?

Previous versions of the servlet schema allows only a single url-pattern in a filter mapping. For filters mapped to multiple URLs this results in needless repetition of whole mapping clauses.

What is servlet Mapping?

Servlet mapping specifies the web container of which java servlet should be invoked for a url given by client. It maps url patterns to servlets. When there is a request from a client, servlet container decides to which application it should forward to. Then context path of url is matched for mapping servlets.

How servlets are deployed?

5) How to deploy the servlet project They are as follows: By copying the context(project) folder into the webapps directory. By copying the war folder into the webapps directory. By selecting the folder path from the server.


1 Answers

Use an empty pattern, e.g.

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

The servlet 3.0 spec has clarified this:

The empty string ("") is a special URL pattern that exactly maps to the application's context root

So it should at least work on a 3.0 container, and I've verified that it works on Jetty 8

like image 164
nilskp Avatar answered Sep 21 '22 09:09

nilskp