0% found this document useful (0 votes)
2 views14 pages

Java Lab Assignment

The document outlines a Java-based web application for a Railway Reservation System, including servlets for login, ticket booking, and cancellation functionalities. It contains HTML forms for user interaction and SQL procedures for managing train bookings and cancellations. The application connects to an Oracle database to handle data operations related to train schedules and user bookings.

Uploaded by

Sampriti
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views14 pages

Java Lab Assignment

The document outlines a Java-based web application for a Railway Reservation System, including servlets for login, ticket booking, and cancellation functionalities. It contains HTML forms for user interaction and SQL procedures for managing train bookings and cancellations. The application connects to an Oracle database to handle data operations related to train schedules and user bookings.

Uploaded by

Sampriti
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 14

HelloServlet

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;
/**
* Servlet implementation class HelloServlet
*/
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloServlet() {
super();
// TODO Auto-generated constructor stub}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
// TODO Auto-generated method stub
PrintWriter out=response.getWriter();
response.setContentType("text/html");
HttpSession hs=request.getSession(true);
String uname=(String)hs.getAttribute("username");
String pwd=(String)request.getAttribute("password");
out.println("<h1>Hello World!!!</h1>");
out.println("<h1>Welcome "+uname+" , your password is "+pwd+"!!!</h1>");
}
}

Login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="LoginServlet">
<br>Enter User Id<input type="text" name="t1">
<br>Enter Password<input type="password" name="t2">
<br><input type="submit" value="submit">
</form>
</body>
</html>

LoginServlet
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
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;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class LoginServlet
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
// TODO Auto-generated method stub
PrintWriter out=response.getWriter();
response.setContentType("text/html");
String uid=request.getParameter("t1");
String pass=request.getParameter("t2");
RequestDispatcher rd=null;
HttpSession hs=request.getSession(true);
ServletContext sc=getServletContext();
if(uid.equals("abcd")&&pass.equals("abcd123"))
{
//out.println("<h1>Welcome "+uid+" , your password is "+pass+"!!!</h1>");
hs.setAttribute("username", uid);
request.setAttribute("password", pass);
//rd=sc.getRequestDispatcher("/HelloServlet");
response.sendRedirect("HelloServlet");
}
else{
//out.println("<h1>Invalid User!!!</h1>");
//rd=request.getRequestDispatcher("Login.html");
response.sendRedirect("Login.html");
}
//rd.forward(request, response);
}
}

#home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Railway Reservation System</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
margin: 50px; }
h1 {
color: #333; }
.links {
margin-top: 20px;
a{
display: inline-block;
margin: 10px;
padding: 10px 20px;
text-decoration: none;
color: white;
background-color: #007bff;
border-radius: 5px;
font-size: 16px; }
a:hover {
background-color: #0056b3;}
</style>
</head>
<body>
<h1>Welcome to the Railway Reservation System</h1>
<div class="links">
<a href="booking.html">Book Tickets</a>
<a href="cancel.html">Cancel Tickets</a>
</div>
</body>
</html>

Table creation
CREATE TABLE TRAIN1 (
TRAIN_NO VARCHAR2(5) PRIMARY KEY,
TRAIN_NAME VARCHAR2(20) NOT NULL,
TOTAL_SEAT NUMBER
);
CREATE TABLE BOOKING1 (
PNR VARCHAR2(5) PRIMARY KEY,
NOP NUMBER
);
INSERT INTO TRAIN1 VALUES ('TR01', 'RAJDHANI', 100);
INSERT INTO TRAIN1 VALUES ('TR002', 'SHATABDI', 120);
NSERT INTO TRAIN1 VALUES ('TR003', 'MUMBAIEXP', 80);

SELECT * FROM TRAIN1;


SELECT * FROM BOOKING1;

Train Ticket Booking Sql


SET SERVEROUTPUT ON;
CREATE SEQUENCE SEQ1 START WITH 1 INCREMENT BY 1 MAXVALUE 99999 NOORDER NOCYCLE NOCACHE;
CREATE OR REPLACE PROCEDURE PROC_BOOK_TICKET (
PNR OUT BOOKING1.PNR%TYPE, -- OUT parameter to return the PNR
NOP IN BOOKING1.NOP%TYPE, -- IN parameter for the number of passengers
TRN IN TRAIN1.TRAIN_NO%TYPE -- IN parameter for the train number
) IS
N NUMBER;
SEATS_AVAILABLE NUMBER;
BEGIN
-- Checking if enough seats are available
SELECT TOTAL_SEAT INTO SEATS_AVAILABLE FROM TRAIN1 WHERE TRAIN_NO = TRN;
IF SEATS_AVAILABLE >= NOP THEN
-- Generate a new PNR using the sequence
SELECT SEQ1.NEXTVAL INTO N FROM DUAL; --DUAL is actually a placeholder table exists by default virtually.
PNR := CONCAT('P', N); -- Concatenate 'P' with the sequence number to form PNR
INSERT INTO BOOKING1 (PNR, NOP) VALUES (PNR, NOP);
UPDATE TRAIN1 SET TOTAL_SEAT = TOTAL_SEAT - NOP WHERE TRAIN_NO = TRN;
COMMIT;
DBMS_OUTPUT.PUT_LINE('Ticket Booking Successful! PNR: ' || PNR);
ELSE
RAISE_APPLICATION_ERROR(-20001, 'Not enough seats available.');
END IF;

EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('Error occurred during booking: ' || SQLERRM);
END;
/

#booking.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Book Train Tickets</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
}
form {
max-width: 400px;
margin: auto;
padding: 20px;
border: 1px solid #ccc;
border-radius: 10px;
background-color: #f9f9f9; }
label {
display: block;
margin: 10px 0 5px; }
input, button {
width: 100%;
padding: 10px;
margin: 10px 0;
border: 1px solid #ccc;
border-radius: 5px; }
button {
background-color: #28a745;
color: #fff;
font-size: 16px;
border: none;
cursor: pointer; }
button:hover {
background-color: #218838; }
</style>
</head>
<body>
<h2>Book Train Tickets</h2>
<form action="BookingServlet" method="post">
<label for="trainNo">Train Number:</label>
<input type="text" id="trainNo" name="trainNo" placeholder="Enter Train Number" required>
<label for="nop">Number of Passengers:</label>
<input type="number" id="nop" name="nop" placeholder="Enter Number of Passengers" min="1" required>
<button type="submit">Book Ticket</button>
</form>
</body>
</html>

Booking Servlet
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
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("/BookingServlet")
public class BookingServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String trainNo = request.getParameter("trainNo"); // Train number
int nop = Integer.parseInt(request.getParameter("nop")); // Number of passengers
Connection conn = null;
CallableStatement cstmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "system", "1234");
if (conn == null) {
out.println("Connection not created");
} else {
out.println("Connection created successfully<br>");
}
// Preparing the call to the PROC_BOOK_TICKET stored procedure
String sql = "{CALL PROC_BOOK_TICKET(?, ?, ?)}"; // Calls the booking stored procedure
cstmt = conn.prepareCall(sql);

// Register OUT parameter and set IN parameters


cstmt.registerOutParameter(1, java.sql.Types.VARCHAR); // PNR as OUT parameter
cstmt.setInt(2, nop); // NOP as IN parameter
cstmt.setString(3, trainNo); // Train number as IN parameter

// Execute the procedure


cstmt.execute();
// Retrieve the generated PNR from the OUT parameter
String pnr = cstmt.getString(1);

// Display success message


out.println("<h2>Ticket Booking Successful</h2>");
out.println("<p>Your PNR Number is: " + pnr + "</p>");
out.println("<p>Train Number: " + trainNo + "</p>");
out.println("<p>Number of Passengers: " + nop + "</p>");
out.println("<a href='booking.html'>Book Another Ticket</a>");
} catch (SQLException | ClassNotFoundException e) {
// Display error message
out.println("<h2>Error Occurred</h2>");
out.println("<p>" + e.getMessage() + "</p>");
out.println("<a href='booking.html'>Try Again</a>");
} finally {
// Close resources
try {
if (cstmt != null) cstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

Cancel.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cancel Train Booking</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;}
form {
max-width: 400px;
margin: auto;
padding: 20px;
border: 1px solid #ccc;
border-radius: 10px;
background-color: #f9f9f9; }
label {
display: block;
margin: 10px 0 5px; }
input, button {
width: 100%;
padding: 10px;
margin: 10px 0;
border: 1px solid #ccc;
border-radius: 5px;
}
button {
background-color: #dc3545;
color: #fff;
font-size: 16px;
border: none;
cursor: pointer; }
button:hover {
background-color: #c82333; }
</style>
</head>
<body>
<h2>Cancel Train Booking</h2>
<form method="post" action="CancelServlet">
<label for="pnr">PNR Number:</label>
<input type="text" id="pnr" name="pnr" placeholder="Enter PNR Number" required>
<label for="nop">Number of Passengers (NOP):</label>
<input type="number" id="nop" name="nop" placeholder="Enter Number of Passengers" min="1" required>
<label for="trn">Train Number (TRN):</label>
<input type="text" id="trn" name="trn" placeholder="Enter Train Number" required>
<button type="submit">Cancel Booking</button>
</form>
</body>
</html>
CancelServlet.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;
import java.sql.*;
@WebServlet("/CancelServlet")
public class CancelServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public CancelServlet() {
super();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
response.setContentType("text/html");
String oldPnr = request.getParameter("pnr"); // Old PNR to delete
int nop = Integer.parseInt(request.getParameter("nop")); // Number of passengers
String trn = request.getParameter("trn"); // Train number
Connection con = null;
CallableStatement cs = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "system", "1234");
if (con == null) {
out.println("Connection not created");
return;
} else {
out.println("Connection created<br>");
}
// Prepare the callable statement to call the PROC_CANCEL_TICKET procedure
cs = con.prepareCall("{CALL PROC_CANCEL_TICKET(?, ?, ?)}");
cs.setString(1, oldPnr); // Old PNR
cs.setInt(2, nop); // Number of passengers
cs.setString(3, trn); // Train number
cs.execute();
out.println("<h1>Ticket Cancellation Successful</h1>");
out.println("<p>PNR: " + oldPnr + " has been cancelled successfully.</p>");
out.println("<p>Train Number: " + trn + "</p>");
out.println("<p>Seats Released: " + nop + "</p>");
} catch (SQLException e) {
out.println("<h1>SQL Error</h1>");
out.println("<p>" + e.getMessage() + "</p>");
e.printStackTrace();
} catch (Exception e) {
out.println("<h1>Error</h1>");
out.println("<p>" + e.getMessage() + "</p>");
e.printStackTrace();
} finally {
try {
if (cs != null) cs.close();
if (con != null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

Ticket Cancel SQL


CREATE OR REPLACE PROCEDURE PROC_CANCEL_TICKET (

OLD_PNR IN BOOKING1.PNR%TYPE, -- IN parameter for the PNR to cancel (Inputs)

NOP IN BOOKING1.NOP%TYPE, -- IN parameter for the number of passengers

TRN IN TRAIN1.TRAIN_NO%TYPE -- IN parameter for the train number


) IS

NOP_FROM_TAB NUMBER;

BEGIN

-- Fetch the NOP from BOOKING1 table based on the provided PNR

SELECT NOP INTO NOP_FROM_TAB FROM BOOKING1 WHERE PNR = OLD_PNR;

-- Conditional logic to handle the cancellation

IF NOP_FROM_TAB = NOP THEN

-- Completely delete the booking if NOP matches exactly

DELETE FROM BOOKING1 WHERE PNR = OLD_PNR;

UPDATE TRAIN1 SET TOTAL_SEAT = TOTAL_SEAT + NOP WHERE TRAIN_NO = TRN;

COMMIT;

ELSIF NOP_FROM_TAB > NOP THEN

-- Partially cancel the booking by updating the NOP

UPDATE BOOKING1 SET NOP = NOP_FROM_TAB - NOP WHERE PNR = OLD_PNR;

UPDATE TRAIN1 SET TOTAL_SEAT = TOTAL_SEAT + NOP WHERE TRAIN_NO = TRN;

COMMIT;

ELSE

-- Raise an error if user enters an invalid NOP (greater than booked)

RAISE_APPLICATION_ERROR(-20002, 'USER ENTERED A WRONG NOP.');

END IF;

EXCEPTION

WHEN NO_DATA_FOUND THEN

-- Handle case where PNR does not exist

RAISE_APPLICATION_ERROR(-20003, 'PNR NOT FOUND.');

WHEN OTHERS THEN

-- Generic error handling with rollback

ROLLBACK;

DBMS_OUTPUT.PUT_LINE('Error occurred during cancellation: ' || SQLERRM);

END;

You might also like