CRUD Operations in Java Web Applications using jTable jQuery plugin via Ajax
In the previous article “Setting up JQuery jTable plugin in Java Web Applications” I have explained how to setup jTable plugin in java web application. This article describes on how to implement “Ajax based curd operation in Java Web Applications using the JQuery jTable plugin and it will not explain how to setup jTable plugin in java web application. So If you have not read the previous articles “Setting up JQuery jTable plugin in Java Web Applications I will recommend that you read that article first because it explains how you can integrate the JTable plug-in with a J2EE application, this article will assume that the code for the integration of the jQuery JTable plug-in is implemented, and only the code required for implementing CRUD operation will be explained here.
Steps done to set up our application for jTable
Libraries required for the setup,
Create a dynamic project in eclipse and setup above required libraries as explained here. The final project structure of this looks as below.
Setup from the browser perspective: jTable
jTable plugin allows you to issue an ajax request via jQuery plugin and expects a JSON object as a response, hence the following configuration needs to be made in Jsp file
JSP
<!DOCTYPE html> <html> <head> <title>CRUD operations using jTable in J2EE</title> <!-- jTable Metro styles. --> <link href="css/metro/blue/jtable.css" rel="stylesheet" type="text/css" /> <link href="css/jquery-ui-1.10.3.custom.css" rel="stylesheet" type="text/css" /> <!-- jTable script file. --> <script src="js/jquery-1.8.2.js" type="text/javascript"></script> <script src="js/jquery-ui-1.10.3.custom.js" type="text/javascript"></script> <script src="js/jquery.jtable.js" type="text/javascript"></script> <!-- User Defined Jtable js file --> <script src="js/userDefieneJTableJs.js" type="text/javascript"></script> </head> <body> <div style="text-align: center;"> <h4>AJAX based CRUD operations using jTable in J2ee</h4> <div id="StudentTableContainer"></div> </div> </body> </html>
JS File
$(document).ready(function() { $('#StudentTableContainer').jtable({ title : 'Students List', actions : { listAction : 'Controller?action=list', createAction : 'Controller?action=create', updateAction : 'Controller?action=update', deleteAction : 'Controller?action=delete' }, fields : { studentId : { title : 'Student Id', width : '30%', key : true, list : true, edit : false, create : true }, name : { title : 'Name', width : '30%', edit : true }, department : { title : 'Department', width : '30%', edit : true }, emailId : { title : 'Email', width : '20%', edit : true } } }); $('#StudentTableContainer').jtable('load'); });
I have explained the working of above jTable js file in my previous article “Setting up JQuery jTable plugin in Java Web Applications”
Now create a student table in Oracle database using the query below. On this table we are going to perform CRUD operation via ajax
create table Student(studentid int,name varchar(50),department varchar(50), email varchar(50));
CurdDao
Create a class that performs CRUD operation in database
package com.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import com.jdbc.DataAccessObject; import com.model.Student; public class CrudDao { private Connection dbConnection; private PreparedStatement pStmt; public CrudDao() { dbConnection = DataAccessObject.getConnection(); } public void addStudent(Student student) { String insertQuery = "INSERT INTO STUDENT(STUDENTID, NAME, " + "DEPARTMENT, EMAIL) VALUES (?,?,?,?)"; try { pStmt = dbConnection.prepareStatement(insertQuery); pStmt.setInt(1, student.getStudentId()); pStmt.setString(2, student.getName()); pStmt.setString(3, student.getDepartment()); pStmt.setString(4, student.getEmailId()); pStmt.executeUpdate(); } catch (SQLException e) { System.err.println(e.getMessage()); } } public void deleteStudent(int userId) { String deleteQuery = "DELETE FROM STUDENT WHERE STUDENTID = ?"; try { pStmt = dbConnection.prepareStatement(deleteQuery); pStmt.setInt(1, userId); pStmt.executeUpdate(); } catch (SQLException e) { System.err.println(e.getMessage()); } } public void updateStudent(Student student) { String updateQuery = "UPDATE STUDENT SET NAME = ?, " + "DEPARTMENT = ?, EMAIL = ? WHERE STUDENTID = ?"; try { pStmt = dbConnection.prepareStatement(updateQuery); pStmt.setString(1, student.getName()); pStmt.setString(2, student.getDepartment()); pStmt.setString(3, student.getEmailId()); pStmt.setInt(4, student.getStudentId()); pStmt.executeUpdate(); } catch (SQLException e) { System.err.println(e.getMessage()); } } public List<Student> getAllStudents() { List<Student> students = new ArrayList<Student>(); String query = "SELECT * FROM STUDENT ORDER BY STUDENTID"; try { Statement stmt = dbConnection.createStatement(); ResultSet rs = stmt.executeQuery(query); while (rs.next()) { Student student = new Student(); student.setStudentId(rs.getInt("STUDENTID")); student.setName(rs.getString("NAME")); student.setDepartment(rs.getString("DEPARTMENT")); student.setEmailId(rs.getString("EMAIL")); students.add(student); } } catch (SQLException e) { System.err.println(e.getMessage()); } return students; } }
I hope the above code is self explanatory
Setup from the server’s perspective: Servlet
jTable uses the POST method by default while making AJAX calls to the server and in server side, we will convert Java objects created under different CRUD operation to JSON strings that will be parsed by jTable pugin in the JSP page and will be rendered on the web page. This conversion of Java Object to Json format is done using Google gson jar. I have used the below method of gson library to convert java object to json object
Gson gson = new GsonBuilder().setPrettyPrinting().create(); String jsonArray = gson.toJson(JSONROOT);
Now let us look into the different response created for CRUD operations
Reading
Method to jTable to get a list of records:
HashMap<String, Object> JSONROOT = new HashMap<String, Object>(); if (action.equals("list")) { try{ // Fetch Data from Student Table studentList = dao.getAllStudents(); // Return in the format required by jTable plugin JSONROOT.put("Result", "OK"); JSONROOT.put("Records", studentList); // Convert Java Object to Json String jsonArray = gson.toJson(JSONROOT); response.getWriter().print(jsonArray); } catch (Exception ex) { JSONROOT.put("Result", "ERROR"); JSONROOT.put("Message", ex.getMessage()); String error = gson.toJson(JSONROOT); response.getWriter().print(error); } }
For read operations, Result property must be “OK” if operation is successful. If an error occurs, then Result property must be “ERROR”. If Result is “OK”, the Records property will contain an array of records to show in the MySql table. If it’s ERROR, a Message property will contain an error message to show to the user. A sample return value for listAction is show below
{“Result”:”OK”,”Records”:[
{
“studentId”: 1,
“name”: “Muthu vijay”,
“department”: “CSE”,
“emailId”: “[email protected]”
},
{
“studentId”: 2,
“name”: “Bashit”,
“department”: “EEE”,
“emailId”: “[email protected]”
},
{
“studentId”: 3,
“name”: “Haripriya”,
“department”: “IT”,
“emailId”: “[email protected]”
}
]}
Creating & Updating
Creating and Updating a record is optional. If you allow user to create/update a record, you must supply an action to jTable to create a new record. In case of create you must return the newly created object in JSON format, where as in case of update you must return the updated object via its respective action, which is done via gson library. A sample return value for createAction/UpdateAction is shown below
{“Result”:”OK”,”Record”:{
“studentId”: 9,
“name”: “Lahir nisha”,
“department”: “CSE”,
“emailId”: “[email protected]”
}}
if (action.equals("create") || action.equals("update")) { try{ Student student = new Student(); if (request.getParameter("studentId") != null) { int studentId = Integer.parseInt(request.getParameter("studentId")); student.setStudentId(studentId); } if (request.getParameter("name") != null) { String name = request.getParameter("name"); student.setName(name); } if (request.getParameter("department") != null) { String department = request.getParameter("department"); student.setDepartment(department); } if (request.getParameter("emailId") != null) { String emailId = request.getParameter("emailId"); student.setEmailId(emailId); } if (action.equals("create")) { // Create new record dao.addStudent(student); } else if (action.equals("update")) { // Update existing record dao.updateStudent(student); } // Return in the format required by jTable plugin JSONROOT.put("Result", "OK"); JSONROOT.put("Record", student); // Convert Java Object to Json String jsonArray = gson.toJson(JSONROOT); response.getWriter().print(jsonArray); } catch (Exception ex) { JSONROOT.put("Result", "ERROR"); JSONROOT.put("Message", ex.getMessage()); String error = gson.toJson(JSONROOT); response.getWriter().print(error); } }
Deleting
Similar to update/create option, delete record is optional. If you allow user to delete a record, you must supply an action to jTable to delete a record, and response of delete operation is similar to update.
if (action.equals("delete")) { try{ // Delete record if (request.getParameter("studentId") != null) { int studentId = Integer.parseInt(request.getParameter("studentId")); dao.deleteStudent(studentId); // Return in the format required by jTable plugin JSONROOT.put("Result", "OK"); // Convert Java Object to Json String jsonArray = gson.toJson(JSONROOT); response.getWriter().print(jsonArray); } } catch (Exception ex) { JSONROOT.put("Result", "ERROR"); JSONROOT.put("Message", ex.getMessage()); String error = gson.toJson(JSONROOT); response.getWriter().print(error); } }
Model class
Create Model class used in the controller, which will have getters and setters for fields specified in jTable script.
package com.model; public class Student { private int studentId; private String name; private String department; private String emailId; public int getStudentId() { return studentId; } public String getName() { return name; } public String getDepartment() { return department; } public String getEmailId() { return emailId; } public void setStudentId(int studentId) { this.studentId = studentId; } public void setName(String name) { this.name = name; } public void setDepartment(String department) { this.department = department; } public void setEmailId(String emailId) { this.emailId = emailId; } }
DAO Class
Create utility class which connect to database Using Oracle JDBC driver
package com.jdbc; import java.sql.Connection; import java.sql.DriverManager; public class DataAccessObject { private static Connection connection = null; public static Connection getConnection() { if (connection != null) return connection; else { // Store the database URL in a string String serverName = "127.0.0.1"; String portNumber = "1521"; String sid = "XE"; String dbUrl = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid; try { Class.forName("oracle.jdbc.driver.OracleDriver"); // set the url, username and password for the database connection = DriverManager.getConnection(dbUrl, "system", "admin"); } catch (Exception e) { e.printStackTrace(); } return connection; } } }
web.xml
<welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>Controller</servlet-name> <servlet-class>com.servlet.Controller</servlet-class> </servlet> <servlet-mapping> <servlet-name>Controller</servlet-name> <url-pattern>/Controller</url-pattern> </servlet-mapping>
Demo
On running the application
On clicking ‘Add new record’
Now the new record will be added with fade out animation
On clicking edit button
On clicking delete button
In the next article Pagination in Java Web Applications using jQuery jTable plugin I have implemented paging feature to the CRUD example demonstrated here.
Reference
jTable official website
AJAX based CRUD tables using ASP.NET MVC 3 and jTable jQuery plug-in
Wikipedia : JSON
GridView in Struts2 using jQuery DataTable via Ajax
In this post, I am going to explain on how to use DataTable plugin to display data in Gridview format with pagination feature in Struts 2 web application.
DataTable is a jQuery plugin which adds a lot of functionality to plain HTML tables, such as filtering, paging sorting, changing page length, server side processing etc.
Library
- struts2-json-plugin-x.x.x.jar
- DataTable Plugin
- OpenCSV(Optional – I am using this to deal with a csv file as data source instead of database to keep it simple)
- jQuery UI themes
In this example, I am going to retrieve values from a csv file and display it in html table. For this, I am going to use OpenCSV library which simplifies the work of parsing CSV files. Here the Data table will load the data by making an Ajax call.
Note:
• Refer the article on how to Read / Write CSV file in Java using Opencsv library/ .
Since the response to be generated from the action class is of type JSON, So to handle it you need struts2-json-plugin-2.x.x.jar. This plugin allows you to serialize the Action class attribute (which has getter and setter) into a JSON object. Refer this article here for more detail.
Now create a dynamic web project in eclipse and create two folders named ‘js’ and ‘css’ under WebContent, and add the following javascript files from DataTable to the ‘js’ folder
• jquery.dataTables.js
• jquery.js
Add the following css files from DataTable & jQuery ui to ‘css’ folder.
• demo_page.css
• demo_table_jui.css
• jquery-ui-x.x.x.css
** UPDATE: Struts 2 Complete tutorial now available here.
Download the csv file from which the data is to be read from here and place it under src folder, This files contains four columns – company, country, revenue, and year.
Project Structure
Model class
Create a model class that gets and sets the data from the four columns (company, country, revenue, and year) of the csv file.
package com.model; public class RevenueReport { public RevenueReport(String company, String country, String year, String revenue) { this.company = company; this.country = country; this.year = year; this.revenue = revenue; } private String company; private String country; private String year; private String revenue; public String getCountry() { return country; } public String getRevenue() { return revenue; } public String getCompany() { return company; } public String getYear() { return year; } public void setCountry(String country) { this.country = country; } public void setRevenue(String revenue) { this.revenue = revenue; } public void setCompany(String company) { this.company = company; } public void setYear(String year) { this.year = year; } }
Business class
Create a Business Service class that would fetch data from the csv file using model class.
package com.service; import java.io.*; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.List; import au.com.bytecode.opencsv.CSVReader; import com.model.RevenueReport; public class BusinessService { public static List<RevenueReport> getCompanyList() { List<RevenueReport> listOfCompany = new LinkedList<RevenueReport>(); String fileName = "Company_Revenue.csv"; InputStream is = Thread.currentThread().getContextClassLoader() .getResourceAsStream(fileName); BufferedReader br = new BufferedReader(new InputStreamReader(is)); try { CSVReader reader = new CSVReader(br); String[] row = null; while ((row = reader.readNext()) != null) { listOfCompany.add(new RevenueReport(row[0], row[1], row[2], row[3])); } reader.close(); } catch (IOException e) { System.err.println(e.getMessage()); } return listOfCompany; } }
Jsp
Now create the jsp file to display the data fetched from csv file in html table and enhance the table features using DataTable plugin.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Gridview in Struts2 using jQuery DataTable plugin</title> <link href="css/demo_table_jui.css" rel="stylesheet" /> <link href="css/jquery-ui.css" rel="stylesheet" /> <link href="css/demo_page.css" rel="stylesheet" /> <script src="js/jquery.js"></script> <script src="js/jquery.dataTables.js"></script> <script> $(document).ready(function() { $(".jqueryDataTable").dataTable({ "sPaginationType" : "full_numbers", "bProcessing" : false, "bServerSide" : false, "sAjaxSource" : "dataTablesAction", "bJQueryUI" : true, "aoColumns" : [ { "mData": "company" }, { "mData": "country" }, { "mData": "year" }, { "mData": "revenue" } ] } ); } ); </script> </head> <body id="dt_example"> <div id="container"> <h1>Ajax based Gridview in Struts2 using jQuery DataTable plugin</h1> <div id="demo_jui"> <table class="display jqueryDataTable"> <thead> <tr> <th>Company</th> <th>Country</th> <th>Year</th> <th>Revenue</th> </tr> </thead> <tbody> </tbody> </table> </div> </div> </body> </html>
Do read :
Action class
In reply to each request for information that DataTables makes to the server, it expects to get a well formed JSON object with the parameter below.
1. aaData- The data in a 2D array.
package com.action; import java.util.List; import com.model.RevenueReport; import com.opensymphony.xwork2.Action; import com.service.BusinessService; public class GridViewAction implements Action { private List<RevenueReport> aaData; public List<RevenueReport> getAaData() { return aaData; } public void setAaData(List<RevenueReport> aaData) { this.aaData = aaData; } public String execute() { aaData = BusinessService.getCompanyList(); return SUCCESS; } }
struts.xml
<struts> <package name="default" extends="json-default"> <action name="dataTablesAction" class="com.action.GridViewAction"> <result type="json"> <param name="excludeNullProperties">true</param> <param name="noCache">true</param> </result> </action> </package> </struts>
Note that I have extended “json-default” package instead of struts-default package and I have set the result type to json, I have explained about the reason for extending “json-default” package in the article AJAX implementation in Struts 2 using JQuery and JSON, please refer the mentioned link if you are not aware of the same.
Recommended reading:
web.xml
Make sure you have done servlet mapping properly in web.xml file as shown below
<web-app> <display-name>Struts2</display-name> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
Demo
Read MoreAjax File Upload with Progress Bar using jQuery in Java web application
In my previous article we learnt on how to implement AJAX Style file upload in a java web application. In this post we shall learn on how to create AJAX file uploading system with progress bar which shows upload progress in percentage (%) using jQuery in java web application. I have used jQuery Form plugin for this purpose. This plugin is easy to use and supports iframe file transportation.
Libraries required for the setup
Folder structure
Now Create a dynamic web project in Eclipse with following folder structure
Set up from browser perspective: jQuery
Jsp form which handles file uploads
<!DOCTYPE html> <html> <head> <title>Ajax File Upload with Progress Bar</title> <!-- Include jQuery form & jQuery script file. --> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.js" ></script> <script src="http://malsup.github.com/jquery.form.js" ></script> <script src="js/fileUploadScript.js" ></script> <!-- Include css styles here --> <link href="css/style.css" rel="stylesheet" type="text/css" /> </head> <body> <h3>Ajax File Upload with Progress Bar</h3> <form id="UploadForm" action="UploadFile" method="post" enctype="multipart/form-data"> <input type="file" size="60" id="myfile" name="myfile"> <input type="submit" value="Ajax File Upload"> <div id="progressbox"> <div id="progressbar"></div> <div id="percent">0%</div> </div> <br /> <div id="message"></div> </form> </body> </html>
The JQuery code written on the head section of the jsp page is responsible for the AJAX call made to the servlet, which in turn uploads file into server.
Js file
Shown below is the jQuery code for upload file and progress bar
$(document).ready(function() { var options = { beforeSend : function() { $("#progressbox").show(); // clear everything $("#progressbar").width('0%'); $("#message").empty(); $("#percent").html("0%"); }, uploadProgress : function(event, position, total, percentComplete) { $("#progressbar").width(percentComplete + '%'); $("#percent").html(percentComplete + '%'); // change message text to red after 50% if (percentComplete > 50) { $("#message").html("<font color='red'>File Upload is in progress</font>"); } }, success : function() { $("#progressbar").width('100%'); $("#percent").html('100%'); }, complete : function(response) { $("#message").html("<font color='blue'>Your file has been uploaded!</font>"); }, error : function() { $("#message").html("<font color='red'> ERROR: unable to upload files</font>"); } }; $("#UploadForm").ajaxForm(options); });
beforeSend : this function called before form submission
uploadProgress : this function called when the upload is in progress
success : this function is called when the form upload is successful.
complete: this function is called when the form upload is completed.
Another must read:
jQuery form validation using jQuery Validation plugin
Setup from the server’s perspective: Servlet
package com.fileupload; import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadFile extends HttpServlet { private static final long serialVersionUID = 1L; private final String UPLOAD_DIRECTORY = "C:/Files/"; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { boolean isMultipart = ServletFileUpload.isMultipartContent(request); // process only if its multipart content if (isMultipart) { // Create a factory for disk-based file items FileItemFactory factory = new DiskFileItemFactory(); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); try { // Parse the request List<FileItem> multiparts = upload.parseRequest(request); for (FileItem item : multiparts) { if (!item.isFormField()) { String name = new File(item.getName()).getName(); item.write(new File(UPLOAD_DIRECTORY + File.separator + name)); } } } catch (Exception e) { System.out.println("File upload failed"); } } } }
Demo
Read MoreTab Style Login and Signup example using jQuery in Java web application
In this post, I am going to describe on how to design tab style login and registration panel using jquery ui tabs in java web applications. Here I’m using oracle database as a back end for registering and authenticating users.
Libraries required for the setup,
Now create a dynamic web project in eclipse and create two folders under WebContent and name it as ‘js’ and ‘css’. And add the downloaded jQuery javascript and css files to it. The final project structure will be as shown below
Now create a user table in Oracle database using the query below.
CREATE TABLE users (name VARCHAR (50), email VARCHAR (50), password VARCHAR (50), gender VARCHAR (50))
Jsp page
<!DOCTYPE html> <html> <head> <title>Login and registration</title> <link rel="stylesheet" href="css/jquery-ui.css"> <link rel="stylesheet" href="css/style.css"> <script src="js/jquery-1.11.1.js"></script> <script src="js/jquery-ui.js"></script> <script> $(function() { $( "#tabs" ).tabs(); }); </script> </head> <body> <div class="wrapper"> <div class="container"> <div id="tabs"> <ul> <li><a href="#login">Login</a></li> <li><a href="#register">Sign up</a></li> </ul> <div id="login"> <% if("Invalid Email or password".equals((String)session.getAttribute("error"))){ %> <h6> Invalid Email or password. Please try again.</h6> <%} %> <form method="post" action="LoginController"> <label for="email">Email:</label> <br/> <input type="text" name="email" id="email"/> <br/> <label for="password">Password:</label> <br/> <input type="password" name="password" id="password" /> <br/> <br/> <input type="submit" value="Login"> </form> </div> <div id="register"> <form method="post" action="RegistrationController"> <label for="fullname">Name:</label><br/> <input type="text" name="fullname" id="fullname" /> <br/> <label for="email">Email:</label><br/> <input type="text" name="email" id="email" /> <br/> <label for="password">Password:</label><br/> <input type="password" name="password" id="password" /> <br/> <label for="gender">Gender:</label><br/> <select name="gender" id="gender"> <option value="Male">Male</option> <option value="Female">Female</option> </select> <br/> <br/> <input type="submit" value="Register"> </form> </div> </div> </div> </div> </body> </html>
User defined CSS
body { background-color: #e6e6e6; font-family: Helvetica; font-size: 17px; color: #666; margin: 0px; padding: 0px; } .wrapper { width: 1024px; height: 650px; margin: 0 auto; background: white; margin: 0 auto; } .container { min-height: 400px; border-top: 1px solid gray; padding: 50px; }
Recommended reading :
Controller
File: LoginController.java
LoginController doPost method gets triggered on clicking Login button and its doGet Method gets triggered on clicking logout
package com.controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.dao.UserDAO; public class LoginController extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String error; String email = request.getParameter("email"); String password = request.getParameter("password"); HttpSession session = request.getSession(); UserDAO userDAO = new UserDAO(); String userName = userDAO.verifyUser(email, password); if (userName == null) { error = "Invalid Email or password"; session.setAttribute("error", error); response.sendRedirect("index.jsp"); } else { session.setAttribute("user", userName); response.sendRedirect("welcome.jsp"); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if ("logout".equalsIgnoreCase(request.getParameter("param"))) { HttpSession session = request.getSession(); session.removeAttribute("user"); session.invalidate(); response.sendRedirect("index.jsp"); } } }
SignupController
This controller gets triggred on clicking Register button under Signup tab
package com.controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.dao.UserDAO; public class SignupController extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("fullname"); String email = request.getParameter("email"); String password = request.getParameter("password"); String gender = request.getParameter("gender"); UserDAO userDAO = new UserDAO(); int result = userDAO.createUser(name, email, password, gender); if (result == 1) { response.sendRedirect("success.jsp"); } } }
Also read :
UserDAO
Create a class that performs registration and authentication operation in database
package com.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import com.jdbc.DBUtility; public class UserDAO { private Connection dbConnection; private PreparedStatement pStmt; private String SQL_SELECT = "SELECT name FROM users WHERE email = ? AND password = ?"; private String SQL_INSERT = "INSERT INTO users (name,email,password,gender) VALUES (?,?,?,?)"; public UserDAO() { dbConnection = DBUtility.getConnection(); } public String verifyUser(String email, String password) { String userName = null; try { pStmt = dbConnection.prepareStatement(SQL_SELECT); pStmt.setString(1, email); pStmt.setString(2, password); ResultSet rs = pStmt.executeQuery(); while (rs.next()) { userName = rs.getString("name"); } } catch (Exception e) { System.err.println(e.getMessage()); } return userName; } public int createUser(String name, String email, String password, String gender) { int result = 0; try { pStmt = dbConnection.prepareStatement(SQL_INSERT); pStmt.setString(1, name); pStmt.setString(2, email); pStmt.setString(3, password); pStmt.setString(4, gender); result = pStmt.executeUpdate(); } catch (Exception e) { System.err.println(e.getMessage()); } return result; } }
DBUtility
Next let us create a utility class to handle connections to database.
package com.jdbc; import java.sql.Connection; import java.sql.DriverManager; public class DBUtility { private static Connection connection = null; public static Connection getConnection() { if (connection != null) return connection; else { // database URL String dbUrl = "jdbc:oracle:thin:@localhost:1521:XE"; try { Class.forName("oracle.jdbc.driver.OracleDriver"); // set the url, username and password for the database connection = DriverManager.getConnection(dbUrl, "system", "admin"); } catch (Exception e) { e.printStackTrace(); } return connection; } } }
In addition to above files there are 2 other jsp pages,
1. welcome.jsp page which get displayed when the user logged into the application.
2. Success.jsp page which gets displayed once user registration is successful.
I have not showcased up these files here, you may download the files to see complete example.
Note: Since this article is intended to demonstrate the usage of tabs feature in jquery, so I have not included any validation parts in it.
Demo
On running the application
On clicking Signup tab
|
Read More
Autocomplete in java web application using Jquery and JSON
This article will describe how to implement jQuery Autocomplete in java web application. jQuery Autcomplete is part of the jQuery UI library which allows converting a normal textbox into an autocompleter textbox by providing a data source for the autocompleter values.
Here when user types a character in text box ,jQuery will fire an ajax request using autocomplete plugin to the controller, this controller(Servlet) in turn call the dao class which connects to the database and returns the required data back as an array list. After getting the data we convert this list to json format and return it back to the success function of our ajax call.
Library
gson-2.2.2.jar
ojdbc14.jar
servlet-api.jar
jquery-1.10.2.js
jquery-ui.js
jquery-ui.css
Project Structure
Jsp page
Now create a jsp page with Autocompleter feature and make sure that you referred the jQuery core and jQueryUI libraries.
<!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Autocomplete in java web application using Jquery and JSON</title> <script src="//code.jquery.com/jquery-1.10.2.js"></script> <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script> <script src="autocompleter.js"></script> <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css"> <!-- User defied css --> <link rel="stylesheet" href="style.css"> </head> <body> <div class="header"> <h3>Autocomplete in java web application using Jquery and JSON</h3> </div> <br /> <br /> <div class="search-container"> <div class="ui-widget"> <input type="text" id="search" name="search" class="search" /> </div> </div> </body> </html>
Recommended reading:
Js file
File: autocompleter.js
In this file we get data from database via ajax and apply autocompleter
$(document).ready(function() { $(function() { $("#search").autocomplete({ source : function(request, response) { $.ajax({ url : "SearchController", type : "GET", data : { term : request.term }, dataType : "json", success : function(data) { response(data); } }); } }); }); });
When a user types a character in text box ,jQuery will fire an ajax request to the controller, in this case controller is SearchController as mentioned in the above js file.
Controller
Creating The Controller To Handle Ajax Calls
package com.servlet; import java.io.IOException; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.dao.DataDao; import com.google.gson.Gson; public class Controller extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json"); try { String term = request.getParameter("term"); System.out.println("Data from ajax call " + term); DataDao dataDao = new DataDao(); ArrayList<String> list = dataDao.getFrameWork(term); String searchList = new Gson().toJson(list); response.getWriter().write(searchList); } catch (Exception e) { System.err.println(e.getMessage()); } } }
This servlet will call the business class which in turn creates the necessary connection and returns the data back as an array list to the controller. After getting the data we convert it to json format and return it back to the success function of our ajax call.
Do read
Business class
Creating Methods To Get Data From Database
package com.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; public class DataDao { private Connection connection; public DataDao() throws Exception { connection = DBUtility.getConnection(); } public ArrayList<String> getFrameWork(String frameWork) { ArrayList<String> list = new ArrayList<String>(); PreparedStatement ps = null; String data; try { ps = connection.prepareStatement("SELECT * FROM JAVA_FRAMEWORK WHERE FRAMEWORK LIKE ?"); ps.setString(1, frameWork + "%"); ResultSet rs = ps.executeQuery(); while (rs.next()) { data = rs.getString("FRAMEWORK"); list.add(data); } } catch (Exception e) { System.out.println(e.getMessage()); } return list; } }
Data Access object
Connecting To Database Using JDBC
package com.dao; import java.sql.Connection; import java.sql.DriverManager; public class DBUtility { private static Connection connection = null; public static Connection getConnection() throws Exception { if (connection != null) return connection; else { // Store the database URL in a string String serverName = "127.0.0.1"; String portNumber = "1521"; String sid = "XE"; String dbUrl = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid; Class.forName("oracle.jdbc.driver.OracleDriver"); // set the url, username and password for the databse connection = DriverManager.getConnection(dbUrl, "system", "admin"); return connection; } } }
web.xml
Make sure you have done servlet mapping properly in web.xml file. An example of this is given below,
<welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>SearchController</servlet-name> <servlet-class>com.servlet.Controller</servlet-class> </servlet> <servlet-mapping> <servlet-name>SearchController</servlet-name> <url-pattern>/SearchController</url-pattern> </servlet-mapping>
Demo
AJAX implementation in Servlets using JQuery and JSON
In my previous post, I explained about making AJAX calls to a servlet from a JSP page and updating a part of the JSP page with a simple response from the Servlet . In this post I am going to add something more to it by making the servlet return complex Java Objects such as lists, maps, etc with the help of JSON in addition to JQuery and AJAX.
Here I’m going to use a JSON library in Servlet to convert this complex Java objects (lists,maps,arrays.etc) to JSON strings that will be parsed by JQuery in the JSP page and will be displayed on the web page. I am going to use google’s gson library for this purpose.
Library required
Project Structure
Steps done to set up our Servlet for JSON
From the browser perspective: jQuery
Jsp Page
<html> <head> <title>AJAX in Servlet using JQuery and JSON</title> <script src="js/jquery-1.11.1.js" type="text/javascript"></script> <script> $(document).ready(function() { $('.ajax-link').click(function() { $('.page-content').hide(); var category = $(this).attr("data-category"); // the URL for the request $.get('ajaxAction', { // Parameter to be sent to server side category : category }, function(jsonResponse) { $.each(jsonResponse, function(index, value) { $("#" + index).html(value); if (index % 2 == 0) { $("#" + index).addClass("lightblue"); } }); $('.page-content').show(); }); }); }); </script> </head> <body> <div class="main-content"> <div> <h3>Click on the links</h3> <ul> <li><a href="#" class="ajax-link" data-category="serial">Top 5 Serial</a></li> <li><a href="#" class="ajax-link" data-category="movies">Top 5 Movies</a></li> <li><a href="#" class="ajax-link" data-category="sports">Top 5 Sports</a></li> </ul> <h3>Result will be displayed below via Ajax</h3> <div class="page-content"> <div id="0"></div> <div id="1"></div> <div id="2"></div> <div id="3"></div> <div id="4"></div> </div> </div> </div> </body> </html>
jQuery allows you to fire an ajax request via get or post method and expects a JSON object as a response, as described in my previous post the first and second parameter of these method are the url and a key-value pair and the third argument of get method is a function that defines what is to be done with the response that is got back from the Servlet.
Code Explanation
In the above code jquery will fire an ajax request when user clicks on a link, for this we have binded the jQuery’s click event with each link using the class supplied on the links; Then we need to extract the category
from link using jQuery’s attribute selector, and then we had binded the ajax request to ajaxAction
url and passed the category as parameter and the server in turn return the required response.
Another must read:
- jQuery Tutorial for Beginners
- Refresh DIV Content Without Reloading Page using jQuery
- Autocomplete in Java web application
From the server’s perspective: Servlet
In Servlet, I’m going to use a GSON library to convert Java objects (lists, maps etc) to JSON strings that will be parsed by JQuery in the JSP page and will be displayed on the web page and note that I have returned the response back to jsp based on the value of category
parameter which i pass to the servlet via jQuery’s get() method.
Servlet
package com.action; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.gson.Gson; public class JsonServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String category = request.getParameter("category"); List<String> result = new ArrayList<String>(); if (category.equalsIgnoreCase("serial")) { result.add("Game Of Throme"); result.add("Prison Break"); result.add("Breaking Bad"); result.add("Sherlok Home"); result.add("Suits"); } else if (category.equalsIgnoreCase("movies")) { result.add("Inception"); result.add("War Horse"); result.add("Avatar"); result.add("Titanic"); result.add("Life is Beautiful"); } else if (category.equalsIgnoreCase("sports")) { result.add("Basket Ball"); result.add("Football"); result.add("Tennis"); result.add("Rugby"); result.add("Cricket"); } String json = new Gson().toJson(result); response.setContentType("application/json"); response.getWriter().write(json); } }
Web.xml
Servlet mapping should be done in web.xml as shown below
<web-app ..> <servlet> <servlet-name>AjaxAction</servlet-name> <servlet-class>com.action.JsonServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AjaxAction</servlet-name> <url-pattern>/ajaxAction</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
Demo
On clicking ‘Top 5 Serial’ the following response appears
On clicking ‘Top 5 Movies’ the following response appears
Other Ajax tutorial from our Blog
- Ajax Cascading DropDownList in JSP & Servlet using JQuery and JSON
- AngularJS Interacting with Java Servlet using JSON
- Autocomplete in java web application using Jquery and JSON
Reference
Read More