Bill
Bill

Reputation: 536

Servlet mapping direct JSP files rather than using a Servlet to manage the URL requests

I am redoing the URL mapping structure within my Java web application. I am trying to find the most efficient and proper way to map the servelets and resources to their proper URLs.

There are two strategies that I have been able to create, but I am not sure which is more efficient.

Mapping All urls to one Servlet which Handles the requests

In this case I have a Servlet named "URL", with the following servlet mapping:

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

The url Servlet is set up like such as an example and works fine:

String task = request.getRequestURI().substring(request.getContextPath().length());
if ("/home".equals(task)){
    RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/home.jsp");
    dispatcher.forward(request, response);
}

The problem I initially had with this that all the static resources such as JS, Images, etc... weren't served. I had the option to create separate directories for the static content as a solution, but off the top of my head I switched to mapping it all directly in the web.xml.

Mapping it all directly in the web.xml.

In this case the url patterns are directly mapped to the JSPs and Servlets like so:

<servlet>
  <servlet-name>home</servlet-name>
  <jsp-file>/jsp/Home.jsp</jsp-file>
</servlet>
<servlet-mapping>
  <servlet-name>home</servlet-name>
  <url-pattern>/home</url-pattern>
</servlet-mapping>

Example:

localhost:8080/home <- home.jsp

localhost:8080/about <- about.jsp

localhost:8080/login <- doLogin servlet

Are these bad? Which would be a more efficient and proper way to map the urls to their intended JSP files and Servlets?

Upvotes: 2

Views: 36225

Answers (2)

Arka Maity
Arka Maity

Reputation: 11

The case of "home.jsp" is not same here

 RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/home.jsp")

and

<servlet>
 <servlet-name>home</servlet-name>
  <jsp-file>/jsp/**Home.jsp**</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>home</servlet-name>
<url-pattern>/home</url-pattern>
</servlet-mapping>

Upvotes: 1

Jan Vladimir Mostert
Jan Vladimir Mostert

Reputation: 13002

I use a combination of both, I define all the static pages in web.xml and right at the end of the web.xml, I create a catch-all that will handle dynamic pages.

So home, about, login, etc are all static pages, define them in web.xml Something like account/abc and blog/some-random-article is handled dynamically.

<servlet>
    <servlet-name>NotFound</servlet-name>
    <servlet-class>com.site.PageNotFoundServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>NotFound</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

If in your servlet code, if you don't know how to handle the url, in other words the url is something like /asdfadfasdf which you don't handle, throw a 404 back, if the url starts with /blog (from /blog/random-article), go to the blog page with the random-article as the content.

Upvotes: 4

Related Questions