Servlet (5)
Servlet (5)
_______________________________________________________________________
Q. what is Servlet?
_______________________________________________________________________________
Servlet is a java based server side technology which is used for develop the dynamic web pages
Q. what is server?
______________________________________________________________________
Server is application or software
which is used for manages the user application at central location and accept request from client
application and provide response to client application.
Some of server application 1. Apache tomcat 2. glassfish 3. web logic etc
Q. What is client?
____________________________________________________________________
Client is application which is used for send the request to server and accept response server
In the case of web technology browser work as client application or software
Q. what is protocol?
__________________________________________________________________________
Protocol means some standard rules and regulation for communication between two different parties
called as protocol
Types of protocol
http: hyper text transfer protocol and this protocol normally used in web technology and send request
in the form of html or text format.
https: hyper text transfer protocol security layer
TCP/IP : Transfer control protocol / internet protocol it is used for send the data between client and
server in the form of packets.
FTP: File transfer protocol it is used for upload the file on server or download the data from server
POP3 : Post office protocol it is used for read the mail and store as post office local machine of users.
Example: outlook
SMTP : SMTP simple mail transfer protocol it is used for send the mail
etc
When we installed the server then at the time of installation we required to provide two port
numbers 1. Server shut down port 2. Server connector port
Q. What is port number and why we need to provide port number to server?
____________________________________________________________________________________
Port number is unique identity of server in network and it is used for identify for server in machine
because there is possibility single machine can have more than on server and if we want to access
particular server then we provide unique number to that for identification purpose called as port
number and when we installed the apache tomcat then we have 8080 is default connector port and
default ip address is machine is 127.0.0.1 or localhost
If we found apache tomcat running in services consider your server installed properly and in running
stage.
http://localhost:9090/
If we get following screen we can consider server running properly
Start menu ----- search ------view advanced system setting ----- click on environmental variable -----
select system variable option ----click on new button ---- variable name =CLASSPATH and variable value
= servlet-api.jar where it is present e.g. c:\program files\tomcat\lib\servlet-api.jar
4. Create Sample application: if we want to work with servlet we need to write minimum following
code.
public class TestServ extends HttpServlet : Here HttpServlet is a member of javax.servlet.http.* package
and it is abstract class and it is used for generate or create dynamic web page and we inherit HttpServlet
in TestServ class means TestServ is also web page in terms of servlet.
Internally : HttpServlet child of GenericServlet class and GenericServlet is a implementer class of Servlet
interface.
So we create folder structure you can save your servlet file in classes folder under WEB-INF
As per our example create class name as TestServ.java
web.xml file
<servlet>
<servlet-name>name of servlet</servlet-name>
<servlet-class>class name of servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>name of servlet</servlet-name>
<url-pattern>/urlname</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>t</servlet-name>
<servlet-class>TestServ</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>t</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>
9. Deploy servlet application on server
___________________________________________________________
if we want to deploy your servlet program on server we have following steps
a) open browser
b) type the following type of url
http://localhost:portnumber/projectname/urlname
Example: http://localhost:9090/demo/test
Note: once we create project using eclipse then we get following folder structure
3. Create package under src
4. Create Servlet under created package
right click on servlet --- select new option --- select other --- web --- select servlet option --- give
servlet class name --- click on next button ---- select url pattern ----
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
/**
* Servlet implementation class FirstTest
*/
/*
* <serlvet>
* <servlet-name>f</servlet-name>
* <servlet-class>org.techhub.FirstTest</servlet-classs>
* </servlet>
* <servlet-mapping>
* <servlet-name>f</servlet-name>
* <url-pattern>/first</url-pattern>
* </servlet-mapping>
*/
@WebServlet("/first")
public class FirstTest extends HttpServlet {
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
5. Run application or deploy application on server
Once we create project then open pom.xml and add dependencies tag in it.
Example:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
Add the following dependency for servlet library
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
3. Create Servlet
package org.techhub;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
/**
* Servlet implementation class FirstTest
*/
@WebServlet("/ftest")
public class FirstTest extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
out.println("Second application");
}
}
4. Run the application
Example: WAP to create servlet and calculate the addition of two values.
package org.techhub;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
@WebServlet("/add")
public class AddServ extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
int a=100,b=200,c;
c=a+b;
out.println("<h1>Addition is "+c+"</h1>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doGet(request, response);
}
}
If we think about above code we calculate the addition two fix values we want to accept the input from
keyboard and after that calculate addition of two values.
If we want to accept the input in web application we need to use HTML form elements means we need
to create html page with two textboxes and one button with form tag and submit html form to servlet
and servlet accept the input request from html form and process on it and generate addition value as
response to end user
Example: add.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<style>
input{
width:400px;
height:40px;
}
</style>
</head>
<body>
<center>
<input type='text' name='first' value=''/><br/><br/>
<input type='text' name='second' value=''/><br/><br/>
<input type='submit' name='s' value='Calculate Addition'/><br/><br/>
</center>
</body>
</html>
Output
3. Create Servlet
package org.calc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
@WebServlet("/add")
public class AddServ extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
out.println("I am servlet");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
4. Submit HTML form as request to servlet or provide communication between html form and servlet
_____________________________________________________________________________________
if we want to provide communication between html form and servlet we have form tag in HTML
form tag: form tag is used send request from HTML page to server side or it is used for collect requested
data from client and send to server
5. Once you submit form your form then you can accept form data at server side using Servlet
If we want to accept form data using servlet at server side we have doGet() or doPost() method present
in servlet class and doGet() and doPost() contain HttpServletRequest interface which help us to or
provide some method to us for access form data.
String getParameter(String htmlFormControlName): this method accept the html form control name
mention in html page and return its value in the form of string and if name found then return null
}
</style>
</head>
<body>
<center>
<form name='frm' action='add' method='GET'>
<input type='text' name='first' value=''/><br/><br/>
<input type='text' name='second' value=''/><br/><br/>
<input type='submit' name='s' value='Calculate Addition'/><br/><br/>
</form>
</center>
</body>
</html>
AddServ.java
package org.calc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
@WebServlet("/add")
public class AddServ extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
String f=request.getParameter("first");
String s=request.getParameter("second");
int c=Integer.parseInt(f)+Integer.parseInt(s);
out.println("<h1>Addition is "+c+"</h1>");//response generate from server and display on
//browser or on client
}
Example: Design registration page using HTML and submit to server and save in database
1. Create Dynamic web project & two jar or maven dependency a. servlet-api.jar 2.mysql-
connector.jar
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
2. Create Table in database
mysql> create table register(rid int(5) primary key auto_increment,name varchar(200),email
varchar(200),contact varchar(200));
Query OK, 0 rows affected, 1 warning (0.10 sec)
3. Design HTML page with form
style.css
@charset "ISO-8859-1";
.control{
width:400px;
height:40px;
}
register.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<link rel="stylesheet" href="CSS/style.css"/>
</head>
<body>
<input type='text' name='name' value='' class='control' /><br/><br/>
<input type='text' name='email' value='' class='control' /><br/><br/>
<input type='text' name='contact' value='' class='control' /><br/><br/>
<input type='submit' name='s' value='Register' class='control' /><br/><br/>
</body>
</html>
4. Create Servlet
package org.regapp;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
@WebServlet("/reg")
public class RegisterServ extends HttpServlet {
}
5. Submit HTML form to servlet and accept form data in servlet
6. Write JDBC code in servlet and save form data in database table
Complete source code servlet
package org.regapp;
import java.sql.*;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
@WebServlet("/reg")
public class RegisterServ extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
String n=request.getParameter("name");
String e=request.getParameter("email");
String c=request.getParameter("contact");
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn=DriverManager.getConnection
("jdbc:mysql://localhost:3306/testoctjdbc","root",
"root");
if(conn!=null) {
PreparedStatement stmt;
stmt=conn.prepareStatement("insert into register values('0',?,?,?)");
stmt.setString(1,n);
stmt.setString(2,e);
stmt.setString(3, c);
int value=stmt.executeUpdate();
if(value>0) {
out.println("User Registration Success........");
}
else {
out.println("Some problem is there..............");
}
}
else {
out.println("<h1>Data is not connected");
}
}
catch(Exception ex) {
out.println("Error is "+ex);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Following Diagram indicate complete execution of above example
Example: we want to sign up and sign in module we want to login page and when user register link then
we want to redirect user on registration page and when user fill data on registration page and submit
then user data should save in database as registration data and when open the login page and input
username and password then we want to verify user credential like as username and password in
database table and if username and password present in database table then show the message
welcome user and if username and password not present in database table then show message invalid
username and password.
After click on register here link
style.css
@charset "ISO-8859-1";
input{
width:400px;
height:40px;
}
table{
}
login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<link rel="stylesheet" href="CSS/style.css"/>
</head>
<body>
<br/><br/>
<form name='frm' action='validatelogin' method='POST'>
<center>
<input type='text' name='name' value='' /><br/><br/>
<input type='password' name='pass' value=''/><br/><br/>
<input type='submit' name='s' value='Login'/>
<br/><br/>
<a href='register.html'>Register Here</a>
</center>
</form>
</body>
</html>
register.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<link rel="stylesheet" href="CSS/style.css"/>
</head>
<body>
<br/><br/>
<form name='frm' action='reg' method='POST'>
<table>
<tr><td><input type='text' name='name' value=''/></td>
<td><input type='text' name='email' value=''/></td></tr>
<tr><td><input type='text' name='contact' value=''/></td>
<td><input type='text' name='username' value=''/></td></tr>
<tr><td><input type='text' name='password' value=''/></td>
<td><input type='submit' name='s' value='Register'/></td></tr>
</table>
</form>
</body>
</html>
RegServ.java
package org.techhub;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.DriverManager;
import java.sql.*;
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("/reg")
public class RegServ extends HttpServlet {
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
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("/validatelogin")
public class ValidateServ extends HttpServlet {
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class ValidateServ extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws
ServletException,IOException
{
response.setContentType("text/html");
PrintWriter out=response.getWriter();
RequestDispatcher r=request.getRequestDispatcher("welcome.html");
}
}
3. Call its forward () and include() methods
_____________________________________________________________________
This method is used for forward the page from servlet and include is used for include another page
content in servlet.
Complete source
login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form name='frm' action='valid' method='POST'>
<input type='text' name='username' value=''/><br/><br/>
<input type='password' name='password' value=''/><br/><br/>
<input type='submit' name='s' value='Login Here'/>
</form>
</body>
</html>
ValidateServ.java
package org.techhub;
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("/valid")
public class ValiateServ extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String password = request.getParameter("password");
if (username.equals("admin") && password.equals("admin")) {
RequestDispatcher r = request.getRequestDispatcher("welcome.html");
r.forward(request, response);
} else {
RequestDispatcher r = request.getRequestDispatcher("login.html");
r.include(request, response);
Session Management
__________________________________________________________________________
Q. what is session?
____________________________________________________________________
Session is communication period between client and server over the network or it is process to maintain
the transaction activity of user from login to logout.
Suppose if we are working on online examination portal and if we provide login to student and provide
facility to view result at student side then we can show the result to student in his own account means
one student cannot see the results of another students
Means we can say we can provide the security to use data or privacy to user data
Note: http is stateless protocol means every request of client consider as new client by the server so
when same client send multiple request then server consider there is multiple client so if we want to
identify the request come from same client or not then we can use session means when we implement
the session then server create one session id and store session id in server side and client header and
when client revisit to server with request then server check client contain session id of not if server
found session in client header consider it is existing client otherwise consider it is new client called as
stateful protocol means http help us to convert stateless protocol to stateful protocol.
Note: every user has different session object at server side means every user has different session.
How to implement the session practically in servlet
________________________________________________________________________
If we want to implement the session practically in servlet we have following ways
1. Using HttpSession interface
2. Using Cookies
3. Using URL Rewriting
4. Using Hidden Field.
Syntax: HttpSession ref =requestref.getSession(boolean): if we think about this method if we pass true
parameter in it then getSession() method create new session object otherwise use existing session
or
HttpSession ref=requestref.getSession(): this method can use the existing session created by
user.
Sample code
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class SessionTest extends HttpServlet
{public void doGet(HttpServletRequest request,HttpServletResponse response)throws
ServletException,IOException
{
response.setContentType("text/html");
PrintWriter out=response.getWriter();
HttpSession session=request.getSession(true);//session created.
}
}
3. Use its method to work with HttpSession interface
______________________________________________________________________
If we want to work with HttpSession interface we have some inbuilt methods provided by HttpSession to
us.
String getId(): this method can return session id generated by server for client and server generate
different session id for every client.
void setAttribute(Object key, Object value): this method can store data in session in the form of key
and value pair and key is unique and value may be duplicated.
Object getAttribute(Object key): this method can return data from session using its key and if key not
found return null value.
boolean isNew(): this method can check session is new or not if session is new return true otherwise
return false.
void invalidate(): this method can logout the session or invalid the user session
void setMaxInactiveInterval(int seconds): this method can decide the expiry period of session.
etc
Example: we want to design login page and when user submit login page to servlet then create new
session in servlet and show its session id.
Sample code
login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<style>
input{
width:400px;
height:40px;
border-radius:5px;
}
</style>
</head>
<body>
<center>
<form name='frm' action='create' method='POST'>
<input type='text' name='username' value=''/><br/><br/>
<input type='password' name='password' value=''/><br/><br/>
<input type='submit' name='s' value='Login'/>
</form>
</center>
</body>
</html>
CreateSessionServ.java
package org.techhub;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.*;
@WebServlet("/create")
public class CretaeSessionServ extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
HttpSession session=request.getSession(true);
String id=session.getId();
out.println("<h1>Session id "+id+"</h1>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Example: we want to create login and submit to servlet and store data in session object and when user
click on view session then display the session data on another servlet.
login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<style>
input{
width:400px;
height:40px;
border-radius:5px;
}
</style>
</head>
<body>
<center>
<form name='frm' action='create' method='POST'>
<input type='text' name='username' value=''/><br/><br/>
<input type='password' name='password' value=''/><br/><br/>
<input type='submit' name='s' value='Login'/>
</form>
</center>
</body>
</html>
CreateSessionServ.java
package org.techhub;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.*;
@WebServlet("/create")
public class CretaeSessionServ extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
HttpSession session=request.getSession(true);
String id=session.getId();
out.println("<h1>Session id "+id+"</h1>");
String uname=request.getParameter("username");
String upass=request.getParameter("password");
session.setAttribute("u", uname);
session.setAttribute("p", upass);
out.println("<a href='view'>View Session Data</a>");
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
ViewSessionData.java
package org.techhub;
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;
import javax.servlet.http.HttpSession;
@WebServlet("/view")
public class ViewSessionData extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
HttpSession session=request.getSession();
//Object obj=session.getAttribute("u");
//String username=obj.toString();
String username=session.getAttribute("u").toString();
String password=session.getAttribute("p").toString();
out.println("<h1>Data from session is </h1>");
out.println("User name "+username+"<br>");
out.println("Password is "+password+"<br>");
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
register.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<link rel="stylesheet" href="CSS/style.css" />
</head>
<body>
<form name='frm' action='reg' method='POST'>
<input type='text' name='name' value='' /><br />
<br /> <input type='text' name='email' value='' /><br />
<br /> <input type='text' name='contact' value='' /><br />
<br /> <input type='text' name='username' value='' /><br />
<br /> <input type='password' name='password' value='' /><br />
<br /> <input type='submit' name='s' value='Register' /><br />
<br />
</form>
</body>
</html>
RegisterServ.java
package org.techhub;
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;
import java.sql.*;
@WebServlet("/reg")
public class RegisterServ extends HttpServlet {
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
ValidateServ.java
package org.techhub;
import java.io.IOException;
import java.sql.DriverManager;
import java.sql.*;
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;
import javax.servlet.http.HttpSession;
import java.io.*;
@WebServlet("/valid")
public class ValidateServ extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
String uname=request.getParameter("username");
String upass=request.getParameter("password");
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/testoctjdbc","root","root");
if(conn!=null) {
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select *from register where username='"+uname+"'
and password='"+upass+"'");
if(rs.next()) {
out.println("<h1>Login Success</h1>");
HttpSession session=request.getSession(true);
int userId=rs.getInt(1);
session.setAttribute("uid", userId);
RequestDispatcher r=request.getRequestDispatcher("viewprofile.html");
r.forward(request, response);
}
else {
RequestDispatcher r=request.getRequestDispatcher("login.html");
r.include(request, response);
out.println("<h1>Invalid login</h1>");
}
}
else {
}
}
catch(Exception ex) {
out.println("Error is "+ex);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Viewprofile.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<a href='view'>View Login User Profile</a>
</body>
</html>
ViewUserProfile.java
package org.techhub;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
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;
import javax.servlet.http.HttpSession;
@WebServlet("/view")
public class ViewUserProfile extends HttpServlet {
}
else {
}
}
catch(Exception ex) {
out.println("Error is "+ex);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Cookies
_________________________________________________________________________________
Cookie is part of session management means user has or every client has different cookies
Q. what is difference between Session Handling by using HttpSession interface and by using Cookies?
___________________________________________________________________________________
1. If we store data in HttpSession object then data stored temporary whenever browser is active or
running phase and when we store in cookies then data store for longer period if user close the browser.
2. HttpSession stores its data at server side and Cookies store data at client means in browser.
Note: if user disable the browser cookies then cookie work as HttpSession and cookie may be break the
user privacy so this major try to avoid storing important data in cookie or store by using encryption.
Sample code
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
}
}
2. Set Age of cookie
__________________________________________________________________
Age decide the cookie storage period at client side or persistence period at client side
So if we want to set the age of cookie we have method name as void setMaxAge(int seconds);
Syntax: void setMaxAge(int seconds): set the age of cookies in seconds.
Sample code
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class SaveCookie extends HttpServlet
{public void doGet(HttpServletRequest request,HttpServletResponse response)throws
ServletException,IOException
{
response.setContentType("text/html");
PrintWriter out=response.getWriter();
Cookie c = new Cookie("u","ABC");
c.setMaxAge(60*60*24*365);
}
}
3. Send cookie from server to client as response
____________________________________________________________________
If we want to send cookie data from server to client we have addCookie() method of
HttpServletResponse
Syntax: void addCookie(Cookie): this method can send cookie object from server to client side.
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
Once server send cookie to client and when client revisit to server then server can read cookie data for
identify client and if server found cookie object as null then consider it is new client otherwise consider
it is existing client and if server want to read cookie data at server side we have method name as
getCookies() and getCookies() method return reference of Cookie [] array
Syntax:
Cookie ref[]= requestref.getCookies();
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class ReadCookie extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws
ServletException,IOException
{
response.setContentType("text/html");
PrintWriter out=response.getWriter();
Cookie c[]=request.getCookies();
for(int i=0; i<c.length;i++)
{ out.println(c[i].getName()+" "+c[i].getValue()+"<br>");
}
}
}
Example with complete source code
login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<style>
input{
width:400px;
height:40px;
}
</style>
</head>
<body>
<center>
<form name='frm' action='save' method='POST'>
<input type='text' name='name' value=''/><br/><br/>
<input type='password' name='pass' value=''/><br/><br/>
<input type='submit' name='s' value='Login'/>
</form>
</center>
</body>
</html>
SaveCookie.java
package org.techhub;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
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;
@WebServlet("/save")
public class SaveCookie extends HttpServlet {
ViewCookie.java
package org.techhub;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
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;
@WebServlet("/view")
public class ViewCookie extends HttpServlet {
Q. What is ServletContext?
__________________________________________________________________________
ServletContext is a object created at server side and it is known as application object means when we
deploy any application or project on server then internally tomcat container create one object for that
project at server side known as ServletContext or application object.
Note: if we think about above diagram we have tomcat or server and we consider we deploy two
projects in tomcat i.e online examination and online shopping means we have two contexts object
in tomcat because server create context object or application for project and we consider we have
online exam project access by 5 clients i.e a,b,c,d,e means we have 5 session object for online exam
Application and we consider online shopping has use by 3 clients so we consider it contain 3 session
objects.
Q. Why use ServletContext and What is benefit of ServletContext?
______________________________________________________________________________
1. Configure data in web.xml file and access in servlet
2. To share data common between all clients and servlets in application
Note: context data life present whenever server in running stage.
<context-param>
<param-name>name of parameter</param-name>
<param-value>value of parameter</param-value>
</context-param>
Example:
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.cj.jdbc.Driver</param-value>
</context-param>
Servlet Example
package org.techhub;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
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("/testparam")
public class ContextParamTestApp extends HttpServlet {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
ServletContext context=this.getServletContext();
String paramValue=context.getInitParameter("driver");
out.println("driver value is "+paramValue);
}
ServletConfig
______________________________________________________________________
ServletConfig is same like as ServletContext means ServletConfig help us configure data in web.xml file
and access in Servlet but the major difference between ServletContext and ServletConfig is
ServletContext is global all servlet in application and ServletConfig is local particular servlet means if we
initialize data in web.xml file for ServletContext then data is accessible in all servlet of application and if
we initialize data in web.xml file for ServletConfig then data is accessible only within particular servlet.
ServletConfig
_____________________________________________________________________________
ServletConfig is same like as ServletContext but the major difference is ServletContext data is accessible
in servlets and ServletConfig data is accessible within single servlet
Means we can say ServletContext is global object for all servlets and ServletConfig is local object for
particular servlet.
<servlet>
<servlet-name> name of servlet</servlet-name>
<servlet-class> classname of servlet</servlet-class>
<init-param>
<param-name>name of parameter</param-name>
<param-value> value of parameter</param-value>
</init-param>
</servlet>
Example:
<servlet>
<servlet-name>f</servlet-name>
<servlet-class>First</servlet-class>
<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/mysql</param-value>
</init-param>
</servlet>
Note: if we think about above code we initialize parameter only for First servlet means url parameter is
not accessible in another servlet because we configure within servlet tag of First servlet.
Sample code
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
Sample code
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
Example: We want to Create Application with two servlets name as First and Second and configure data
in web.xml file for ServletContext object and configure for config in First servlet and see the results
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>ConfigContextApp</display-name>
<context-param>
<param-name>email</param-name>
<param-value>support@gmail.com</param-value>
</context-param>
<servlet>
<servlet-name>f</servlet-name>
<servlet-class>org.techhub.First</servlet-class>
<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/mysql</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>f</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>s</servlet-name>
<servlet-class>org.techhub.Second</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>s</servlet-name>
<url-pattern>/second</url-pattern>
</servlet-mapping>
</web-app>
First.java
package org.techhub;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class First extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
out.println("I am first servlet");
ServletContext context=this.getServletContext();
String contextData=context.getInitParameter("email");
out.println("<h1>Context data from web.xml "+contextData+"</h1>");
ServletConfig config=this.getServletConfig();
String configData=config.getInitParameter("url");
out.println("<h1>Config data from web.xml "+configData+"</h1>");
out.println("<br><a href='second'>Second</a>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Second.java
package org.techhub;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Second extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
out.println("I am second servlet");
ServletContext context=this.getServletContext();
String contextData=context.getInitParameter("email");
out.println("<h1>Context data from web.xml "+contextData+"</h1>");
ServletConfig config=this.getServletConfig();
String configData=config.getInitParameter("url");
out.println("<h1>Config data from web.xml "+configData+"</h1>");
out.println("<br><a href='first'>First</a>");
}