By GokiSoft.com|
11:42 05/12/2020|
JSP Servlet
[Share Code] Chia sẻ code tìm hiểu JDBC - Kết nối CSDL - Lập trình JSP/Servlet
Nội dung:
- Kết nối CSDL
=============================================
Bài tập: Thiết kế website => 3 page (login + register + home)
- home => Hiển thị danh sách users đã đăng ký
- Phân tích database
- XAMPP (mysql)
- J2010G: đặt tên database
- Phân tích tables
- users
- id: int primary key
- fullname: varchar(50)
- email: varchar(150)
- birthday: date
- password: varchar(100)
- address: varchar(200)
- created_at: datetime
- updated_at: datetime
- thiết kế
create table users (
id int primary key auto_increment,
fullname varchar(50) not null,
email varchar(150),
birthday date,
password varchar(100),
address varchar(200),
created_at datetime,
updated_at datetime
)
alter table users
add constraint unique_email unique (email)
- Project
- create a project
- register page
- route: /register
- jsp: /lesson2/register.jsp
- servlet: servlet.RegisterServlet
- login page
- route: /login
- jsp: /lesson2/login.jsp
- servlet: lesson2.LoginServlet
- welcome page:
- route: /welcome
- jsp: /lesson2/welcome.jsp
- servlet: lesson2.WelcomeServlet
- Tải thư viên mysql jdbc driver (maven) - add vào project
- Kết nối CSDL & project
- ORM (Mỗi một bảng trong database -> tạo ra 1 class object trong project) - (insert/update/delete - lấy danh sách dữ liễu) -> có sẵn.
- Persistence
- Gen Entity + sua config (Persistence)
- Viet chuc nang CSDL
- Insert Users vao trong bang Users
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="Example01PU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>entity.Users</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/j2010g?serverTimezone=UTC"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.password" value=""/>
</properties>
</persistence-unit>
</persistence>
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package utils;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
*
* @author teacher
*/
public class MD5Utils {
private static final Charset UTF_8 = StandardCharsets.UTF_8;
private static final String OUTPUT_FORMAT = "%-20s:%s";
private static byte[] digest(byte[] input) {
MessageDigest md;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
throw new IllegalArgumentException(e);
}
byte[] result = md.digest(input);
return result;
}
private static String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
public static String md5(String str) {
byte[] data = str.getBytes();
byte[] d = digest(data);
return bytesToHex(d);
}
}
<%--
Document : login
Created on : Nov 28, 2020, 8:31:08 AM
Author : teacher
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Login Page</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"/>
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<!-- Popper JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="panel panel-primary">
<div class="panel-heading">
<h2 class="text-center">Login Page</h2>
</div>
<div class="panel-body">
<form method="post">
<div class="form-group">
<label for="email">Email:</label>
<input required="true" type="email" name="email" class="form-control" id="email">
</div>
<div class="form-group">
<label for="pwd">Password:</label>
<input required="true" type="password" name="password" class="form-control" id="pwd">
</div>
<button class="btn btn-success">Register</button>
</form>
</div>
</div>
</div>
</body>
</html>
<%--
Document : test
Created on : Nov 14, 2020, 8:35:57 AM
Author : teacher
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>JSP/Servlet Tutorial - Form Register</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"/>
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<!-- Popper JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<!-- Code java trong JSP -->
<%
//code java o day
String name = "";
if(request.getParameter("name") != null) {
name = request.getParameter("name");
}
String email = request.getParameter("email");
if(email == null) {
email = "";
}
String birthday = request.getParameter("birthday");
if(birthday == null) {
birthday = "";
}
String address = request.getParameter("address");
if(address == null) {
address = "";
}
String msg = "";
String pwdMsg = "";
if(!name.isEmpty()) {
msg = "Dang ky tai khoan error!!!";
pwdMsg = "Mat khau khong khop!!!";
}
// out.print(name);
%>
<div class="container">
<div class="panel panel-primary">
<div class="panel-heading">
<h2 class="text-center">Registation Form - Input User's Detail Information</h2>
<h3 style="color: red"><%=msg%></h3>
</div>
<div class="panel-body">
<form method="post">
<div class="form-group">
<label for="usr">Name:</label>
<input required="true" type="text" class="form-control" id="usr" name="name" value="<%=name%>"/>
</div>
<div class="form-group">
<label for="email">Email:</label>
<input required="true" type="email" class="form-control" id="email" name="email" value="<%=email%>"/>
</div>
<div class="form-group">
<label for="birthday">Birthday:</label>
<input type="date" class="form-control" id="birthday" name="birthday" value="<%=birthday%>"/>
</div>
<div class="form-group">
<label for="pwd">Password: <label style="color: red"><%=pwdMsg%></label></label>
<input required="true" type="password" class="form-control" id="pwd" name="password"/>
</div>
<div class="form-group">
<label for="confirmation_pwd">Confirmation Password:</label>
<input required="true" type="password" class="form-control" id="confirmation_pwd" name="confirm_pwd"/>
</div>
<div class="form-group">
<label for="address">Address:</label>
<input type="text" class="form-control" id="address" name="address" value="<%=address%>"/>
</div>
<button class="btn btn-success" type="submit">Register</button>
</form>
</div>
</div>
</div>
</body>
</html>
<%--
Document : welcome
Created on : Nov 28, 2020, 8:31:23 AM
Author : teacher
--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Login Page</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"/>
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<!-- Popper JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="panel panel-primary">
<div class="panel-heading">
<h2 class="text-center">User List Page
<form method="post">
<button type="submit" class="btn btn-deault">Logout</button>
</form>
</h2>
</div>
<div class="panel-body">
<table class="table table-bordered table-hover">
<thead>
<tr>
<th>STT</th>
<th>Ho & Ten</th>
<th>Email</th>
<th>Ngay Sinh</th>
<th>Dia Chi</th>
</tr>
</thead>
<tbody>
<!-- Su dung JSTL -->
<c:forEach items="${userList}" var="item" varStatus="loop">
<tr>
<td>${loop.index + 1}</td>
<td>${item.fullname}</td>
<td>${item.email}</td>
<td>${item.birthday}</td>
<td>${item.address}</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>
#LoginServlet.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package lesson2;
import entity.Users;
import java.io.IOException;
import java.util.List;
import javax.jms.Session;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import utils.MD5Utils;
/**
*
* @author teacher
*/
public class LoginServlet extends HttpServlet {
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Check login su dung cookie
// Cookie[] cookieList = request.getCookies();
// String status = "";
//
// for (Cookie cookie : cookieList) {
// if(cookie.getName().equals("status")) {
// status = cookie.getValue();
// break;
// }
// }
//
// if(status.equals("login")) {
// response.sendRedirect("welcome");
// return;
// }
//CHeck login su dung session
HttpSession session = request.getSession();
if(session.getAttribute("status") != null) {
String status = session.getAttribute("status").toString();
if(status != null && status.equals("login")) {
response.sendRedirect("welcome");
return;
}
}
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/lesson2/login.jsp");
dispatcher.forward(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String email = request.getParameter("email");
String password = request.getParameter("password");
password = MD5Utils.md5(password);
//check login trong database
//B1. Tao connection toi database
EntityManagerFactory factory = Persistence.createEntityManagerFactory("Example01PU");
EntityManager em = factory.createEntityManager();
//B2. Tao truy van toi database
Query q = em.createNamedQuery("Users.login", Users.class);
q.setParameter("email", email);
q.setParameter("password", password);
List<Users> list = q.getResultList();
if(list != null && list.size() > 0) {
//tai khaon tren da ton tai => login success
response.sendRedirect("list");
} else {
response.sendRedirect("login");
}
// if(email.equalsIgnoreCase("admin@aptechlearning.edu.vn") && password.equals("123")) {
// //login success
// //luu thong tin da dang
// //Su dung Cookie => Quan ly luu tru du lieu
//// Cookie cookie = new Cookie("status", "login");
//// response.addCookie(cookie);
// //Su dung Session => Quan ly luu tru du lieu
// HttpSession session = request.getSession();
// session.setAttribute("status", "login");
//
// response.sendRedirect("welcome");
// } else {
// //login fail
// response.sendRedirect("login");
// }
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
#Student.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package lesson2;
import java.io.Serializable;
/**
*
* @author teacher
*/
public class Student implements Serializable{
String fullname, email, address;
public Student() {
}
public Student(String fullname, String email, String address) {
this.fullname = fullname;
this.email = email;
this.address = address;
}
public String getFullname() {
return fullname;
}
public void setFullname(String fullname) {
this.fullname = fullname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
#WelcomeServlet.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package lesson2;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
*
* @author teacher
*/
public class WelcomeServlet extends HttpServlet {
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Check login su dung cookie
// Cookie[] cookieList = request.getCookies();
// String status = "";
//
// for (Cookie cookie : cookieList) {
// if(cookie.getName().equals("status")) {
// status = cookie.getValue();
// break;
// }
// }
//
// if(!status.equals("login")) {
// response.sendRedirect("login");
// return;
// }
//CHeck login su dung session
// HttpSession session = request.getSession();
// if(session.getAttribute("status") == null) {
// response.sendRedirect("login");
// return;
// }
// String status = session.getAttribute("status").toString();
// if(status == null || !status.equals("login")) {
// response.sendRedirect("login");
// return;
// }
List<Student> studentList = new ArrayList<>();
//fake du lieu
studentList.add(new Student("TRAN VAN A", "a@gmail.com", "Ha Noi"));
studentList.add(new Student("TRAN VAN B", "b@gmail.com", "Ha Noi"));
studentList.add(new Student("TRAN VAN C", "c@gmail.com", "Nam Dinh"));
studentList.add(new Student("TRAN VAN D", "d@gmail.com", "Ninh Binh"));
studentList.add(new Student("TRAN VAN E", "e@gmail.com", "Hai Duong"));
request.setAttribute("studentList", studentList);
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/lesson2/welcome.jsp");
dispatcher.forward(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
session.removeAttribute("status");
response.sendRedirect("login");
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
#RegisterServlet.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package servlet;
import entity.Users;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import utils.MD5Utils;
/**
*
* @author teacher
*/
public class RegisterServlet extends HttpServlet {
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/lesson2/register.jsp");
dispatcher.forward(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name");
String email = request.getParameter("email");
String birthday = request.getParameter("birthday");
String password = request.getParameter("password");
String confirmPwd = request.getParameter("confirm_pwd");
String address = request.getParameter("address");
//check qua cac thong du lieu
//day vao CSDL nhu the nao.
System.out.println("address: " + address);
if(email.isEmpty() || !password.equals(confirmPwd)) {
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/lesson2/register.jsp");
dispatcher.forward(request, response);
return;
}
//POST
//Save du lieu vao database
//B1. Tao ket noi toi CSDL
EntityManagerFactory factory = Persistence.createEntityManagerFactory("Example01PU");
EntityManager em = factory.createEntityManager();
//Query - khi thuc hien insert, update, delete: thay doi du lieu trong database
//B2. Mo 1 transaction
em.getTransaction().begin();
//B3. Thuc hien insert, update, delete
Users users = new Users();
users.setAddress(address);
//convert String to date
Date bithdayDate;
try {
bithdayDate = new SimpleDateFormat("yyyy-MM-dd").parse(birthday);//birthday => 2020-12-05
users.setBirthday(bithdayDate);
} catch (ParseException ex) {
Logger.getLogger(RegisterServlet.class.getName()).log(Level.SEVERE, null, ex);
}
users.setEmail(email);
users.setFullname(name);
users.setUpdatedAt(new Date());
users.setCreatedAt(new Date());
//Ma hoa password
password = MD5Utils.md5(password);
users.setPassword(password);
//insert
em.persist(users);
//B4. Dong transaction
em.getTransaction().commit();
/**
String msg = "Dang ky tai khoan thanh cong!!!";
request.setAttribute("message", msg);
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/welcome.jsp");
dispatcher.forward(request, response);
**/
response.sendRedirect("register");
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
#UserListServlet.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package servlet;
import entity.Users;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author teacher
*/
public class UserListServlet extends HttpServlet {
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//check login trong database
//B1. Tao connection toi database
EntityManagerFactory factory = Persistence.createEntityManagerFactory("Example01PU");
EntityManager em = factory.createEntityManager();
//B2. Tao truy van toi database
Query q = em.createNamedQuery("Users.findAll", Users.class);
List<Users> list = q.getResultList();
request.setAttribute("userList", list);
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/lesson2/userlist.jsp");
dispatcher.forward(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
#MD5Utils.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package utils;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
*
* @author teacher
*/
public class MD5Utils {
private static final Charset UTF_8 = StandardCharsets.UTF_8;
private static final String OUTPUT_FORMAT = "%-20s:%s";
private static byte[] digest(byte[] input) {
MessageDigest md;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
throw new IllegalArgumentException(e);
}
byte[] result = md.digest(input);
return result;
}
private static String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
public static String md5(String str) {
byte[] data = str.getBytes();
byte[] d = digest(data);
return bytesToHex(d);
}
}
Tags:
Phản hồi từ học viên
5
(Dựa trên đánh giá ngày hôm nay)