Project Description:
This Web Application is developed to save user data to a database Fields. In this project, JSP is the interface, Hibernate and PostgreSQL are the data base, and Servlet is the controller.
Tools:
- Java
- Hibernate
- PostgreSQL
- Tomcat
Project Structure:
Step 1: Create Dynamic Web Project
Step 2 : Add Jar files for PostgreSQL and Hibernate:
Step 3 : Create hibernate.cfg.xml file in src directory:
The file hibernate.cfg.xml
is used to configure the data base for the project.
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">org.postgresql.Driver</property>
<property name="hibernate.connection.password">password</property>
<property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/userdata</property>
<property name="hibernate.connection.username">postgres</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="current_session_context_class">thread</property>
<mapping class="org.webapp.data.UserDetails"/>
</session-factory>
</hibernate-configuration>Step 4 : Create web.xml file for JSP and Servlet configuration in WEB-INF
web.xml :
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" metadata-complete="true" version="3.1">
<servlet>
<description>User Data Input</description>
<display-name>User Data Input</display-name>
<servlet-name>UserServlet</servlet-name>
<servlet-class>org.webapp.servlets.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/UserServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>userInput.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>MoreUserServlet</servlet-name>
<servlet-class>org.webapp.servlets.MoreUserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MoreUserServlet</servlet-name>
<url-pattern>/MoreUserServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>UserDataServlet</servlet-name>
<servlet-class>org.webapp.servlets.UserDataServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserDataServlet</servlet-name>
<url-pattern>/UserDataServlet</url-pattern>
</servlet-mapping>
</web-app>Step 6 : Create the jsp and css files in WebContent
style.css :
@CHARSET "ISO-8859-1";
#container .small{
color:#666666;
display:block;
font-size:11px;
font-weight:normal;
text-align:right;
width:140px;
}
#container input{
float:left;
font-size:12px;
padding:4px 2px;
border:solid 1px burlywood;
width:200px;
margin:2px 0 20px 10px;
border-radius: 5px;
}
#container button{
clear:both;
margin-left:150px;
width:125px;
height:31px;
background:#666666;
text-align:center;
line-height:31px;
color:#FFFFFF;
font-size:11px;
font-weight:bold;
border-radius: 5px;
}
table, tr, td{
border-radius: 5px;
border:solid 1px;
padding: 5px;
width: max-content;
}userInput.jsp :
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>User Data Input Form</title>
<style type="text/css">
h3{font-family: Calibri; font-size: 22pt; font-style: normal; font-weight: bold; color:#0099cc;
text-align: center; text-decoration: underline }
table{font-family: Calibri; color:white; font-size: 11pt; font-style: normal;width: 50%;
text-align:; background-color: #0099cc; border-collapse: collapse; border: 2px solid navy}
table.inner{border: 0px}
</style>
</head>
<body>
<h3> User Data Input Form</h3>
<form method="post" action="UserServlet">
<table align="center" cellpadding="10">
<tr>
<td>*User Name :</td>
<td><input type="text" name="username" maxlength="30"></td>
<td>user name cannot be empty</td>
</tr>
<tr>
<td>Age :</td>
<td><input type="text" name="age" maxlength="3"></td>
</tr>
<tr>
<td>Sex :</td>
<td>
<select name="sex">
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
</td>
</tr>
<tr>
<td>Active :</td>
<td>
<select name="active">
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
</td>
</tr>
<tr>
<td>Tags :</td>
<td><input type="text" name="tags" maxlength="100"></td>
</tr>
<tr>
<td colspan="2" align="center">
<button type="submit">Submit</button>
<button type="reset">Reset</button>
</td>
</tr>
</table>
</form>
</body>
</html>confirm.jsp :
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>User Data Input Confirmation</title>
<style type="text/css">
h3{font-family: Calibri; font-size: 22pt; font-style: normal; font-weight: bold; color:#0099cc;
text-align: center; text-decoration: underline }
table{font-family: Calibri; color:white; font-size: 11pt; font-style: normal;width: 20%;
text-align:; background-color: #0099cc; border-collapse: collapse; border: 2px solid navy}
table.inner{border: 0px}
</style>
</head>
<body>
<H3>User Add Success</H3>
<form method="post" action="MoreUserServlet">
<table align="center" cellpadding="10">
<tr><td colspan="2" align="center">
<button type="submit">More User Data</button>
</td></tr>
</table>
</form>
<BR/>
<form method="post" action="UserDataServlet">
<table align="center" cellpadding="10">
<tr><td colspan="2" align="center">
<button type="submit">Display User Data</button>
</td></tr>
</table>
</form>
</body>
</html>
dataCheck.jsp :
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@page import="java.util.List"%>
<%@page import="org.webapp.service.UserDetailsService"%>
<%@page import="org.webapp.data.UserDetails"%>
<%@page import="org.webapp.data.Gender"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="css/style.css"/>
<title>User Details Data</title>
</head>
<body>
<div id="container">
<table align="center">
<thead>
<tr>
<th>User ID</th>
<th>User Name</th>
<th>Age</th>
<th>Sex</th>
<th>Active</th>
<th>Tags</th>
</tr>
</thead>
<tbody>
<%
List<UserDetails> users = UserDetailsService.getListOfUsers();
for (UserDetails u : users) {
%>
<tr>
<td><%=u.getUserId()%></td>
<td><%=u.getUsername()%></td>
<td><%=u.getAge()%></td>
<td><%=u.getSex()%></td>
<td><%=u.isActive()%></td>
<td><%=u.getTags()%></td>
</tr>
<%}%>
</tbody>
</table>
<br/>
</div>
</body>
</html>
Step 7 : Create Data Object files
UserDetails.java :
package org.webapp.data;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class UserDetails {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int userId;
private String username;
private Gender sex;
private int age;
private boolean active;
private String tags;
public UserDetails(String username, Gender sex, int age, boolean active, String tags) {
super();
this.username = username;
this.sex = sex;
this.age = age;
this.active = active;
this.tags = tags;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Gender getSex() {
return sex;
}
public void setSex(Gender sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public String getTags() {
return tags;
}
public void setTags(String tags) {
this.tags = tags;
}
}
Gender.java :
<span style="color:#000000;">package org.webapp.data;
public enum Gender {
male,
female;
}
</span>Step 8 : Create service class for Hibernate :
HibernateUtil.java :
package org.webapp.service;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from standard (hibernate.cfg.xml)
// config file.
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Log the exception
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
UseDetailsService.java :
package org.webapp.service;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.webapp.data.Gender;
import org.webapp.data.UserDetails;
public class UserDetailsService {
// initialize an user and add into database
public static void createUserDetails(String username, Gender sex, int age, boolean active, String tags ) {
UserDetails user = new UserDetails(username, sex, age, active, tags);
Transaction trns = null;
Session session = HibernateUtil.getSessionFactory().openSession();
try {
trns = session.beginTransaction();
session.save(user);
session.getTransaction().commit();
} catch (RuntimeException ex) {
if (trns != null) {
trns.rollback();
}
ex.printStackTrace();
} finally {
session.flush();
session.close();
}
}
// add user into database
public static void createUserDetails(UserDetails user) {
Transaction trns = null;
Session session = HibernateUtil.getSessionFactory().openSession();
try {
trns = session.beginTransaction();
session.save(user);
session.getTransaction().commit();
} catch (RuntimeException ex) {
if (trns != null) {
trns.rollback();
}
ex.printStackTrace();
} finally {
session.flush();
session.close();
}
}
// return the list of user from database
public static List<UserDetails> getListOfUsers() {
List<UserDetails> users = new ArrayList<>();
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction trns = null;
try {
trns = session.beginTransaction();
Query query = session.createQuery("from UserDetails");
users = (List<UserDetails>) query.list();
trns.commit();
} catch (Exception ex) {
if(trns != null) {
trns.rollback();
}
ex.printStackTrace();
} finally {
session.close();
}
return users;
}
// return the user with specified userId
public static UserDetails getUserbyUserId(int userId) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction trns = null;
UserDetails user = null;
try {
trns = session.beginTransaction();
Query query = session.createQuery("from UserDetails where userId = '"+userId+"' ");
user = (UserDetails) query.uniqueResult();
trns.commit();
} catch (Exception ex) {
if(trns != null) {
trns.rollback();
}
ex.printStackTrace();
} finally {
session.close();
}
return user;
}
}
Step 9 : Create Servlet Class :
UserServlet.java
package org.webapp.servlets;
import java.io.IOException;
import javax.persistence.Entity;
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.RequestDispatcher;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.webapp.data.Gender;
import org.webapp.data.UserDetails;
import org.webapp.service.UserDetailsService;
/**
* Servlet implementation class UserServlet
*/
@Entity
@WebServlet("UserServlet")
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public UserServlet() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username").trim();
String sexString = request.getParameter("sex");
String ageString = request.getParameter("age").trim();
String activeString = request.getParameter("active");
String tags = request.getParameter("tags").trim();
if (username.equals("")) {
RequestDispatcher rdp = request.getRequestDispatcher("/userInput.jsp");
rdp.forward(request, response);
} else {
Gender sex;
int age;
boolean active;
if(sexString.equals("Male")) {
sex = Gender.male;
} else {
sex = Gender.female;
}
try {
age = Integer.parseInt(ageString);
} catch (NumberFormatException ex) {
age = 0;
}
if (activeString.equals("Yes")) {
active = true;
} else {
active = false;
}
// add user into data base
UserDetailsService.createUserDetails(username, sex, age, active, tags);
RequestDispatcher rdp = request.getRequestDispatcher("/confirm.jsp");
rdp.forward(request, response);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
MoreUserServlet.java :
package org.webapp.servlets;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.webapp.service.UserDetailsService;
/**
* Servlet implementation class MoreUserServlet
*/
@WebServlet("/MoreUserServlet")
public class MoreUserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MoreUserServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
RequestDispatcher rdp = request.getRequestDispatcher("/userInput.jsp");
rdp.forward(request, response); }
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
UserDataServlet.java :
package org.webapp.servlets;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class UserDataServlet
*/
@WebServlet("/UserDataServlet")
public class UserDataServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UserDataServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
RequestDispatcher rdp = request.getRequestDispatcher("/dataCheck.jsp");
rdp.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Run the Web Application:
right click on the project, Run as -> Run on Server (select Tomcat) -> Finish
User Data Input Page :
Confirm Page :
User Data Display Page :
Junit Test:
An Junit test case from checking the user data input can be stored in database.
UserDataJunit.java :
package org.webapp.test;
import org.webapp.data.UserDetails;
import org.webapp.service.UserDetailsService;
public class UserDataJunit {
public UserDetails addUser(UserDetails user) {
UserDetailsService.createUserDetails(user);
int userId = user.getUserId();
return UserDetailsService.getUserbyUserId(userId);
}
}UserJunitTest.java :
package org.webapp.test;
import static org.junit.Assert.*;
import org.junit.Test;
import org.webapp.data.UserDetails;
public class UserJunitTest {
@Test
public void userAdded() {
UserDataJunit test = new UserDataJunit();
UserDetails user = new UserDetails();
user.setUsername("test");
UserDetails userAdd = test.addUser(user);
assertEquals(user.getUserId(), userAdd.getUserId());
assertEquals(user.getUsername(), userAdd.getUsername());
}
}
Conclusion:
The Application is the basic Demo for Java Web App develop by integrating JSP, Servlet and Hibernate. The function is to put user information into data base.
Further improvements are:
improve web page interface (Done)
add function to display the information in data base (Done)
- use Spark framework to achieve the same function
本文介绍了一个使用JSP、Servlet及Hibernate技术搭建的Java Web应用程序。该应用实现了用户数据的输入、保存及展示功能,并详细说明了从项目创建到运行的全过程。


被折叠的 条评论
为什么被折叠?



