您的位置:首页 > 移动开发

web application by java based on jsp, servlet and hibernate

2015-11-11 18:44 633 查看



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>
<t
d89f
h>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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: