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)