You are on page 1of 41

AMITY UNIVERSITY

UTTAR PRADESH

IT404-Advanced Java Programming


PRACTICAL FILE

DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING


AMITY SCHOOL OF ENGINEERING AND TECHNOLOGY

SUBMITTED BY: FACULTY NAME:


VARUN BORAR MS. NIDHI CHANDRA
A2305219377 – 6 CSE 6
INDEX
Date of Date of
S. No. Experiment Signature
Experiment submission
Demonstrate Servlet that
provides the information of
1. Remote IP Address, Context
Path, and other server
related information.
Write a program to provide
database connectivity using
2. Database Driver to a
Student table to insert using
Servlets.
Write a program to provide
database connectivity using
Database Driver to an
3.
employee table to insert,
get and delete data using
Servlets.
Write a program using
cookie to save Login and
Password credentials in
4. cookie and return Cookie
value to the client Browser
after reading values back
from cookie.
Write a program using
servlet to write persistent
5.
and non-persistent cookies
on client side.
Write a Program to
differentiate between new
6. user, Repeat Visitor,
Frequent Visitor using
Cookie Mechanism
Write a Program to
7. demonstrate Struts Request
Validator Framework.
Write a program to
demonstrate Stateless
8.
Session Bean by basic
calculator functionality
Write a program to
demonstrate Stateful
9. Session Bean Program with
income tax calculation logic
accessibility.
Create a program to
10. demonstrate an Entity Bean
and track the session.
OPEN ENDED EXPERIMENT
Demonstrate Application
using Struts, Enterprise Java
11.
Beans and Spring Boot,
Android application
Experiment-1
Aim:
Demonstrate Servlet that provides the information of Remote IP Address, Context Path, and other
server related information.

Software used:
IntelliJ Idea Ultimate, Java 15 and Java EE 8

Source Code:
// AuthServlet.java
package com.example.LAB01;

import java.io.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.*;

public class AuthServlet extends HttpServlet {


private String param;
public void init(ServletConfig config) throws ServletException {
super.init(config);
this.param = config.getInitParameter("message");
}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws


IOException {
processReq(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws


IOException {
processReq(request, response);
}

private void processReq(HttpServletRequest request, HttpServletResponse response)


throws IOException {
response.setContentType("text/html");
response.setStatus(200);

PrintWriter out = response.getWriter();


out.println("<html><body>");
out.println("<h1> Servlet was initialised with the message: " + this.param +
"</h1>");
out.println("<h1> Method: " + request.getMethod() + "</h1>");
out.println("<h1> URI: " + request.getRequestURI() + "</h1>");
out.println("<h1> Path: " + request.getContextPath() + "</h1>");
out.println("<h1> Servlet: " + request.getServletPath() + "</h1>");
out.println("<h1> Query String: " + request.getQueryString() + "</h1>");
out.println("<h2> First Name: " + request.getParameterValues("fname")[0] +
"</h2>");
out.println("<h2> Last Name: " + request.getParameterValues("lname")[0] + "</h2>");
out.println("</body></html>");
}
}
// Index.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>

<head>
<title>Login Page</title>
<style>
.form-container {
max-width: 300px;
min-height: 150px;
background-color: #f2f2f2;
padding: 20px;
border-radius: 10px;
margin: 100px auto;
}

input {
display: block;
margin: 10px auto;
padding: 2px;
width: 200px;
}
</style>
</head>

<body>
<div class="form-container">
<form action="auth">
<input type="text" name="fname" id="fname" placeholder="First Name">
<input type="text" name="lname" id="lname" placeholder="Last Name">
<input type="submit" value="Get" formmethod="GET" />
<input type="submit" value="Post" formmethod="POST" />
</form>
</div>
</body>

</html>

// Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>auth</servlet-name>
<servlet-class>com.example.LAB01.AuthServlet</servlet-class>
<init-param>
<param-name>message</param-name>
<param-value>Name recorder</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>auth</servlet-name>
<url-pattern>/auth</url-pattern>
</servlet-mapping>
</web-app>
Output:

Figure 1.1: Login Page

Figure 1.2: Output Screen

Result:
A basic webpage displaying all the details was created.
Experiment-2
Aim:
Write a program to provide database connectivity using Database Driver to a Student table to insert,
update, delete data using Servlets.

Software used:
IntelliJ Idea Ultimate, Java 15 and Java EE 8

Source Code:
Index.jsp
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Student Form</title>
</head>

<body>
<h1>Student Form</h1>

<div class="form-container">
<form id="s-form">
<label for="fname"></label><input type="text" placeholder="First Name"
name="fname" id="fname" required />
<label for="lname"></label><input type="text" placeholder="Last Name"
name="lname" id="lname" required />
<label for="course"></label><input type="text" placeholder="Course"
name="course" id="course" required />
<button type="submit" id="submit">Add</button>
</form>
<a href="pages/display.jsp">View Records</a>
</div>
</body>
<script>
const submitButton = document.getElementById('submit');
submitButton.addEventListener('click', handleSubmit);

async function handleSubmit(event) {


event.preventDefault();
const form = document.getElementById("s-form");
const fname = document.getElementById("fname");
const lname = document.getElementById("lname");
const course = document.getElementById("course");
const formData = {
'fname': fname.value,
'lname': lname.value,
'course': course.value
}
console.log(JSON.stringify(formData));
const response = await fetch("add", {
headers:{
'Content-Type': 'application/json',
'Accept': 'application/json'
},
method: 'post',
body: JSON.stringify(formData),
});

console.log(response.status);
if (response.status == 200){
form.reset();
alert("Response was added successfully");
}
}
</script>

</html>

Display.jsp
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Display</title>
<style>

</head>

<body>
<table id="s-table">
<tr>
<th>
ID
</th>
<th>
First Name
</th>
<th>
Last Name
</th>
<th>
Course
</th>
</tr>

</table>
<a href="/">Back</a>
</body>
<script>

function createTable(data){
const table = document.getElementById('s-table');
let rows = 1;
for (let student of data){
const row = table.insertRow(rows);
rows += 1;

const id = row.insertCell(0);
id.innerText = student['_id'];

const fname = row.insertCell(1);


fname.innerText = student['fname'];

const lname = row.insertCell(2);


lname.innerText = student['lname'];
const course = row.insertCell(3);
course.innerText = student['course']
}
}
window.onload = async () => {
fetch('/display').then(
(response) =>{return response.json()}
).then(
(data) => {createTable(data)}
);
}
</script>

</html>

DatabaseConnector.java
package com.ajp.database;

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

public class DatabaseConnector {


public DatabaseConnector(){

public Connection getConnection(){


Connection con;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/lab02", "lab02",
"varun@sql");
return con;
}catch(SQLException | ClassNotFoundException se){
System.out.println(se.getClass().getName() + ": " + se.getMessage());
}
return null;
}
}

StudentDatabaseConnector.java
package com.ajp.database;

import com.ajp.model.Student;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

public class StudentDatabaseConnector {

public StudentDatabaseConnector(){

public void addStudent(Student student){


String query = "INSERT INTO student(fname, lname, course) VALUES(?,?,?);";

try {
DatabaseConnector db = new DatabaseConnector();
Connection con = db.getConnection();
PreparedStatement insert = con.prepareStatement(query);
insert.setString(1, student.getFname());
insert.setString(2, student.getLname());
insert.setString(3, student.getCourse());
insert.executeUpdate();
insert.close();
con.close();
} catch (SQLException se) {
System.out.println(se.getClass().getName() + ": " + se.getMessage());
}
}

public Vector<Student> getStudents(){


Vector<Student> students = new Vector<>();

String query = "SELECT * FROM student";

try{
DatabaseConnector db = new DatabaseConnector();
Connection con = db.getConnection();

PreparedStatement get = con.prepareStatement(query);


ResultSet stud = get.executeQuery();

while(stud.next()){
Student s = new Student();
s.set_id(stud.getInt("_id"));
s.setFname(stud.getString("fname"));
s.setLname(stud.getString("lname"));
s.setCourse(stud.getString("course"));
students.add(s);
}

get.close();
con.close();
} catch (SQLException se) {
System.out.println(se.getClass().getName() + ": " + se.getMessage());
}

return students;
}
}

Add.java
package com.ajp.lab02;

import com.ajp.database.StudentDatabaseConnector;
import com.ajp.model.Student;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.stream.Collectors;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

@WebServlet(name = "add", value = "/add")


public class add extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType("application/json");

Student s = new Student();

try{
JSONObject body = getPayload(request);
s.setFname((String)body.get("fname"));
s.setLname((String)body.get("lname"));
s.setCourse((String) body.get("course"));
}catch(IOException|ParseException e){
System.out.println(e.getClass().getName() + ": " + e.getMessage());
}
StudentDatabaseConnector sdb = new StudentDatabaseConnector();
sdb.addStudent(s);
response.setStatus(200);
request.getRequestDispatcher("").forward(request, response);
}

private JSONObject getPayload(HttpServletRequest request) throws IOException,


ParseException {
StringBuilder sb = new StringBuilder();
BufferedReader br = request.getReader();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
sb.append(System.lineSeparator());
}
String data = sb.toString();
JSONParser parser = new JSONParser();
JSONObject payload;
payload = (JSONObject) parser.parse(data);

return payload;
}
}

Display.java
package com.ajp.lab02;

import com.ajp.database.StudentDatabaseConnector;
import com.ajp.model.Student;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

import java.io.*;
import java.util.Vector;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@WebServlet(name = "display", value = "/display")


public class DisplayServlet extends HttpServlet {

public void init() {


}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws


IOException {
processRequest(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws


IOException, ServletException {
processRequest(request, response);
}

private void processRequest(HttpServletRequest request, HttpServletResponse response)


throws IOException {
response.setStatus(200);
response.setContentType("application/json");
StudentDatabaseConnector sdb = new StudentDatabaseConnector();
Vector<Student> list = sdb.getStudents();

JSONArray res = new JSONArray();

for(Student s: list){
JSONObject student = new JSONObject();
student.put("_id", s.get_id());
student.put("fname", s.getFname());
student.put("lname", s.getLname());
student.put("course", s.getCourse());
res.add(student);
}

PrintWriter out = response.getWriter();


out.print(res);
}

public void destroy() {


}
}
Output:

Figure 2.1: Add Form

Figure 2.2: Display page


Experiment-3
Aim:
Write a program to provide database connectivity using Database Driver to an employee table to
insert, delete data using Servlets.

Software used:
IntelliJ Idea Ultimate, Java 15 and Java EE 8

Source Code:
Index.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>Employee Records</title>
</head>
<body>
<form action="add" method="post">
<input type="number" name="_id" id="_id" placeholder="Employee ID" required />
<input type="text" name="name" id="name" placeholder="Name" required />
<input type="email" name="email" id="email" placeholder="Email" required />
<button type="submit">Submit</button>
</form>
<hr>
<table id="emp-table">
<tr>
<th>Employee ID</th>
<th>Name</th>
<th>Email</th>
<th>Action</th>
</tr>

</table>
</body>
<script>
function createTable(data){
const table = document.getElementById('emp-table');
let rows = 1;
for (let employee of data){
const row = table.insertRow(rows);
rows += 1;

const id = row.insertCell(0);
id.innerText = employee['_id'];

const name = row.insertCell(1);


name.innerText = employee["name"];

const email = row.insertCell(2);


email.innerText = employee["email"];

const action = row.insertCell(3);


const button = document.createElement('button');
button.innerText = "Delete";
button.setAttribute("_id", employee["_id"]);
button.setAttribute("name", employee["name"]);
button.setAttribute("email", employee["email"]);
button.addEventListener('click', deleteHandler);
action.append(button);

}
}

function deleteHandler(event){
const _id = event.target.attributes.getNamedItem("_id").value;
const name = event.target.attributes.getNamedItem("name").value;
const email = event.target.attributes.getNamedItem("email").value;

const employee = "_id="+_id + "&name=" + name + "&email=" + email ;


fetch("/delete", {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
body:employee
}).then( res => {
alert("Record Deleted");
location.reload();
});
}
window.onload = async () => {
fetch('/get').then(
(response) =>{return response.json()}
).then(
(data) => {createTable(data)}
);
}
</script>
</html>

Get.java
package com.ajp.EmployeeRecords.View;

import com.ajp.EmployeeRecords.Database.EmployeeDatabaseConnector;
import com.ajp.EmployeeRecords.Model.Employee;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;

@WebServlet(name = "get", value = "/get")


public class get extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {

response.setStatus(200);
response.setContentType("application/json");
EmployeeDatabaseConnector empDB = new EmployeeDatabaseConnector();
Vector<Employee> list = empDB.getAll();

JSONArray res = new JSONArray();

for(Employee e: list){
JSONObject employee = new JSONObject();
employee.put("_id", e.getid());
employee.put("name", e.getName());
employee.put("email", e.getEmail());
res.add(employee);
}

PrintWriter out = response.getWriter();


out.print(res);
}
}

Add.java
package com.ajp.EmployeeRecords.View;

import com.ajp.EmployeeRecords.Database.EmployeeDatabaseConnector;
import com.ajp.EmployeeRecords.Model.Employee;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "add", value = "/add")


public class add extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {

Employee e = new Employee();


e.setid(Integer.parseInt(request.getParameter("_id")));
e.setName(request.getParameter("name"));
e.setEmail(request.getParameter("email"));

EmployeeDatabaseConnector empDB = new EmployeeDatabaseConnector();


empDB.add(e);

response.setStatus(200);
response.sendRedirect("/");
}
}

Delete.java
package com.ajp.EmployeeRecords.View;

import com.ajp.EmployeeRecords.Database.EmployeeDatabaseConnector;
import com.ajp.EmployeeRecords.Model.Employee;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "delete", value = "/delete")


public class delete extends HttpServlet {

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setStatus(200);
response.setContentType("application/json");
EmployeeDatabaseConnector empDB = new EmployeeDatabaseConnector();

Employee e = new Employee();


e.setid(Integer.parseInt(request.getParameter("_id")));
e.setName(request.getParameter("name"));
e.setEmail(request.getParameter("email"));

empDB.delete(e);
response.setStatus(200);
}
}

Output:

Figure 3.1: Adding Records

Figure 3.2: Deleting Records


Experiment-4
Aim:
Write a program using cookie to save Login and Password credentials in cookie and return Cookie
value to the client Browser after reading values back from cookie.

Software used:
IntelliJ Idea Ultimate, Java 15 and Java EE 8

Source Code:
Index.jsp
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Student Form</title>
</head>

<body>
<h1>Login Form</h1>

<div class="form-container">
<form id="form" action="auth" method="GET">
<label for="username"></label><input type="text" placeholder="Username"
name="username" id="username" required />
<label for="password"></label><input type="password" placeholder="Password"
name="password" id="password" required />
<button type="submit" id="submit">Login</button>
</form>
</div>
</body>
</html>
Auth.java
package com.ajp.cookie;

import com.ajp.cookie.utils.Encrypt;

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@WebServlet(name = "auth", value = "/auth")


public class auth extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws


IOException {
response.setContentType("text/html");

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


String password = request.getParameter("password");
Cookie cookie = new Cookie("user", Encrypt.encrypt(username+":"+password));

response.addCookie(cookie);

try{
PrintWriter out = response.getWriter();
out.print("<html><head><title>Cookie</title></head><body>");
out.print("Your login details are encrypted and saved in a cookie <br />");
out.print("<a href=\"view\">Click here to view your details. </a>");
out.print("</body></html>");
}catch(Exception e){
e.printStackTrace();
}
}

View.java
package com.ajp.cookie;

import com.ajp.cookie.utils.Encrypt;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

@WebServlet(name = "view", value = "/view")


public class view extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
try{
Map<String, Cookie> cookieMap = new HashMap<>();
for (Cookie cookie : request.getCookies()) {
cookieMap.put(cookie.getName(), cookie);
}
Cookie cookie = cookieMap.get("user");
String s = Encrypt.decrypt(cookie.getValue());
String[] user = s.split(":");

PrintWriter out = response.getWriter();


out.print("<html><head><title>Cookie</title></head><body>");
out.print("<h3> Username: " + user[0] + "</h3>");
out.print("<h3> Password: " + user[1] + "</h3>");
out.print("</body></html>");
}catch(Exception e){
e.printStackTrace();
}
}
}
Output:

Figure 4.1: Login Form

Figure 4.2: View page


Experiment-5
Aim:
Write a program using servlet to write persistent and non-persistent cookies on client side.

Software used:
IntelliJ Idea Ultimate, Java 15 and Java EE 8

Source Code:
Index.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>Cookies</title>
</head>
<body>
<br/>
<a href="cookie">Click here to write cookies</a>
</body>
</html>

Cookie.java
package com.example.persi;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "cookie", value = "/cookie")


public class cookie extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setStatus(200);
response.setContentType("text/html");

Cookie ck1 = new Cookie("persist", "This-will-persist");


ck1.setMaxAge(90000);
Cookie ck2 = new Cookie("non-persistent", "This-will-perish");

response.addCookie(ck1);
response.addCookie(ck2);

response.sendRedirect("/");
}
}
Output:

Figure 5.1: Two cookies written

Figure 5.2: Only persistent one left after reopening session


Experiment-6
Aim:
Write a Program to differentiate between new user, Repeat Visitor, Frequent Visitor using Cookie
Mechanism

Software used:
IntelliJ Idea Ultimate, Java 15 and Java EE 8

Source Code:
View.java
package com.ajp.cookieDemo;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;

@WebServlet(name = "view", value = "/view")


public class view extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
try{
Cookie[] cks = request.getCookies();
HashMap<String, Cookie> hash = new HashMap<>();

for (Cookie c: cks){


hash.put(c.getName(), c);
}

response.setStatus(200);
int visit;
String visitor;
if (hash.get("visit" ) == null){
visit = 1;
visitor = "New Visitor";
}
else if (Integer.parseInt(hash.get("visit").getValue())== 1 ){
visit = 2;
visitor = "Repeat Visitor";
}
else{
visit = 3;
visitor = "Frequent Visitor";
}

Cookie ck = new Cookie("visit", String.valueOf(visit));


ck.setMaxAge(9000);
response.addCookie(ck);
response.setStatus(200);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head><title> Cookie </title></head><body>");
out.println("<h1>You are a " + visitor + "</h1>");
out.println("</body></html>");

}catch(Exception e){
e.printStackTrace();
}
}
}

Output:

Figure 6.1: New Visitor

Figure 6.2: Repeat Visitor


Figure 6.3: Frequent Visitor
Experiment-7
Aim:
Write a Program to demonstrate Struts Request Validator Framework.

Software used:
IntelliJ Idea Ultimate, Java 15 and Java EE 8

Source Code:
Index.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
<title>Employee Form</title>
</head>
<body>
<s:form action = "/employee" method = "post">
<s:textfield name = "name" label = "Name" size = "20" />
<s:textfield name = "age" label = "Age" size = "20" />
<s:submit name = "submit" label = "Submit" align="center" />
</s:form>
</body>
</html>
Success.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title>Success</title>
</head>
<body>
Employee Information is captured successfully.
</body>
</html>
Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<display-name>Struts 2</display-name>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Struts.xml
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC


"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "emp" extends = "struts-default">
<action name = "employee"
class = "com.example.struts.Employee"
method = "execute">
<result name = "input">/index.jsp</result>
<result name = "success">/success.jsp</result>
</action>
</package>
</struts>
Employee.java
package com.example.struts;

import com.opensymphony.xwork2.ActionSupport;

public class Employee extends ActionSupport {


private String name;
private int age;

public String execute(){


return SUCCESS;
}

public String getName() {


return name;
}

public void setName(String name) {


this.name = name;
}

public int getAge() {


return age;
}

public void setAge(int age) {


this.age = age;
}

public void validate() {


if (name == null || name.trim().equals("")) {
addFieldError("name","The name is required");
}

if (age < 28 || age > 65) {


addFieldError("age","Age must be in between 28 and 65");
}
}
}
Output:

Figure 7.1: Input field validation

Figure 7.2: Success page.


Experiment-8
Aim:
Write a program to demonstrate Stateless Session Bean by basic calculator functionality.

Software used:
IntelliJ Idea Ultimate, Java 15 and Java EE 8

Source Code:
Index.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Calculator</title>
</head>

<body bgcolor="lightgreen">
<h1>Basic Operations</h1>
<hr>

<form action="Result.jsp" method="POST">


<p>Enter first value:
<input type="text" name="num1" size="25"></p>
<br>
<p>Enter second value:
<input type="text" name="num2" size="25"></p>
<br>

<b>Select your choice:</b><br>


<input type="radio" name="group1" value ="add">Addition<br>
<input type="radio" name="group1" value ="sub">Subtraction<br>
<input type="radio" name="group1" value ="multi">Multiplication<br>
<input type="radio" name="group1" value ="div">Division<br>
<p>
<input type="submit" value="Submit">
<input type="reset" value="Reset">
</p>
</form>
</body>
</html>

Result.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="com.ajp.ejbex.*, javax.naming.*"%>
<%@ page import="java.util.Properties" %>

<%!
private CalculatorBeanInterface ops = null;
float result = 0;

public void jspInit() {


try {

Properties p = new Properties();


p.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.core.LocalInitialContextFac
tory");
InitialContext ic = new InitialContext(p);
ops = (CalculatorBeanInterface) ic.lookup("CalculatorBeanRemote");

System.out.println("Loaded Calculator Bean");

} catch (Exception ex) {


ex.printStackTrace();
}
}

public void jspDestroy() {


ops = null;
}
%>

<%

try {
String s1 = request.getParameter("num1");
String s2 = request.getParameter("num2");
String s3 = request.getParameter("group1");

System.out.println(s3);

if (s1 != null && s2 != null) {


Integer num1 = Integer.parseInt(s1);
Integer num2 = Integer.parseInt(s2);

if (s3.equals("add")) {
result = ops.add(num1, num2);
} else if (s3.equals("sub")) {
result = ops.subtract(num1, num2);
} else if (s3.equals("multi")) {
result = ops.multiply(num1, num2);
} else {
result = ops.divide(num1, num2);
}

%>
<p>
<b>The result is:</b> <%= result%>
<p>

<%
}
}// end of try
catch (Exception e) {
e.printStackTrace();
//result = "Not valid";
}
%>
CalculatorBeanInterface.java
package com.ajp.ejbex;

import javax.ejb.Remote;

@Remote
public interface CalculatorBeanInterface {
public int add(int a, int b);

public int subtract(int a, int b);


public int multiply(int a, int b);

public int divide(int a, int b);


}

CalculatorBean.java
package com.ajp.ejbex;

import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.inject.Named;

@Stateless(name = "CalculatorBean")
@Named("MyBean")
public class CalculatorBean implements CalculatorBeanInterface {

@Resource
private SessionContext context;

public int add(int a, int b) {


return a + b;
}

public int subtract(int a, int b) {


return a - b;
}

public int multiply(int a, int b) {


return a * b;
}

public int divide(int a, int b) {


return a / b;
}

}
Output:

Figure 8.1: Calculator form

Figure 8.2: Result page


Experiment-9
Aim:
Demonstrate Servlet that provides the information of Remote IP Address, Context Path, and other
server related information.

Software used:
IntelliJ Idea Ultimate, Java 15 and Java EE 8

Source Code:
Index.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>

<html>

<head>
<title>Ejb3 Stateful Tutorial</title>
</head>

<body bgcolor="#FFFFCC">

<p ><b>Welcome to <br>


</b>
Click <a href="/Stateful/form.jsp">Bank Transaction Example</a> to execute Bank
Bean<br></p>
</body>
</html>

Form.jsp
<%--
Document : form
Created on : Mar 5, 2022, 12:28:24 PM
Author : Administrator
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>


<html>
<head>
<title>Bank Account</title>
</head>

<body>
<h1>Bank Transaction Request Form</h1>
<hr><br>
<table>
<form action="webclient.jsp" method="POST">
<tr><td></tr></td>
<tr><td>Enter the amount in rupees:
<input type="text" name="amt" size="10"></tr></td>
<br>
<tr><td><b>Select your choice:</b></tr></td>
<tr><td><input type="radio" name="group1" value ="dep">Deposit</tr></td>
<tr><td><input type="radio" name="group1" value ="with">Withdraw<br></tr></td>

<tr><td>
<input type="submit" value="Transmit">
<input type="reset" value="Reset"></tr></td>
<tr><td></tr></td>

</form>
</table>

</body>
</html>

WebClient.jsp
<%--
Document : WebClient
Created on : Mar 5, 2022, 12:25:07 PM
Author : Administrator
--%>

<%@ page contentType="text/html; charset=UTF-8" %>


<%@ page import="com.ajp.Stateful.*,javax.naming.*"%>
<%@ page import="java.util.Properties" %>

<%!
public BankInterface account = null;
float bal=0;

public void jspInit() {


try {
Properties p = new Properties();
p.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.core.LocalInitialContextFactory");
InitialContext ic = new InitialContext(p);
account = (BankInterface) ic
.lookup("BankBeanLocal");
System.out.println("Loaded Account Bean");

} catch (Exception ex) {


System.out.println("Error:"+
ex.getMessage());
}
}
public void jspDestroy() {
account = null;
}
%>
<%

try {
String s1 = request.getParameter("amt");
String s2 = request.getParameter("group1");

if ( s1 != null) {
Float amt = new Float(s1);

if(s2.equals("dep"))
bal=account.deposit(amt.floatValue());
else if(s2.equals("with"))
bal=account.withdraw(amt.floatValue());
else
%>
<p>Please select your choice</p>

<%
}
else
%>
<br>Please enter the amount<br>
<p>
The Transaction is complete<br>
<b>Your Current Balance is:</b> <%= bal%>
<p>

<%
}// end of try
catch (Exception e) {
e.printStackTrace ();
}
%>

BankInterface.java
package com.ajp.Stateful;

import javax.ejb.Local;
import javax.ejb.Stateful;

@Local
public interface BankInterface extends Stateful {

float deposit(float amount);


float withdraw(float amount);
void remove();
}

BankBean.java
package com.ajp.Stateful;

import javax.ejb.Stateful;
import java.lang.annotation.Annotation;

@Stateful
public class BankBean implements BankInterface{
private float balance = 0;

public float deposit(float amount){


balance += amount;
return balance;
}

public float withdraw(float amount){


balance -= amount;
return balance;
}

public void remove(){


balance = 0;
}

@Override
public String name() {
return null;
}

@Override
public String mappedName() {
return null;
}

@Override
public String description() {
return null;
}

@Override
public boolean passivationCapable() {
return false;
}

@Override
public Class<? extends Annotation> annotationType() {
return null;
}
}

Output:

Figure 9.1: Index.jsp

Figure 9.2: Form.jsp


Figure 9.3: Transaction (Deposit)

Figure 9.4: Transaction (Withdraw)


Experiment-10
Aim:
Create a program to demonstrate an Entity Bean and track the session.

Software used:
IntelliJ Idea Ultimate, Java 15 and Java EE 8

Source Code:
Index.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>Employee</title>
</head>
<body>
<form action="add" method="POST">
<input type="text" placeholder="Name" name="name" id="name" required/>
<input type="number" placeholder="ID" name="_id" id="_id" required/>
<button type="submit">Submit</button>
</form>
</body>
</html>

EmployeeEntity.java
package entity;

import javax.persistence.*;
import java.util.Objects;

@Entity
@Table(name = "employee", schema = "entity")
public class EmployeeEntity {
private int id;
private String name;

@Id
@Column(name = "_id")
public int getId() {
return id;
}

public void setId(int id) {


this.id = id;
}

@Basic
@Column(name = "name")
public String getName() {
return name;
}

public void setName(String name) {


this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

EmployeeEntity that = (EmployeeEntity) o;

if (id != that.id) return false;


if (!Objects.equals(name, that.name)) return false;

return true;
}

@Override
public int hashCode() {
int result = id;
result = 31 * result + (name != null ? name.hashCode() : 0);
return result;
}
}

EmployeeBeanInterface.java
package com.ajp.Entity;

import entity.EmployeeEntity;

import javax.ejb.Local;

@Local
public interface EmployeeBeanInterface {
void add(EmployeeEntity employee);
}

EmployeeBean.java
package com.ajp.Entity;

import entity.EmployeeEntity;

import javax.ejb.Stateless;
import javax.persistence.*;

@Stateless
public class EmployeeBean implements EmployeeBeanInterface{

@Override
public void add(EmployeeEntity employee) {
EntityManagerFactory entityManagerFactory =
Persistence.createEntityManagerFactory("default");
EntityManager entityManager = entityManagerFactory.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();

try {
transaction.begin();

entityManager.persist(employee);
transaction.commit();
} finally {
if (transaction.isActive()) {
transaction.rollback();
}
entityManager.close();
entityManagerFactory.close();
}
}
}

AddServlet.java
package com.ajp.Entity;

import entity.EmployeeEntity;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Properties;

@WebServlet(name="AddServlet", value="/add")
public class AddServlet extends HttpServlet {

private EmployeeBeanInterface emp;

@Override
public void init(ServletConfig config){
Properties p = new Properties();
p.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.core.LocalInitialContextFactory");
try {
InitialContext ic = new InitialContext(p);
emp = (EmployeeBeanInterface) ic.lookup("EmployeeBeanLocal");
} catch (NamingException e) {
e.printStackTrace();
}
}

@Override
public void doPost(HttpServletRequest request, HttpServletResponse response){
Integer ID = Integer.parseInt(request.getParameter("_id"));
String name = request.getParameter("name");

EmployeeEntity employee = new EmployeeEntity();


employee.setId(ID);
employee.setName(name);

emp.add(employee);

}
}
Output:

Figure 10.1: Form

Figure 10.2: Database

You might also like