Thursday 29 April 2010

Example program for HttpSession

Steps:
1. create any folder (ex: httpsess)
2. maintain the folder structure
3. set the classpath for tomcat server, jdbc connector
4. deploy your application(your folder ex" httpsess) in webapps folder under Tomcat server
5. start the server
6. execute your application in any browser


1. create any folder (ex: httpsess)
2. maintain the folder structure
Login.html
reg.jsp
registration.jsp
1. DriverConnection.java
2. UserDAO.java
3.Product.java
4. ProductDAO.java
5. LoginServlet.java
6. UserHomeServlet.java
7. GetProductServlet.java
8. AddProductServlet.java
9. GetCartDetailsServlet.java

10. LogoutServlet.java
   
   4.  create WEB-INF folder
         Under WEB-INF folder
        (a)  create classes folder
        (b)  create lib folder(mandatory): bcoz we are using jdbc drivers so mysql-connector-java-5.1.18-bin.jar should be copied into this folder
        (c)  create web.xml file for configuration


<html>
<head>
<title>Shopping Cart Example</title>

</head>

<body>
<table width="95%" height="82%" border="0">
  <tr align="center"> 
    <td height="39" colspan="2"><strong><font size="5">MyShopping Site</font></strong></td>
  </tr>
  <tr> 
    <td width="21%" height="478" valign="top"><p>&nbsp;</p>
      <blockquote> 
        <p>&nbsp;</p>
        </blockquote></td>
    <td width="70%" align="center" valign="middle"> 
      <p><font size="6">Login</font></p>
      <form name="form1" method="post" action="login">
        <table width="36%" border="0">
          <tr> 
            <td width="45%"><strong>User Name</strong></td>
            <td width="55%"><input type="text" name="uname"></td>
          </tr>
          <tr> 
            <td><strong>Password</strong></td>
            <td><input type="password" name="pass"></td>
          </tr>
          <tr> 
            <td>&nbsp;</td>
            <td>&nbsp;</td>
          </tr>
          <tr align="right"> 
            <td><div align="center"> 
                <input type="submit" name="Submit" value="LogIN">
              </div></td>
            <td align="center"><input type="reset" name="Submit2" value="Reset"></td>
          </tr>
          <tr align="right">
          <td>
           <div align="center">
           <input type="button" value="Put Your Text Here" onClick="window.location.href='reg.jsp'">
         </div></td>
          </tr>
        </table>
      </form></td>
  </tr>
  <tr align="center"> 
    <td colspan="2"><em>&copy; Copyrights 2005-09</em></td>
  </tr>
</table>
</body>
</html>
//reg.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="registration.jsp" method="post">
 <table border="0" width="30" cellpadding="5">
  <thead>
   <tr colspan="2"></tr>
   <tr>
    <td>First name</td>
    <td><input type="text" name="fname"/></td>
    </tr>
    <tr>
     <td>Last Name</td>
     <td><input type="text" name="lname"/></td>
     </tr>
     <tr>
     <td>Email</td>
     <td><input type="text" name="email"/></td>
     </tr>
     <tr>
      <td>User Name</td>
      <td><input type="text" name="uname"/></td>
      </tr>
      <tr>
       <td>Password</td>
       <td><input type="password" name="pass"/> </td>
      </tr>
      <tr>
      <td><input type="submit" value="Submit" /></td>
      <td><input type="reset" value="Reset"/></td>
      </tr>
      <tr>
      <td colspan="2">Already Registered!! <a href="index.jsp">Login here</a></td>
      </tr>
  </thead>
 </table>
</form>
</body>
</html>
//registration.jsp
<%@ page import="java.sql.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
 String fname=request.getParameter("fname");
 String lname=request.getParameter("lname");
 String email=request.getParameter("email");
 String user=request.getParameter("uname");
 String pass=request.getParameter("pass");
 Class.forName("com.mysql.jdbc.Driver");
 Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root", "admin");
 Statement st = con.createStatement();
 String query="insert into registration values (fname,lname,email,user,pass)";
 //Execute the query
 int count=st.executeUpdate(query);
 out.println("Number of Rows effected by this query="+count);
 /*out.println(fname);
 out.println(lname);
 out.println(email);
 out.println(user);
 out.println(pass);*/
 if(count>0)
 out.println("Registered successfully"+"<a href='index.jsp'> Go to Login</a>");
 else
response.sendRedirect("index.jsp");
 %>
</body>
</html>
//create the servlet programs
1. DriverConnection.java
2. UserDAO.java
3.Product.java
4. ProductDAO.java
5. LoginServlet.java
6. UserHomeServlet.java
7. GetProductServlet.java
8. AddProductServlet.java
9. GetCartDetailsServlet.java
10. LogoutServlet.java


Maintain the folder structure:
//DriverConnection.java
/**
 *
 */
package com.rajendra.servlets;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 * @author rajendra
 *
 */
public class DriverConnection {

public static Connection getConnection()
throws Exception{
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test","root","admin");
}
}

////UserDAO.JAVA

package com.rajendra.servlets;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;


public class UserDAO {
public boolean validate(String uname, String pass){
try {
Connection con=DriverConnection.getConnection();
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(
"select * from userdetails where uname=\'"+uname+"\' and pass=\'"+pass+"\'");
return rs.next();
}//try
catch(Exception e){
e.printStackTrace();
}
return false;
}
}

//3.Product.java
package com.rajendra.servlets;


public class Product implements java.io.Serializable {
String code, name; 
double qty;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getQty() {
return qty;
}
public void setQty(double qty) {
this.qty = qty;
}
public boolean equals(Object o){
if (o instanceof Product)
return ((Product)o).code.equals(code);
return false;
}

}

//4. ProductDAO.java
package com.rajendra.servlets;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;

public class ProductsDAO {

public Collection getProducts(){
try {
Connection con=DriverConnection.getConnection();
Statement st=con.createStatement();
ResultSet rs=st.executeQuery("select * from products");
/*
* Create the table prodcuts in test database 
*/

ArrayList products=new ArrayList();
while (rs.next()){
Product p=new Product();
p.code=rs.getString(1);
p.name=rs.getString(2);
p.qty=rs.getDouble(3);
products.add(p);
}
return products;
}//try
catch(Exception e){
e.printStackTrace();
}
return null;
}

}

//5. LoginServlet.java
package com.rajendra.servlets;

import java.io.IOException;

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

public class LoginServlet extends HttpServlet {

public void init(){
ud=new UserDAO();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

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

ud=new UserDAO();
if (ud.validate(uname,pass)){
//start a session
HttpSession hs=request.getSession();
hs.setAttribute("UserName",uname);
RequestDispatcher rd=request.getRequestDispatcher("home");
rd.forward(request,response);
}
else{
RequestDispatcher rd=request.getRequestDispatcher("Login.html");
rd.forward(request, response);
}
}
UserDAO ud;

}

//6. UserHomeServlet.java
package com.rajendra.servlets;

import java.io.IOException;
import java.io.PrintWriter;

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

public class UserHomeServlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

HttpSession hs=request.getSession(false);
if (hs==null){
RequestDispatcher rd=request.getRequestDispatcher("Login.html");
rd.forward(request, response);
return;
}
String uname=(String)hs.getAttribute("UserName");

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html> <head>");
out.println("<title>Shopping Cart Example</title>");
out.println("</head> <body>");
out.println("<table width='100%' height='90%' border='1'>");
out.println("<tr align='center'> ");
out.println("<td height='39' colspan='2'><strong><font size='5'>MyShopping Site</font></strong></td>");
out.println("</tr>");
out.println("<tr> ");
out.println("<td width='18%' height='500' valign='top'><p>&nbsp;</p>");
out.println("<blockquote>");
out.println("<p><a href='"+response.encodeURL("getProducts")+"'>View Products</a></p>");
out.println("<p><a href='"+response.encodeURL("getCart")+"'>View Cart Details</a></p>");
out.println("<p><a href='"+response.encodeURL("logout")+"'>Logout</a></p>");
out.println("</blockquote></td>");
out.println("<td width='82%' align='left' valign='top'><font size='6'>Welcome , "+uname+"</font></td>");
out.println("</tr>");
out.println("<tr align='center'> ");
out.println("<td colspan='2'><em>&copy;Copyrights 2005-09</em></td>");
out.println("</tr>");
out.println("</table>");
out.println("</body> </html>");
out.flush();
out.close();
}

}

//7. GetProductServlet.java

package com.rajendra.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.Iterator;

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

public class GetProductsServlet extends HttpServlet {

public void init() throws ServletException {
productsdao=new ProductsDAO();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

HttpSession hs=request.getSession(false);
if (hs==null){
RequestDispatcher rd=request.getRequestDispatcher("Login.html");
rd.forward(request, response);
return;
}
String uname=(String)hs.getAttribute("UserName");


response.setContentType("text/html");
PrintWriter out = response.getWriter();

out.println("<html> <head>");
out.println("<title>Shopping Cart Example</title>");
out.println("</head> <body>");
out.println("<table width='100%' height='90%' border='1'>");
out.println("<tr align='center'> ");
out.println("<td height='39' colspan='2'><strong><font size='5'>MyShopping Site</font></strong></td>");
out.println("</tr>");
out.println("<tr> ");
out.println("<td width='18%' height='500' valign='top'><p>&nbsp;</p>");
out.println("<blockquote>");
out.println("<p><a href='"+response.encodeURL("getProducts")+"'>View Products</a></p>");
out.println("<p><a href='"+response.encodeURL("getCart")+"'>View Cart Details</a></p>");
out.println("<p><a href='"+response.encodeURL("logout")+"'>Logout</a></p>");
out.println("</blockquote></td>");
out.println("<td width='82%' align='left' valign='top'><p><font size='6'>Welcome , "+uname+"</font></p>");

out.println("<form name='form1' method='post' action='"+response.encodeURL("addProducts")+"'>");
out.println("<table width='100%' border='1'>");
out.println("<tr> ");
out.println("<th width='8%'>Check</th>");
out.println("<th width='24%'>Product Code</th>");
out.println("<th width='28%'>Product Name</th>");
out.println("<th width='20%'>Available Quantity</th>");
out.println("<th width='20%'>Required Quantity</th>");
out.println("</tr>");

Collection products=productsdao.getProducts();
if (products==null){
out.println("<tr><td colspan=5 align=center>");
out.println("No Products Available");
out.println("</td></tr>");
}
else{
Iterator i=products.iterator();
while(i.hasNext()){
Product p=(Product)i.next();
out.println("<tr>");
out.println("<td align='center'>");
out.println("<input type='checkbox' name='products' value='"+p.getCode()+"'/>");
out.println("<input type='hidden' name='"+p.getCode()+"Name' value='"+p.getName()+"'/></td>");
out.println("<td>"+p.getCode()+"</td>");
out.println("<td>"+p.getName()+"</td>");
out.println("<td>"+p.getQty()+"</td>");
out.println("<td><input type='text' name='"+p.getCode()+"'/></td>");
out.println("</tr>");
}
}
out.println("</table>");
out.println("<br/><center>");
out.println("<input type=submit value='Add Products to Cart'/>");
out.println("</center>");
out.println("</form>");
out.println("</td></tr>");
out.println("<tr align='center'> ");
out.println("<td colspan='2'><em>&copy;Copyrights 2005-09</em></td>");
out.println("</tr>");
out.println("</table>");
out.println("</body> </html>");

out.flush();
out.close();
}
ProductsDAO productsdao;

}

//8. AddProductServlet.java
package com.rajendra.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

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

public class AddProductsServlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

HttpSession hs=request.getSession(false);
if (hs==null){
RequestDispatcher rd=request.getRequestDispatcher("Login.html");
rd.forward(request, response);
return;
}
String uname=(String)hs.getAttribute("UserName");

ArrayList products=(ArrayList)hs.getAttribute("products");
if (products==null){
products=new ArrayList();
hs.setAttribute("products",products);
}
String[] pcodes=request.getParameterValues("products");

for (int i=0;i<pcodes.length;i++){
if (request.getParameter(pcodes[i]).equals(""))
continue;
Product p=new Product();
p.code=pcodes[i];
int j=products.indexOf(p);
if (j!=-1){
p=(Product)products.get(j);
p.qty+=Double.parseDouble(request.getParameter(pcodes[i]));
}
else{
p.name=request.getParameter(pcodes[i]+"Name");
p.qty=Double.parseDouble(request.getParameter(pcodes[i]));
products.add(p);
}
}//for

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html> <head>");
out.println("<title>Shopping Cart Example</title>");
out.println("</head> <body>");
out.println("<table width='100%' height='90%' border='1'>");
out.println("<tr align='center'> ");
out.println("<td height='39' colspan='2'><strong><font size='5'>MyShopping Site</font></strong></td>");
out.println("</tr>");
out.println("<tr> ");
out.println("<td width='18%' height='500' valign='top'><p>&nbsp;</p>");
out.println("<blockquote>");
out.println("<p><a href='"+response.encodeURL("getProducts")+"'>View Products</a></p>");
out.println("<p><a href='"+response.encodeURL("getCart")+"'>View Cart Details</a></p>");
out.println("<p><a href='"+response.encodeURL("logout")+"'>Logout</a></p>");
out.println("</blockquote></td>");
out.println("<td width='82%' align='left' valign='top'><p><font size='6'>Welcome , "+uname+"</font></p>" );
out.println("Products Added successfully to your cart</td>");
out.println("</tr>");
out.println("<tr align='center'> ");
out.println("<td colspan='2'><em>&copy;Copyrights 2005-09</em></td>");
out.println("</tr>");
out.println("</table>");
out.println("</body> </html>");
out.flush();
out.close();
}


}

//9. GetCartDetailsServlet.java
package com.rajendra.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.Iterator;

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

public class GetCartDetailsServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession hs=request.getSession(false);
if (hs==null){
RequestDispatcher rd=request.getRequestDispatcher("Login.html");
rd.forward(request, response);
return;
}
String uname=(String)hs.getAttribute("UserName");


response.setContentType("text/html");
PrintWriter out = response.getWriter();

out.println("<html> <head>");
out.println("<title>Shopping Cart Example</title>");
out.println("</head> <body>");
out.println("<table width='100%' height='90%' border='1'>");
out.println("<tr align='center'> ");
out.println("<td height='39' colspan='2'><strong><font size='5'>MyShopping Site</font></strong></td>");
out.println("</tr>");
out.println("<tr> ");
out.println("<td width='18%' height='500' valign='top'><p>&nbsp;</p>");
out.println("<blockquote>");
out.println("<p><a href='"+response.encodeURL("getProducts")+"'>View Products</a></p>");
out.println("<p><a href='"+response.encodeURL("getCart")+"'>View Cart Details</a></p>");
out.println("<p><a href='"+response.encodeURL("logout")+"'>Logout</a></p>");
out.println("</blockquote></td>");
out.println("<td width='82%' align='left' valign='top'><p><font size='6'>Welcome , "+uname+"</font></p>");

out.println("<center>Your cart contains the following products");
out.println("<table width='80%' border='1'>");
out.println("<tr>");
out.println("<th width='24%'>Product Code</th>");
out.println("<th width='28%'>Product Name</th>");
out.println("<th width='20%'>Quantity</th>");
out.println("</tr>");

Collection products=(Collection)hs.getAttribute("products");
if (products==null){
out.println("<tr><td colspan=3 align=center>");
out.println("You have not added any products into cart");
out.println("</td></tr>");
}
else {
Iterator i=products.iterator();
while(i.hasNext()){
Product p=(Product)i.next();
out.println("<tr>");
out.println("<td>"+p.getCode()+"</td>");
out.println("<td>"+p.getName()+"</td>");
out.println("<td>"+p.getQty()+"</td>");
out.println("</tr>");
}
}
out.println("</table></center>");
out.println("</td></tr>");
out.println("<tr align='center'> ");
out.println("<td colspan='2'><em>&copy;Copyrights 2005-09</em></td>");
out.println("</tr>");
out.println("</table>");
out.println("</body> </html>");

out.flush();
out.close();
}

}



//10. LogoutServlet.java
package com.rajendra.servlets;

import java.io.IOException;

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

public class LogoutServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

HttpSession hs=request.getSession(false);
if (hs!=null)
hs.invalidate();
RequestDispatcher rd=request.getRequestDispatcher("Login.html");
rd.forward(request, response);
}
1. set the classpath
D:\\httpsess>set CLASSPATH=C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\servlet-api.jar ;.;


D:\\httpsess>set CLASSPATH=C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\jsp-api.jar ;.;
//if you are using Eclipse then use set the path by placing the mouse on project, right click, choose build path, configure build path, AddExternal Jar files (click), browse the files
2. Now compil e the servlet(java) programs to get the class files
D:\\cookiesex>javac -d . *.java

3. Now copy the class files 


4. paste into classes folder of WEB-INF folder

(c)  create web.xml file for configuration under WEB-INF folder
<web-app>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.rajendra.servlets.LoginServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>UserHomeServlet</servlet-name>
<servlet-class>com.rajendra.servlets.UserHomeServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>GetProductsServlet</servlet-name>
<servlet-class>com.rajendra.servlets.GetProductsServlet
</servlet-class>
</servlet>
<servlet>
<servlet-name>AddProductsServlet</servlet-name>
<servlet-class>com.rajendra.servlets.AddProductsServlet
</servlet-class>
</servlet>
<servlet>
<servlet-name>GetCartDetailsServlet</servlet-name>
<servlet-class>com.rajendra.servlets.GetCartDetailsServlet
</servlet-class>
</servlet>
<servlet>
<servlet-name>LogoutServlet</servlet-name>
<servlet-class>com.rajendra.servlets.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>UserHomeServlet</servlet-name>
<url-pattern>/home</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GetProductsServlet</servlet-name>
<url-pattern>/getProducts</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AddProductsServlet</servlet-name>
<url-pattern>/addProducts</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GetCartDetailsServlet</servlet-name>
<url-pattern>/getCart</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LogoutServlet</servlet-name>
<url-pattern>/logout</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>Login.html</welcome-file>
</welcome-file-list>
</web-app>
4. deploy your application(your folder ex" httpsess) in webapps folder under Tomcat server

  steps for deploying  your application
 1. you can create war file also to deploy
preparing war file using cmd prompt

D:\\httpsess>jar -cvf  httpsess.war Home.html WEB-INF
(6) start the tomcat server
(7) deploy the servlet(servlet folder or war file into the webapps folder of Tomcat
(or) paste the ur application (ex: httpsess.war) into the webapps folder of tomcat
(8)runing the servlet program
http://localhost:8888/httpsess
}

HttpSession

Session Management:

  • we are facing some problems with cookies, URL Rewriting and Hidden form fields to maintain the client state with sessions
  • The servlet container provides service (Session management) by implementing HttpSession interface
  •  In this concept, Web container stores the user's data and track the user's session by using URL Rewriting or Cookies
  • this mechanism helps to maintain a unique identity for each of session without using URL Rewriting or Cookies
Using HttpSession in Servlets involves the following functionality:
  1. it creates a new session object if necessary
  2. locating the session object associated with the current request
  3. storing information in a session
  4. attaching the session identity to the URL
  5. Looking up information in a session
  6. Discarding completed or abandoned sessions
Creating a Session Object:

  • A session object is created if the client does not carry the session identity or the client has not yet selected to join the session.
  • isNew() method of the the current request and  true if the session is created in the current request and returns false if it is a pre-existing session.


request.getSession(false) returns the existing session object... otherwise returns null.... Suppose in our above example.. When you call the request.getSession() for the first time it will give HttpSession object and if you use request.getSession(false) it will return null since server not yet created the HttpSession object yet... Once the request.getSession is made from then onwards... if you call request.getSession(false) it will return valid HttpSession object because already HttpSession object is created by that time

Example program for HttpSession

Wednesday 28 April 2010

Example program on Request Attributes


<!--Home.html-->
<html><body>
<form action="entry"><pre>
<b>

Operand 1 : <input type="text" name="op1"/>

Operand 2 : <input type="text" name="op2"/>

<input type="submit" name="action" value="Add"/>  <input type="submit" name="action" value="Substract"/>
</b></pre></form>
</body></html>

//servlet programs
package com.rajendra.servlets;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.GenericServlet;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class ValidationServlet extends GenericServlet {

public void service (ServletRequest req, ServletResponse resp) throws ServletException, IOException {

try {
req.setAttribute("operand1",new Integer(req.getParameter("op1")));
req.setAttribute("operand2",new Integer(req.getParameter("op2")));
}//try
catch(Exception e){
resp.setContentType("text/html");
PrintWriter out=resp.getWriter();
out.println("Operand1 and Operand2 value should be numbers<br/>");
/*Defines an object that receives requests from the client and sends them to any 
* resource (such as a servlet, HTML file, or JSP file) on the server.
* The servlet container creates the RequestDispatcher object, which is used as a wrapper
* around a server resource located at a particular path or given by a particular name.
This interface is intended to wrap servlets, but a servlet container can create
RequestDispatcher objects to wrap any type of resource.
  */
RequestDispatcher rd=req.getRequestDispatcher("/Home.html");
rd.include(req,resp);
return;
}//catch

String action=req.getParameter("action");
RequestDispatcher rd=null;

if (action.equals("Add"))
rd=req.getRequestDispatcher("/add");
else
rd=req.getRequestDispatcher("/sub");
/*rd.forward(req,res);
 *  Forwards a request from a servlet to another resource
 *  (servlet, JSP file, or HTML file) on the server.
 */
rd.forward(req,resp);
}//service
}//class
////package com.rajendra.servlets;
import javax.servlet.GenericServlet;
import javax.servlet.ServletResponse;
import javax.servlet.ServletRequest;
import javax.servlet.ServletException;
import javax.servlet.RequestDispatcher;
import java.io.IOException;
import java.io.PrintWriter;
public class ResponseServlet extends GenericServlet {

public void service (ServletRequest req, ServletResponse res) throws ServletException, IOException {

Integer result=(Integer) req.getAttribute("result");

RequestDispatcher rd=req.getRequestDispatcher("/Home.html");

if (result==null){
rd.forward(req,res);
return;
/*
return is required here since we know that after forward the control comes back
to the source servlet, and here we dont want to execute the remaning part
of this service if our request is forwarded
*/
}//if

res.setContentType("text/html");
PrintWriter out=res.getWriter();

String op=(String) req.getAttribute("operation");
out.println(op+" Result : <b>"+result.intValue()+"</b><br/>");

rd.include(req,res);
}//service
}//class
//AddServlet.java
package com.rajendra.servlets;
import javax.servlet.GenericServlet;
import javax.servlet.ServletResponse;
import javax.servlet.ServletRequest;
import javax.servlet.ServletException;
import javax.servlet.RequestDispatcher;
import java.io.IOException;
public class AddServlet extends GenericServlet {

public void service (ServletRequest req, ServletResponse res) throws ServletException, IOException {

int op1=((Integer)req.getAttribute("operand1")).intValue();
int op2=((Integer)req.getAttribute("operand2")).intValue();

int result=op1+op2;

req.setAttribute("operation", "Addition");
req.setAttribute("result", new Integer(result));

RequestDispatcher rd=req.getRequestDispatcher("/resp");
rd.forward(req,res);
}//service
}//class
//SubServlet.java
package com.rajendra.servlets;
import javax.servlet.GenericServlet;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.ServletException;
import javax.servlet.RequestDispatcher;
import java.io.IOException;
public class SubServlet extends GenericServlet {

public void service (ServletRequest req, ServletResponse res) throws ServletException, IOException {

int op1=((Integer)req.getAttribute("operand1")).intValue();
int op2=((Integer)req.getAttribute("operand2")).intValue();

int result=op1-op2;

req.setAttribute("operation", "Subtraction");
req.setAttribute("result", new Integer(result));

RequestDispatcher rd=req.getRequestDispatcher("/resp");
rd.forward(req,res);
}//service
}//class
//maintain the folder structure
////web.xml
<!--web.xml-->
<web-app>
<servlet>
<servlet-name>es</servlet-name>
<servlet-class>com.rajendra.servlets.ValidationServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>as</servlet-name>
<servlet-class>com.rajendra.servlets.AddServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>ss</servlet-name>
<servlet-class>com.rajendra.servlets.SubServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>rs</servlet-name>
<servlet-class>com.rajendra.servlets.ResponseServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>es</servlet-name>
<url-pattern>/entry</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>Home.html</welcome-file>
</welcome-file-list>
<servlet-mapping>
<servlet-name>as</servlet-name>
<url-pattern>/add</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ss</servlet-name>
<url-pattern>/sub</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>rs</servlet-name>
<url-pattern>/resp</url-pattern>
</servlet-mapping>
</web-app>









Tuesday 27 April 2010

RequestDispatcher

RequestDispatcher is an interface which is used to transfers the control from current web resource to another web resource (such as a Servlet, HTML, JSP) on the server.
RequestDispatcher interface is predefined in javax.servlet package.
RequstDispatcher can be get using getRequestDispacther() method of ServletRequest and/or from the ServletContext. Retrieved RequestDispatcher object is used as a wrapper around a server resource located at a particular path or given by a particular name.

It has two methods .

Include() method.
forward() method.

forward() method:-

The forward() method of Request Dispatcher is used to transfer the request between server resources,(Servlet to Servlet, HTM and JSP).
Servlet 1 gets the request from client and generates a response, which is not shown to user. The servlet 1 then transfer the request to servlet whose response is then sent back to client.
Any code written after forward(request, response) method will not execute as the request is already forwarded.
There is no record of the response of first servlet. This method is faster as compared to using sendRedirect because no network round trip to the server and back is required.

include() method:
includes the content of the requested resource (any of them jsp, servlet, heml, etc) on the server response.

syntax :

void include(request, response) throws ServletException, IOException

parameters :

request & response : These parameters must be the same as the responding servlet service method object's are passed.

//creating Home.html
<html>
 <body>
  <center><br><br>
  <b>Request Dispatcher</b>
  <form action="test/ser1"><br><br>
   <table>
    <tr>
     <th>Path: </th>
     <td><input type="text" name="path"/></td>
    </tr>
    <tr><td colspan="2">&nbsp;</td></tr>
    <tr>
     <td colspan="2" align="center">
     <input type="submit" value="invoke Testservlet1"/>
     </td>
    </tr>
   </table>
   </form>
  </center></body></html>


//creating the TestServlet1.java
package com.rajendra.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.GenericServlet;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class TestServlet1 extends GenericServlet
{
 public void service(ServletRequest req,ServletResponse res) throws ServletException, IOException
 {
   String path=req.getParameter("path");
   res.setContentType("text/html");
   PrintWriter out=res.getWriter();//creating the out objct
   out.println("text/html");
   out.println("<b>output results for the path: <i>"+path+"</i></b>");
   out.println("<br/><br/>");
   out.println("<table border='1' width='100%'><tr>");
   out.println("<th> Method used to get RequestDispatcher object</th>");
   out.println("<th> Result of invoking the respective method using the given path</th></tr>");
   out.println("<tr>");
 
   try
   {
  out.println("<td>servletContext.getRequestDispatcher(\"<b>"+path+"</b>\")</td>");
  RequestDispatcher rd=getServletContext().getRequestDispatcher(path);
  out.println("<td>");
  rd.include(req,res);
  out.println("</td>");
   }//end of try
catch(Exception e)
{
e.printStackTrace();
out.println("<td><b>Exception :</b><br/>&nbsp;&nbsp;&nbsp;");
out.println("the given path is invalid, since it does not start with <b>/</b>");
out.println("</td>");

}//end of catch
out.println("</tr>");
out.println("<td>servletrequest.getRequestDispatcher(\"<b>"+path+"</b>\")</td>");
RequestDispatcher rd=req.getRequestDispatcher(path);
out.println("<td>");
rd.include(req,res);
out.println("</td></tr>");
RequestDispatcher rd1=getServletContext().getRequestDispatcher(path);
out.println("<td>servletcontext.getNamedDispatcher(\"<b>"+path+"</b>\")</td>");
if(rd1==null)
{
out.println("<td> cannot locate the resource, returned <i>null</i></td>");

}//end of if
else
{
out.println("<td><b>Located the resource, response:</b><br/>&nbsp;&nbsp;&nbsp;&nbsp;");
rd.include(req,res);
out.println("</td>");

}//end of else
out.println("</table><br/><br/><br/>");
out.println("<a href='../Home.html'>Go back to test with different path</a>");
out.println("</body></html>");

   }//end of service()
 
 }//end of class
//compile and get the class file

//Creating TestServlet2.java
package com.rajendra.servlets;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
import java.io.PrintWriter;

public class TestServlet2 {
public void service(ServletRequest req,ServletResponse res) throws ServletException, IOException
{
PrintWriter out=res.getWriter();
out.println("Response from TestServlet2");

}//end of service

}//end of class
//compile the get the class file, copy the class file and paste into classes folder in WEB-INF folder
//creating web.xml file in WEB-INF folder
<web-app>
 <servlet>
  <servlet-name>ts1</servlet-name>
  <servlet-class>com.rajendra.servlets.TestServlet1</servlet-class>
  </servlet>
  <servlet>
   <servlet-name>ts2</servlet-name>
   <servlet-class>com.rajendra.servlets.TestServlet2</servlet-class>
   
  </servlet>
  <servlet-mapping>
     <servlet-name>ts1</servlet-name>
     <url-pattern>/test/ser1</url-pattern>
   </servlet-mapping>
   <servlet-mapping>
     <servlet-name>ts2</servlet-name>
     <url-pattern>/ser2</url-pattern>
   </servlet-mapping>
   <welcome-file-list>
   <welcome-file>Home.html</welcome-file>
   </welcome-file-list>
</web-app>

Previous Topic:
ServletResponse: