session tracking using hidden form fields in servlet
For Explanation watch the video
Http Stateless behaviour
The protocol http creates seperate connection with the web server for browser for every request
due to this one connection data can not be used in another connection i.e one request data can not be used in another request processing.
in order to get stateful behaviour in web application though protocol http is stateless
we need to use following session tracking techniques
Hidden form fields
advantages
Basic html knowledge
can be used with diff servers
Disadvantages
we can see the data (no secrecy)
hidden box values travel across the multiple requests i.e they increase network traffic b/w browser and server
Hidden boxes can only hold the text data/String values.. i.e they can not hold the java objects
if multiple forms are there then adding hidden box values is quite heavy job
Directory Structure
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>HiiddenFormFields</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<style type="text/css">
div {
width: 500px;
margin: auto;
margin-top: 100px;
}
</style>
</head>
<body>
<div>
<form action="firsturl" method="post">
Name: <br> <input type="text" name="name"> <br>
Choose any one: <br> <select name="dish">
<option value="sweet">Sweet</option>
<option value="spicy">Spicy</option>
</select> <br> <input type="submit" value="submit">
</form>
</div>
</body>
</html>
FirstServlet.java
import java.io.IOException;
import java.io.PrintWriter;
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("/firsturl")
public class FirstServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
//get PrintWriter
PrintWriter pw = res.getWriter();
//set content type
res.setContentType("text/html");
//get the values
String name = req.getParameter("name");
String dish = req.getParameter("dish");
if(dish.equalsIgnoreCase("sweet")) {
pw.println("<h1>Choose One</h1>");
pw.println("<form action='secondurl' method='post'>");
pw.println("<input type='hidden' name='name' value='"+name+"'>");
pw.println("<select name='dish'>");
pw.println("<option value='gulab jamun'>gulab jamun</option>");
pw.println("<option value='jalebi'>jalebi</option>");
pw.println("</select>");
pw.println("<br>");
pw.println("<input type='submit' value='submit'>");
pw.println("</form>");
}else {
pw.println("<h1>Choose One</h1>");
pw.println("<form action='secondurl' method='post'>");
pw.println("<input type='hidden' name='name' value='"+name+"'>");
pw.println("<select name='dish'>");
pw.println("<option value='samosa'>samosa</option>");
pw.println("<option value='paneer'>paneer</option>");
pw.println("</select>");
pw.println("<br>");
pw.println("<input type='submit' value='submit'>");
pw.println("</form>");
}
//close the stream
pw.close();
}
}
SecondServlet.java
import java.io.IOException;
import java.io.PrintWriter;
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("/secondurl")
public class SecondServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
//get PrintWriter
PrintWriter pw = res.getWriter();
//set content type
res.setContentType("text/html");
//get the values
String name = req.getParameter("name");
String dish = req.getParameter("dish");
pw.println("<h2>Thanks you "+name+" your "+dish+" will be placed soon</h2>");
//close the Stream
pw.close();
}
}