Saturday, 9 August 2014

Servlets : URL Rewriting Demo

🚀 Master Java Servlets & Web Development!

Subscribe to Ram N Java for clean, beginner-friendly coding tutorials and practical guides!

👉 Click Here to Subscribe Now

What is URL Rewriting in Java Servlets?

HTTP is an inherently stateless protocol, which means the server does not remember user data between multiple web requests. URL Rewriting is a fundamental session tracking mechanism where extra session information (such as a session ID or custom parameter) is appended directly to the end of a hyperlink URL as a query parameter (e.g., targetURL?paramName=value).

Unlike browser cookies, URL rewriting does not require cookie support and functions seamlessly even when cookies are disabled on the client machine.

Step 1: Create the User Input Page (index.html)

Start by creating an HTML form that collects the initial data from the client and submits it to your first servlet:

<form action="FirstServlet" method="post">
  Enter User Name: <input type="text" name="userName" /><br><br>
  <input type="submit" value="Proceed" />
</form>

Step 2: Rewrite the URL in the First Servlet (FirstServlet.java)

In the first servlet, read the parameter from the request and dynamically construct a hyperlink containing the user data appended in the query string:

String userName = request.getParameter("userName");

PrintWriter out = response.getWriter();
out.println("<h2>Hello, " + userName + "!</h2>");
out.println("<p>Click the link below to continue:</p>");
out.println("<a href='SecondServlet?uname=" + userName + "'>Go to Second Servlet</a>");

Step 3: Retrieve the Data in the Target Servlet (SecondServlet.java)

When the user clicks the rewritten link, the target servlet extracts the appended query parameter via request.getParameter():

String userName = request.getParameter("uname");

PrintWriter out = response.getWriter();
out.println("<h2>Welcome to Second Servlet!</h2>");
out.println("<p>Retrieved User Name: <strong>" + userName + "</strong></p>");

Pros and Cons of URL Rewriting

  • Advantage: Works reliably across all browsers without depending on client cookie permissions.
  • Advantage: No server session memory footprint is required for simple parameter forwarding.
  • Limitation: Visible in the browser's address bar and history; sensitive information (like passwords) must never be sent this way.
  • Limitation: Only links and navigation generated with rewritten query strings will maintain the state.

📺 Related Session Tracking Tutorials

Expand your understanding of session management in Servlets with these tutorials:


Click here to watch in Youtube : https://www.youtube.com/watch?v=0Ch2Bfea5yw

Click the below Image to Enlarge
Servlets : URL Rewriting Demo
Servlets : URL Rewriting Demo
FirstServlet.java
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FirstServlet extends HttpServlet
{
    private static final long serialVersionUID = 1L;

    public void init() throws ServletException
    {
        System.out.println("-----------------------------------------");
        System.out.println(" Init method is called in "
                + this.getClass().getName());
        System.out.println("--------------------------------------");
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        String userName = request.getParameter("userName");
        out.print("Welcome " + userName);

        // appending the username in the query string
        out.print("<a href='servlet2?uname=" + userName +"'> :  visit</a>");

        out.close();
    }

    public void destroy()
    {
        System.out.println("-----------------------------------------");
        System.out.println(" destroy method is called in "
                + this.getClass().getName());
        System.out.println("-----------------------------------------");
    }

}
SecondServlet.java
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SecondServlet extends HttpServlet
{
    private static final long serialVersionUID = 1L;

    public void init() throws ServletException
    {
        System.out.println("-----------------------------------------");
        System.out.println(" Init method is called in "
                + this.getClass().getName());
        System.out.println("--------------------------------------");
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        // getting value from the query string
        String userName = request.getParameter("uname");
        out.print("Hello " + userName);

        out.close();

    }

    public void destroy()
    {
        System.out.println("-----------------------------------------");
        System.out.println(" destroy method is called in "
                + this.getClass().getName());
        System.out.println("-----------------------------------------");
    }

}
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    metadata-complete="true" version="3.0">
    <display-name>URLRewritingDemo</display-name>
    <description>
        This is a simple web application with a source code organization
        based on the recommendations of the Application Developer's Guide.
    </description>
    <servlet>
        <servlet-name>s1</servlet-name>
        <servlet-class>FirstServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>s2</servlet-name>
        <servlet-class>SecondServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>s1</servlet-name>
        <url-pattern>/servlet1</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>s2</servlet-name>
        <url-pattern>/servlet2</url-pattern>
    </servlet-mapping>
</web-app>
index.html
<html>
<body>
    <form action="servlet1">
        Name:<input type="text" name="userName" /><br /> 
        <input type="submit" value="go" />
    </form>
</body>
</html>


Environment Used 

JDK version :1.7.0_51
Tomcat version : 7.0.50 

To Download URLRewritingDemoApp Project Click the below link

https://sites.google.com/site/javaee4321/jdbc/URLRewritingDemoApp.zip?attredirects=0&d=1

See also:

  • Servlets Tutorial
  • All Design Patterns Links
  • JDBC Tutorial
  • No comments:

    Post a Comment

    Tutorials