Hibernate - SPLessons

Chapter 34

Hibernate Web Application

Hibernate Web Application

Hibernate Web Application, Developing an application using hibernate is a very simple task if developer has knowledge in flow of code why because every hibernate application will have two minimum files they are configuration file and hibernate mapping file, remaining files are regarding required java files, as earlier discussed the main advantage of hibernate is tables will be created automatically after the execution of a program. Following is a login form application where used JSP files and Servlet files.

Web Application

Following are the required files to execute the Hibernate Web Application.

User.java

package com.jwt.hibernate.bean;

public class User {
	private int id;
	private String userName;
	private String password1;
	private String email;
	private String phone;
	private String city;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword1() {
		return password1;
	}

	public void setPassword1(String password1) {
		this.password1 = password1;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

}

Set and Get methods are a pattern of data encapsulation. Instead of accessing class member variables directly, one can define get methods to access these variables, and set methods to modify them. By encapsulating them in this manner, one can have control over the public interface.
user.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="com.jwt.hibernate.bean.User" table="USER">
		<id name="id">  
     <generator class="assigned"></generator>  
    </id>  
		<property column="USER_NAME" name="userName" type="java.lang.String" />
		<property column="PASSWORD" name="password1" type="string" />
		<property column="EMAIL" name="email" type="java.lang.String" />
		<property column="PHONE" name="phone" type="java.lang.String" />
		<property column="CITY" name="city" type="java.lang.String" />
	</class>
</hibernate-mapping>

The generator class subelement of id utilized to produce the unique identifier for the objects of persistence class. There are numerous generator classes characterized in the Hibernate Framework. All the generator classes actualizes the org.hibernate.id.IdentifierGenerator interface.
Success.java

package com.jwt.hibernate.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Success extends HttpServlet {

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		PrintWriter writer = response.getWriter();

		writer.println("<html>" + "<body bgcolor='red'>" + "<center>"
				+ "SPlesson Authors Log In Form" + "</center>" + "<center>"
				+ "Details Added Successfully" + "</center>" +"</body>"
				+ "</html>");
	}

}

In doGet(), the parameters are appended to the URL and sent along with the header information. doPost() shall be used when comparatively large amount of sensitive data has to be sent. Examples are sending data after filling up a form or sending login id and password.
UserControllerServlet.java

package com.jwt.hibernate.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.jwt.hibernate.dao.UserDAO;

public class UserControllerServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		String userName = request.getParameter("userName");
		String password = request.getParameter("password1");
		String email = request.getParameter("email");
		String phone = request.getParameter("phone");
		String city = request.getParameter("city");

		HttpSession session = request.getSession(true);
		try {
			UserDAO userDAO = new UserDAO();
			userDAO.addUserDetails(userName, password, email, phone, city);
			response.sendRedirect("Success");
		} catch (Exception e) {

			e.printStackTrace();
		}

	}
}

doPost() shall be used when comparatively large amount of sensitive data has to be sent. Examples are sending data after filling up a form or sending login id and password. request.getParameter() method in the servlet class, to retrieve the input values from HTML page. The sendRedirect() method works at client side, It always sends a new request, It can be used within and outside the server.
UserDAO.java

package com.jwt.hibernate.dao;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.jwt.hibernate.bean.User;

public class UserDAO {

	public void addUserDetails(String userName, String password, String email,
			String phone, String city) {
		try {
			// 1. configuring hibernate
			Configuration configuration = new Configuration().configure();

			// 2. create sessionfactory
			SessionFactory sessionFactory = configuration.buildSessionFactory();

			// 3. Get Session object
			Session session = sessionFactory.openSession();

			// 4. Starting Transaction
			Transaction transaction = session.beginTransaction();
			User user = new User();
			user.setUserName(userName);
			user.setPassword1(password);
			user.setEmail(email);
			user.setCity(city);
			user.setPhone(phone);
			session.save(user);
			transaction.commit();
			System.out.println("\n\n <b>SPlessons Authors Log In Form</b> \n");
			System.out.println("\n\n Details Added Successfully, Thank You \n");

		} catch (HibernateException e) {
			System.out.println(e.getMessage());
			System.out.println("Please Check the Details.");
		}
	}
}

hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test_db</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>
		<property name="hbm2ddl.auto">create </property>
		<mapping resource="com/jwt/hibernate/bean/user.hbm.xml" />
	</session-factory>
</hibernate-configuration>
Properties Description
hibernate.connection.driver_class The JDBC driver class.
hibernate.dialect This property makes Hibernate generate the suitable SQL for the picked database.
hibernate.connection.url The JDBC URL to the database instance.
hibernate.connection.username The database username.
hibernate.connection.password The database password.
hibernate.connection.pool_size Limits the number of connections waiting in the Hibernate database connection pool.
hibernate.connection.autocommit Allows autocommit mode to be used for the JDBC connection.

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
	<display-name>HibernateWebApp</display-name>
	<servlet>
		<display-name>User</display-name>
		<servlet-name>User</servlet-name>
		<servlet-class>com.jwt.hibernate.controller.UserControllerServlet</servlet-class>
	</servlet>
	<servlet>
		<display-name>Success</display-name>
		<servlet-name>Success</servlet-name>
		<servlet-class>com.jwt.hibernate.controller.Success</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>User</servlet-name>
		<url-pattern>/register</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>Success</servlet-name>
		<url-pattern>/Success</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>register.jsp</welcome-file>
	</welcome-file-list>
</web-app>

register.jsp

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Registration Form</title>
</head>
<body>

<h1>Registration Form</h1>
<form action="register" method="post">
<table cellpadding="3pt">
<tr>
<td>User Name :</td>
<td><input type="text" name="userName" size="30" /></td>
</tr>
<tr>
<td>Password :</td>
<td><input type="password" name="password1" size="30" /></td>
</tr>
<tr>
<td>Confirm Password :</td>
<td><input type="password" name="password2" size="30" /></td>
</tr>
<tr>
<td>email :</td>
<td><input type="text" name="email" size="30" /></td>
</tr>
<tr>
<td>Phone :</td>
<td><input type="text" name="phone" size="30" /></td>
</tr>
<tr>
<td>City :</td>
<td><input type="text" name="city" size="30" /></td>
</tr>
</table>
<input type="submit" value="Register" />
</form>
</body>
</html>

Output:
After compiling the code in the server following login will be generated where user details needs to be entered.

When above data is valid following page will be displayed.
Following message will be printed in console of the server.
Following data will be stored in the database table.

Summary

  • Hibernate Web Application – JSP file will be generated here first.
  • Hibernate Web Application – Required jar files should be added to the application such as jsp, servlet, hibernate, MySQL connector.
  • Application should be compile from the JSP page.