web application by java based on jsp, servlet and hibernate

来源:互联网 发布:学霸养成软件 编辑:程序博客网 时间:2024/05/01 04:23


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;@Entitypublic 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 exceptionSystem.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 databasepublic 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 databasepublic 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 databasepublic 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 userIdpublic 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 baseUserDetailsService.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 stubdoGet(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 stubRequestDispatcher 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 stubdoGet(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 stubRequestDispatcher 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 stubdoGet(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 {@Testpublic 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
    1 0
    原创粉丝点击