By GokiSoft.com|
19:41 30/09/2020|
Java Web + WebService
[Share Code] Hướng dẫn chữa bài tập quản lý sinh viên - Web Service
Phát triện dự án Web Service
1) WebService
- API
2) Web Application
Bài tập:
Xem bài mẫu tương tự trong link sau
- Quản ly sinh viên
- API : - Thêm/Sửa/Xoá sinh viên
- Lấy thông tin danh sách sinh viên
- Thông tin sinh viên gồm:
- rollnumber, name, email, age
===============================================
Các bước phát triển
===============================================
1) Web Service
- Tạo project
- Tạo database
create table students (
rollnumber varchar(12) primary key,
name varchar(50) not null,
email varchar(150),
age int
)
- Start XAMPP
- Tao database & table
- Tao 2 ban ghi mau
- Tai thu vien jdbc mysql driver => add project (Chung ta tai san => copy sang project hien tai)
- Add vao project
- Generate Entity tu database => Chon jdbc mysql driver tu folder cua project
- Dat package de luu class entity
- Kiem persistence => cai dat theo Local_resource
- sua lai file config nay
- Len gokisoft => tai ban mau ve
- Tao WebService (API) => lay danh sach sinh vien, them, sua, xoa
- Hoan thanh phan tao API (WebService)
- Run project & gen WSDL => OK => DONE
- Gen Wrapper => chay duoc phia Client App
-> Hoan thanh du an phia WebService
2) Tao project -> Client App (Web Client)
- JSP/Servlet
- Client API => mapping vs WebService
- Nhung WebService - WSDL - vao project client app
- Tao Client API => dat ten => StudentAPI
- Nhung tat ca API tu WebService (StudentWS) => vao => StudentAPI
- Hoan thanh tao API phia Client App
=> Quay lai xu ly phan JSP => Xu ly trang list.jsp
- Tao 1 page => Hien thi danh sach sinh vien
- Servlet: StudentServlet
- Route: /list
- JSP page: list.jsp => Su dung bootstrap => tao giao dien cho dep
=> Xu ly chuc nang delete
- Tao 1 page => Them sinh vien
- Servlet: AddStudentServlet
- Route: /save
- JSP page: save.jsp
- Phat trien chuc edit => su dung form => add
- SUA 1 CHUT CHO HOP LOGIC => EDIT => DISABLE SỬA ROLLNUMBER => LÀM THÊM => CHI CẦN 1 HÀM CHECK ĐIỀU KIỆN LÀ XONG.
XONG PHÁT TRIỂN CHƯƠNG TRINH.
Web Service
#StudentWS.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 ws;
import entities.Students;
import java.util.List;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
/**
*
* @author Admin
*/
@WebService(serviceName = "StudentWS")
public class StudentWS {
/**
* API: Lay danh sach sinh vien => lay tat ca sinh vien trong CSDL ra.
* @return
*/
@WebMethod
public List<Students> getStudentList() {
//Tao connection to database
EntityManagerFactory factory = Persistence.createEntityManagerFactory("StudentWSPU");
EntityManager em = factory.createEntityManager();
Query q = em.createNamedQuery("Students.findAll", Students.class);
return q.getResultList();
}
/**
* API: Lam 2 nhiem vu - Them/Sua thong tin sinh vien
* TH1: Neu rollnumber => khong ton tai => Them moi
* TH2: Neu rollnumber => ton tai => update
* @param std
* @return
*/
@WebMethod
public String save(Students std) {
//Tao connection to database
EntityManagerFactory factory = Persistence.createEntityManagerFactory("StudentWSPU");
EntityManager em = factory.createEntityManager();
//Tim xem sinh vien da ton tai trong he thong chua
Students stdFind = em.find(Students.class, std.getRollnumber());
if(stdFind != null) {
//Update
em.getTransaction().begin();
stdFind.setAge(std.getAge());
stdFind.setEmail(std.getEmail());
stdFind.setName(std.getName());
em.getTransaction().commit();
return "update success";
} else {
//Insert
em.getTransaction().begin();
em.persist(std);
em.getTransaction().commit();
return "insert success";
}
}
/**
* Tim kiem thong tin sinh vien trong database
* @param rollnumber
* @return
*/
@WebMethod
public Students find(String rollnumber) {
//Tao connection to database
EntityManagerFactory factory = Persistence.createEntityManagerFactory("StudentWSPU");
EntityManager em = factory.createEntityManager();
//Tim xem sinh vien da ton tai trong he thong chua
Students stdFind = em.find(Students.class, rollnumber);
return stdFind;
}
/**
* Xoa thong tin sinh vien theo rollnumber
* @param rollnumber
* @return
*/
@WebMethod
public String remove(String rollnumber) {
//Tao connection to database
EntityManagerFactory factory = Persistence.createEntityManagerFactory("StudentWSPU");
EntityManager em = factory.createEntityManager();
//Tim xem sinh vien da ton tai trong he thong chua
Students stdFind = em.find(Students.class, rollnumber);
if(stdFind != null) {
//xoa sinh vien
em.getTransaction().begin();
em.remove(stdFind);
em.getTransaction().commit();
return "remove success";
}
return "remove failed";
}
}
#persistence.xml
<?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="StudentWSPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>entities.Students</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/student_manager?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>
Client APP
#StudentAPI.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 api;
import ws.Students;
/**
*
* @author Admin
*/
public class StudentAPI {
public static java.util.List<ws.Students> getStudentList() {
ws.StudentWS_Service service = new ws.StudentWS_Service();
ws.StudentWS port = service.getStudentWSPort();
return port.getStudentList();
}
public static Students find(java.lang.String arg0) {
ws.StudentWS_Service service = new ws.StudentWS_Service();
ws.StudentWS port = service.getStudentWSPort();
return port.find(arg0);
}
public static String save(ws.Students arg0) {
ws.StudentWS_Service service = new ws.StudentWS_Service();
ws.StudentWS port = service.getStudentWSPort();
return port.save(arg0);
}
public static String remove(java.lang.String arg0) {
ws.StudentWS_Service service = new ws.StudentWS_Service();
ws.StudentWS port = service.getStudentWSPort();
return port.remove(arg0);
}
}
#AddStudentServlet.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 api.StudentAPI;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import ws.Students;
/**
*
* @author Admin
*/
public class AddStudentServlet 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 {
//Kiem tra xem => them/sua => dua vao rollnumber trong GET
String rollnumber = request.getParameter("rollnumber");
Students std = StudentAPI.find(rollnumber);
if(std == null) {
std = new Students();
}
//Truyen thong tin sinh vein sang trang save.jsp
request.setAttribute("student", std);
//Hien thi du lieu tren trang jsp
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/save.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 rollnumber = request.getParameter("rollnumber");
String name = request.getParameter("name");
String email = request.getParameter("email");
int age = Integer.parseInt(request.getParameter("age"));
Students std = new Students();
std.setAge(age);
std.setEmail(email);
std.setName(name);
std.setRollnumber(rollnumber);
//Goi toi API => them/sua
StudentAPI.save(std);
response.sendRedirect("list");
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
#StudentServlet.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 api.StudentAPI;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import ws.Students;
/**
*
* @author Admin
*/
public class StudentServlet 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 {
//Lay danh sach sinh vien tu API
List<Students> studentList = StudentAPI.getStudentList();
//Gui du lieu sang trang JSP
request.setAttribute("studentList", studentList);
//Hien thi du lieu tren trang jsp
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/list.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 rollnumber = request.getParameter("rollnumber");
if(rollnumber != null && !rollnumber.isEmpty()) {
//delete student
StudentAPI.remove(rollnumber);//Xoa dc sinh vien di.
System.out.println("Delete student");
}
response.sendRedirect("list");
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
#list.jsp
<%--
Document : list.jsp
Created on : Sep 30, 2020, 7:12:35 PM
Author : Admin
--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Danh sach sinh vien - API</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">Danh Sach Sinh Vien</h2>
</div>
<div class="panel-body">
<table class="table table-bordered">
<thead>
<tr>
<th>STT</th>
<th>MSV</th>
<th>Ten</th>
<th>Email</th>
<th>Tuoi</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<c:forEach var="item" items="${studentList}" varStatus="loop">
<tr>
<td>${loop.index + 1}</td>
<td>${item.rollnumber}</td>
<td>${item.name}</td>
<td>${item.email}</td>
<td>${item.age}</td>
<td>
<a href="save?rollnumber=${item.rollnumber}">
<button class="btn btn-warning">Edit</button>
</a>
</td>
<td>
<form method="post">
<input name="rollnumber" value="${item.rollnumber}" hidden="true"/>
<button class="btn btn-danger" name="action" value="delete">Delete</button>
</form>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<a href="save">Add New Student</a>
</div>
</div>
</div>
</body>
</html>
#save.jsp
<%--
Document : save
Created on : Sep 30, 2020, 7:26:24 PM
Author : Admin
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Add/Update Student</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">Add/Update Student</h2>
</div>
<div class="panel-body">
<form method="post">
<div class="form-group">
<label for="rollnumber">RollNumber:</label>
<input required="true" type="text" class="form-control" id="rollnumber" name="rollnumber" value="${student.rollnumber}">
</div>
<div class="form-group">
<label for="name">Name:</label>
<input required="true" type="text" class="form-control" id="name" name="name" value="${student.name}">
</div>
<div class="form-group">
<label for="email">Email:</label>
<input required="true" type="email" class="form-control" id="email" name="email" value="${student.email}">
</div>
<div class="form-group">
<label for="age">Age:</label>
<input type="number" class="form-control" id="age" name="age" value="${student.age}">
</div>
<button class="btn btn-success">Register</button>
</form>
</div>
</div>
</div>
</body>
</html>
#web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>StudentServlet</servlet-name>
<servlet-class>servlet.StudentServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>AddStudentServlet</servlet-name>
<servlet-class>servlet.AddStudentServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>StudentServlet</servlet-name>
<url-pattern>/list</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AddStudentServlet</servlet-name>
<url-pattern>/save</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
Tags:
Phản hồi từ học viên
5
(Dựa trên đánh giá ngày hôm nay)