web application by java based on jsp, servlet and hibernate

本文介绍了一个使用JSP、Servlet及Hibernate技术搭建的Java Web应用程序。该应用实现了用户数据的输入、保存及展示功能,并详细说明了从项目创建到运行的全过程。


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
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值