SERVLET CHAINING
Definition: Chaining from one Servlet to another resource which can
either be Html, JSP or another Servlet is known as Servlet Chaining.
Need for Servlet Chaining: Servlet Chaining is needed to make the
data present in one Servlet available to other resources which can either
be a Html, JSP or another Servlet.
➢
There are two different ways in which we can perform Servlet Chaining
namely:
a) RequestDispatcher
b) sendRedirect
a) RequestDispatcher
➢
RequestDispatcher is an Interface present in javax.servlet package.
➢
Since it is an Interface, an implementation object can be created by the
JEE Container by using a factory or helper method by name called
getRequestDispatcher( ) whenever a client makes any request to a
Servlet.
RequestDispatcher rd = req.getRequestDispatcher( );
➢
We can get the reference of RequestDispatcher Interface in two different
ways namely:
i) request(req)
ii) context
➢
Whenever we use req.getRequestDispatcher( ), then we can chain from
one Servlet to another resources of the same Application.
➢
Whenever we use context.getRequestDispatcher( ), then we can chain
from one Servlet to another resources of different Application.
➢
There are two different methods present in RequestDispatcher namely
forward( ) and include( )
+ void forward(ServletRequest req, ServletResponse resp)
+ void include(ServletRequest req, ServletResponse resp)
➢
In case of forward( ), the request is forwarded from one Servlet to another
resources(Html, JSP, Servlet) and finally the chained resource gets back
the response.
➢
In case of include( ), all the chained resources are included into main or
source Servlet and finally the main or source Servlet gets back the
response.
Note:
❖
In case of forward( ) and include( ), the URL remains the same.
❖
Hence, both forward( ) and include( ) works at the Server Side i.e.
RequestDispatcher works at the Server Side.
b) sendRedirect
➢
sendRedirect is a method of HttpServletResponse Interface present
in javax.servlet.http package.
➢
Using sendRedirect( ), we can chain to external resources also.
➢
sendRedirect( ) can be used to chain to other resources where the
data are not involved.
Note:
❖
In case of sendRedirect( ), the URL pattern changes which is displayed
on the Browser.
CODE FOR REQUEST DISPATCHER BY USING
ANNOTATION.
INDEX.HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="Ad">
Enter the First number:<input type="text" name="num1"/><br/>
Enter the Second number:<input type="text" name="num2"/><br/>
<input type="submit" /><br/>
</form>
</body>
</html>
AddServlet.java
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Ad")
public class AddServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
int i = Integer.parseInt(req.getParameter("num1"));
int j = Integer.parseInt(req.getParameter("num2"));
int k = i + j;
req.setAttribute("k", k);
RequestDispatcher rd = req.getRequestDispatcher("/Sq");
rd.forward(req,res);
}
SqServlet.java
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Sq")
public class SqServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws IOException {
int k = (int)req.getAttribute("k");
k = k*k;
PrintWriter out = res.getWriter();
out.println("result = "+k);
CODE FOR sendRedirect USING ANNOTATION
Index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="Ad">
Enter the First number:<input type="text" name="num1"/><br/>
Enter the Second number:<input type="text" name="num2"/><br/>
<input type="submit" /><br/>
</form>
</body>
</html>
AddServlet.java
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/Ad")
public class AddServlet extends HttpServlet {
protected void doGet(HttpServletRequest req,
HttpServletResponse res) throws IOException {
int i = Integer.parseInt(req.getParameter("num1"));
int j = Integer.parseInt(req.getParameter("num2"));
int k = i + j;
res.sendRedirect("Sq?k="+k);
}
}
SqServlet.java
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Sq")
public class SqServlet extends HttpServlet {
protected void doGet(HttpServletRequest req,
HttpServletResponse res) throws IOException {
int k =Integer.parseInt(req.getParameter(“k”));
k = k*k;
PrintWriter out = res.getWriter();
out.println("result = "+k);
}
}
Cookies in Servlet
A cookie is a small piece of information that is persisted between the
multiple client requests.
A cookie has a name, a single value, and optional attributes such as a
comment, path and domain qualifiers, a maximum age, and a version
number.
How Cookie works?
By default, each request is considered as a new request. In
cookies technique, we add cookie with response from the
servlet. So cookie is stored in the cache of the browser. After
that if request is sent by the user, cookie is added with request
by default. Thus, we recognize the user as the old user.
Types of Cookie
There are 2 types of cookies in servlets.
1. Non-persistent cookie
2. Persistent cookie
Non-persistent cookie
It is valid for single session only. It is removed each time when user
closes the browser.
Persistent cookie
It is valid for multiple session . It is not removed each time when user closes the
browser. It is removed only if user logout or signout.
Advantage of Cookies
1. Simplest technique of maintaining the state.
2. Cookies are maintained at client side.
Disadvantage of Cookies
1. It will not work if cookie is disabled from the browser.
2. Only textual information can be set in Cookie object.
Cookie class
javax.servlet.http.Cookie class provides the functionality of using cookies. It provides a
lot of useful methods for cookies.
Constructor of Cookie class
Constructor Description
Cookie() constructs a cookie.
Cookie(String name, String value) constructs a cookie with a specified name and value.
For adding cookie or
adding cookie or getting the value from the cookie, we need some methods
provided by other interfaces. They are:
1. public void addCookie(Cookie ck):method of HttpServletResponse interface is used to
add cookie in response object.
2. public Cookie[] getCookies():method of HttpServletRequest interface is used to return
all the cookies from the browser
How to create Cookie?
Let's see the simple code to create cookie.
1. Cookie ck=new Cookie("user","vijayalaxmi");//creating cookie object
2. response.addCookie(ck);//adding cookie in the response
How to delete Cookie?
Let's see the simple code to delete cookie. It is mainly used to logout or signout the user.
1. Cookie ck=new Cookie("user","");//deleting value of cookie
2. ck.setMaxAge(0);//changing the maximum age to 0 seconds
3. response.addCookie(ck);//adding cookie in the response
How to get Cookies?
Let's see the simple code to get all the cookies.
1. Cookie ck[]=request.getCookies();
2. for(int i=0;i<ck.length;i++){
3. out.print("<br>"+ck[i].getName()+" "+ck[i].getValue());//printing name and value of cookie
4. }
Simple example of Servlet Cookies
In this example, we are storing the name of the user in the cookie object and
accessing it in another servlet. As we know well that session corresponds to the
particular user. So if you access it from too many browsers with different values,
you will get the different value.
index.html
1. <form action="servlet1" method="post">
2. Name:<input type="text" name="userName"/><br/>
3. <input type="submit" value="go"/>
4. </form>
FirstServlet.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5.
6. public class FirstServlet extends HttpServlet {
7.
8.
public void doPost(HttpServletRequest request, HttpServletResponse response){
9. try{
10.
11. response.setContentType("text/html");
12. PrintWriter out = response.getWriter();
13.
14. String n=request.getParameter("userName");
15. out.print("Welcome "+n);
16.
17. Cookie ck=new Cookie("uname",n);//creating cookie object
18. response.addCookie(ck);//adding cookie in the response
19.
20. //creating submit button
21. out.print("<form action='servlet2'>");
22. out.print("<input type='submit' value='go'>");
23. out.print("</form>");
24.
25. out.close();
26.
27. }catch(Exception e){System.out.println(e);}
28. }
29.}
SecondServlet.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5. public class SecondServlet extends HttpServlet {
6.
7. public void doPost(HttpServletRequest request, HttpServletResponse response){
8. try{
9.
10. response.setContentType("text/html");
11. PrintWriter out = response.getWriter();
12.
13. Cookie ck[]=request.getCookies();
14. out.print("Hello "+ck[0].getValue());
15.
16. out.close();
17.
18. }catch(Exception e){System.out.println(e);}
19. }
20.
21.
22.}
web.xml
1. <web-app>
2.
3. <servlet>
4. <servlet-name>s1</servlet-name>
5. <servlet-class>FirstServlet</servlet-class>
6. </servlet>
7.
8. <servlet-mapping>
9. <servlet-name>s1</servlet-name>
10.<url-pattern>/servlet1</url-pattern>
11.</servlet-mapping>
12.
13.<servlet>
14.<servlet-name>s2</servlet-name>
15.<servlet-class>SecondServlet</servlet-class>
16.</servlet>
17.
18.<servlet-mapping>
19.<servlet-name>s2</servlet-name>
20.<url-pattern>/servlet2</url-pattern>
21.</servlet-mapping>
22.
23.</web-app>
Servlet Login and Logout Example using
Cookies
A cookie is a kind of information that is stored at client side.
In the previous page, we learned a lot about cookie e.g. how to create cookie, how
to delete cookie, how to get cookie etc.
Here, we are going to create a login and logout example using servlet cookies.
In this example, we are creating 3 links: login, logout and profile. User can't go to
profile page until he/she is logged in. If user is logged out, he need to login again
to visit profile.
In this application, we have created following files.
1. index.html
2. link.html
3. login.html
4. LoginServlet.java
5. LogoutServlet.java
6. ProfileServlet.java
7. web.xml
1. <!DOCTYPE html>
2. <html>
3. <head>
4. <meta charset="ISO-8859-1">
5. <title>Servlet Login Example</title>
6. </head>
7. <body>
8.
9. <h1>Welcome to Login App by Cookie</h1>
10.<a href="login.html">Login</a>|
11.<a href="LogoutServlet">Logout</a>|
12.<a href="ProfileServlet">Profile</a>
13.
14.</body>
15.</html>
File: link.html
1. <a href="login.html">Login</a> |
2. <a href="LogoutServlet">Logout</a> |
3. <a href="ProfileServlet">Profile</a>
4. <hr>
File: login.html
1. <form action="LoginServlet" method="post">
2. Name:<input type="text" name="name"><br>
3. Password:<input type="password" name="password"><br>
4. <input type="submit" value="login">
5. </form>
File: LoginServlet.java
1. package com.javatpoint;
2.
3. import java.io.IOException;
4. import java.io.PrintWriter;
5. import javax.servlet.ServletException;
6. import javax.servlet.http.Cookie;
7. import javax.servlet.http.HttpServlet;
8. import javax.servlet.http.HttpServletRequest;
9. import javax.servlet.http.HttpServletResponse;
10.public class LoginServlet extends HttpServlet {
11.
protected void doPost(HttpServletRequest request, HttpServletResponse respon
se)
12. throws ServletException, IOException {
13. response.setContentType("text/html");
14. PrintWriter out=response.getWriter();
15.
16. request.getRequestDispatcher("link.html").include(request, response);
17.
18. String name=request.getParameter("name");
19. String password=request.getParameter("password");
20.
21. if(password.equals("admin123")){
22. out.print("You are successfully logged in!");
23. out.print("<br>Welcome, "+name);
24.
25. Cookie ck=new Cookie("name",name);
26. response.addCookie(ck);
27. }else{
28. out.print("sorry, username or password error!");
29. request.getRequestDispatcher("login.html").include(request, response);
30. }
31.
32. out.close();
33. }
34.
35.}
File: LogoutServlet.java
1. package com.javatpoint;
2.
3. import java.io.IOException;
4. import java.io.PrintWriter;
5. import javax.servlet.ServletException;
6. import javax.servlet.http.Cookie;
7. import javax.servlet.http.HttpServlet;
8. import javax.servlet.http.HttpServletRequest;
9. import javax.servlet.http.HttpServletResponse;
10.public class LogoutServlet extends HttpServlet {
11.
protected void doGet(HttpServletRequest request, HttpServletResponse respons
e)
12. throws ServletException, IOException {
13. response.setContentType("text/html");
14. PrintWriter out=response.getWriter();
15.
16.
17. request.getRequestDispatcher("link.html").include(request, response);
18.
19. Cookie ck=new Cookie("name","");
20. ck.setMaxAge(0);
21. response.addCookie(ck);
22.
23. out.print("you are successfully logged out!");
24. }
25.}
File: ProfileServlet.java
1. package com.javatpoint;
2.
3. import java.io.IOException;
4. import java.io.PrintWriter;
5. import javax.servlet.ServletException;
6. import javax.servlet.http.Cookie;
7. import javax.servlet.http.HttpServlet;
8. import javax.servlet.http.HttpServletRequest;
9. import javax.servlet.http.HttpServletResponse;
10.public class ProfileServlet extends HttpServlet {
11.
protected void doGet(HttpServletRequest request, HttpServletResponse respons
e)
12. throws ServletException, IOException {
13. response.setContentType("text/html");
14. PrintWriter out=response.getWriter();
15.
16. request.getRequestDispatcher("link.html").include(request, response);
17.
18. Cookie ck[]=request.getCookies();
19. if(ck!=null){
20. String name=ck[0].getValue();
21. if(!name.equals("")||name!=null){
22. out.print("<b>Welcome to Profile</b>");
23. out.print("<br>Welcome, "+name);
24. }
25. }else{
26. out.print("Please login first");
27. request.getRequestDispatcher("login.html").include(request, response);
28. }
29. out.close();
30. }
31.}
File: web.xml
1. <?xml version="1.0" encoding="UTF-8"?>
2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3.
xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.c
om/xml/ns/javaee
4. http://java.sun.com/xml/ns/javaee/web-
app_2_5.xsd" id="WebApp_ID" version="2.5">
5.
6. <servlet>
7. <description></description>
8. <display-name>LoginServlet</display-name>
9. <servlet-name>LoginServlet</servlet-name>
10. <servlet-class>com.javatpoint.LoginServlet</servlet-class>
11. </servlet>
12. <servlet-mapping>
13. <servlet-name>LoginServlet</servlet-name>
14. <url-pattern>/LoginServlet</url-pattern>
15. </servlet-mapping>
16. <servlet>
17. <description></description>
18. <display-name>ProfileServlet</display-name>
19. <servlet-name>ProfileServlet</servlet-name>
20. <servlet-class>com.javatpoint.ProfileServlet</servlet-class>
21. </servlet>
22. <servlet-mapping>
23. <servlet-name>ProfileServlet</servlet-name>
24. <url-pattern>/ProfileServlet</url-pattern>
25. </servlet-mapping>
26. <servlet>
27. <description></description>
28. <display-name>LogoutServlet</display-name>
29. <servlet-name>LogoutServlet</servlet-name>
30. <servlet-class>com.javatpoint.LogoutServlet</servlet-class>
31. </servlet>
32. <servlet-mapping>
33. <servlet-name>LogoutServlet</servlet-name>
34. <url-pattern>/LogoutServlet</url-pattern>
35. </servlet-mapping>
36.</web-app>