Tạo ứng dụng JSP-Servlet gọi Restful Webservice sử dụng thư viện Jersey Client
Đăng lúc: 04:40 PM - 01/12/2023 bởi Charles Chung - 1310Trong bài này tôi sẽ hướng dẫn tạo ứng dụng JSP-Servlet gọi Restful Webservice sử dụng thư viện Jersey Client
Giới thiệu
Trong bài này chúng ta sẽ tiến hành tạo ứng dụng JSP&Servlet Client để gọi Restful Webservice của bài Tạo RESTful Web Service trong Java với Jersey và Oracle sử dụng thư viện sử dụng là Jersey 1.x (các bạn có thể sử dụng bản 2.x)
Các bước thực hiện
Bước 1: Tạo Dynamic Web Project
- Khởi động Eclispe IDE -> vào menu File -> New -> Dynamic Web Project -> Nhập tên "JerseyClientConsumeRestWebservice"
- Tiêp tục kích vào Next -> Next -> Chọn Generate web.xml deyployment desciptor -> Finish
Bước 2: Convert sang Maven Project
- Kích chuột phải vào Project vừa tạo -> Configure -> Convert to Maven Project -> Finish
Bước 3: Khai báo các Maven Dependencies cần thiết
- Mở file pom.xml và cấu hình các Maven Dependencies gồm: jstl, jersey client, gson
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-client -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.19.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
</dependencies>
Bước 4: Tạo các tệp tin theo cấu trúc mô tả sau
- Mở tệp web.xml và cấu hình vào bên trong thẻ <web-app> như sau:
<welcome-file-list>
<welcome-file>StudentServlet</welcome-file>
</welcome-file-list>
- Tạo lớp hanam88.model/Result.java (nhận kết quả trả về từ service)
public class Result {
private int code;
private String message;
public Result(int code, String message) {
super();
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
- Tạo lớp hanam88.model/Student.java (nhận thông tin sinh viên trả về từ service)
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
private String studentId;
private String fullName;
private int gender;
private Date birthDay;
private String email;
private String phone;
private String address;
private int active;
public Student() {
}
public String getStudentId() {
return studentId;
}
public Student(String studentId, String fullName, int gender, Date birthDay, String email, String phone,
String address, int active) {
super();
this.studentId = studentId;
this.fullName = fullName;
this.gender = gender;
this.birthDay = birthDay;
this.email = email;
this.phone = phone;
this.address = address;
this.active = active;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public Date getBirthDay() {
return birthDay;
}
public void setBirthDay(Date birthDay) {
this.birthDay = birthDay;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getActive() {
return active;
}
public void setActive(int active) {
this.active = active;
}
}
- Tạo lớp hanam88.servlet/StudentServlet.java (xử lý các nghiệp vụ và gọi service)
@WebServlet("/StudentServlet")
public class StudentServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
//khai báo uri service
String uri="http://localhost:8080/RestfulWebServiceJerseyOracle/api";
public StudentServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Thiết lập utf-8
request.setCharacterEncoding("UTF-8");
//lấy tham số action
var action=request.getParameter("action");
//khởi tạo gson
var gson=new GsonBuilder().setDateFormat("dd/MM/yyyy").create();
//tạo client jersey
var client=Client.create();
//nếu action null thì gọi service lấy toàn bộ sinh viên
if(action==null) {
//thiết lập uri và path tài nguyên
WebResource resource=client.resource(uri).path("students");
//lấy gọi GET để lấy dữ liệu trả về string
String data=resource.get(String.class);
//convert string sang list<student>
TypeToken<List<Student>> listOfMyClassObject = new TypeToken<List<Student>>() {};
List<Student> students=gson.fromJson(data, listOfMyClassObject.getType());
//chuyển ra view index để hiển thị
request.setAttribute("students", students);
request.getRequestDispatcher("index.jsp").forward(request, response);
}else if(action.equals("search")) {
String name=request.getParameter("name");
WebResource resource=client.resource(uri).path("students").path("search").path(name);
String data=resource.get(String.class);
TypeToken<List<Student>> listOfMyClassObject = new TypeToken<List<Student>>() {};
List<Student> students=gson.fromJson(data, listOfMyClassObject.getType());
request.setAttribute("students", students);
request.getRequestDispatcher("index.jsp").forward(request, response);
}else if(action.equals("add")) {
response.sendRedirect("create.jsp");
}else if(action.equals("edit")) {
String id=request.getParameter("id");
WebResource resource=client.resource(uri).path("students").path(id);
String data=resource.get(String.class);
Student student=gson.fromJson(data, Student.class);
request.setAttribute("student", student);
request.getRequestDispatcher("edit.jsp").forward(request, response);
}else if(action.equals("save")) {
var st=new Student();
st.setStudentId(request.getParameter("studentId"));
st.setFullName(request.getParameter("fullName"));
st.setAddress(request.getParameter("address"));
try {
st.setBirthDay(new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("birthDay")));
System.out.println(st.getBirthDay());
} catch (ParseException e) {
e.printStackTrace();
}
st.setEmail(request.getParameter("email"));
st.setGender(Integer.parseInt(request.getParameter("gender")));
st.setPhone(request.getParameter("phone"));
st.setActive(Integer.parseInt(request.getParameter("active")));
String data=gson.toJson(st);
WebResource resource=client.resource(uri).path("students");
ClientResponse clientResponse=resource.type("application/json").post(ClientResponse.class, data);
String result=clientResponse.getEntity(String.class);
var rs=gson.fromJson(result, Result.class);
request.getSession().setAttribute("msg", rs.getMessage());
System.out.println(result);
response.sendRedirect("StudentServlet");
}else if(action.equals("update")) {
var st=new Student();
st.setStudentId(request.getParameter("studentId"));
st.setFullName(request.getParameter("fullName"));
st.setAddress(request.getParameter("address"));
try {
st.setBirthDay(new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("birthDay")));
} catch (ParseException e) {
e.printStackTrace();
}
st.setEmail(request.getParameter("email"));
st.setGender(Integer.parseInt(request.getParameter("gender")));
st.setPhone(request.getParameter("phone"));
st.setActive(Integer.parseInt(request.getParameter("active")));
String data=gson.toJson(st);
WebResource resource=client.resource(uri).path("students").path(st.getStudentId());
ClientResponse clientResponse=resource.type("application/json").put(ClientResponse.class, data);
String result=clientResponse.getEntity(String.class);
var rs=gson.fromJson(result, Result.class);
request.getSession().setAttribute("msg", rs.getMessage());
response.sendRedirect("StudentServlet");
}else if(action.equals("delete")) {
String id=request.getParameter("id");
WebResource resource=client.resource(uri).path("students").path(id);
ClientResponse clientResponse=resource.delete(ClientResponse.class);
String result=clientResponse.getEntity(String.class);
var rs=gson.fromJson(result, Result.class);
request.getSession().setAttribute("msg", rs.getMessage());
response.sendRedirect("StudentServlet");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
- Tạo trang jsp WEB-INF/index.jsp (hiển thị danh sách sinh viên)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>DANH SÁCH SINH VIÊN</title>
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<H1>DANH SÁCH SINH VIÊN</H1>
<a class="btn btn-primary" href="StudentServlet?action=add">Thêm mới</a>
<form method="get" action="StudentServlet"><input type="hidden" name="action" value="search"/> <input type="text" name="name"/><button>Tìm kiếm</button></form>
<c:if test="${sessionScope.msg!=null}">
<p class="alert alert-success">${sessionScope.msg}</p>
<c:remove var="msg" scope="session" />
</c:if>
<table class="table table-bordered">
<tr>
<th>Mã số</th>
<th>Họ và tên</th>
<th>Ngày sinh</th>
<th>Giới tính</th>
<th>Email</th>
<th>Địa chỉ</th>
<th>Điện thoại</th>
<th>Tình trạng</th>
<th></th>
</tr>
<c:forEach var="s" items="${students}">
<tr>
<td>${s.studentId}</td>
<td>${s.fullName}</td>
<td><f:formatDate value="${s.birthDay}" pattern="dd/MM/yyyy" /></td>
<td>
<c:choose>
<c:when test="${s.gender==1}">
<span>Nam</span>
</c:when>
<c:otherwise>
<span>Nữ</span>
</c:otherwise>
</c:choose>
</td>
<td>${s.email}</td>
<td>${s.address}</td>
<td>${s.phone}</td>
<td>
<c:choose>
<c:when test="${s.active==1}">
<span>Đang học</span>
</c:when>
<c:otherwise>
<span>Đã nghỉ</span>
</c:otherwise>
</c:choose>
</td>
<td>
<a class="btn btn-danger" onclick="return confirm('Bạn có muốn xóa không?')" href="StudentServlet?id=${s.studentId}&action=delete">Xóa</a>
<a class="btn btn-success" href="StudentServlet?id=${s.studentId}&action=edit">Sửa</a>
</td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
- Tạo trang jsp WEB-INF/create.jsp (thêm sinh viên)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Thêm mới sinh viên</title>
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>Thêm mới sinh viên</h1>
<span style="color: red">${error}</span>
<form action="StudentServlet?action=save" method="post">
<table class="table">
<tr>
<td>Mã số</td>
<td><input type="text" name="studentId" /></td>
</tr>
<tr>
<td>Họ và tên</td>
<td><input type="text" name="fullName" /></td>
</tr>
<tr>
<td>Ngày sinh</td>
<td><input type="date" name="birthDay" /></td>
</tr>
<tr>
<td>Giới tính</td>
<td><select name="gender" id="gender">
<option value="1">Nam</option>
<option value="0">Nữ</option>
</select></td>
</tr>
<tr>
<td>Email</td>
<td><input type="email" name="email" /></td>
</tr>
<tr>
<td>Điện thoại</td>
<td><input type="text" name="phone" /></td>
</tr>
<tr>
<td>Địa chỉ</td>
<td><input type="text" name="address" /></td>
</tr>
<tr>
<td>Tình trạng</td>
<td><select name="active" id="active">
<option value="1">Đang học</option>
<option value="0">Dừng</option>
</select></td>
</tr>
<tr>
<td colspan="2">
<button class="btn btn-primary">Lưu</button>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
- Tạo trang jsp WEB-INF/edit.jsp (sửa sinh viên)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Sửa sinh viên</title>
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>Sửa sinh viên</h1>
<form action="StudentServlet?action=update" method="post">
<table class="table">
<tr>
<td>Mã số</td>
<td><input type="hidden" name="studentId" value="${student.studentId}" />${student.studentId}</td>
</tr>
<tr>
<td>Họ và tên</td>
<td><input type="text" name="fullName" value="${student.fullName}" /></td>
</tr>
<tr>
<td>Ngày sinh</td>
<f:formatDate value="${student.birthDay}" pattern="yyyy-MM-dd" var="strdate" />
<td><input type="date" value="${strdate}" name="birthDay" /></td>
</tr>
<tr>
<td>Giới tính</td>
<td><select name="gender" id="gender">
<c:if test="${student.gender==1}">
<option selected value="1">Nam</option>
<option value="0">Nữ</option>
</c:if>
<c:if test="${student.gender==0}">
<option value="1">Nam</option>
<option selected value="0">Nữ</option>
</c:if>
</select></td>
</tr>
<tr>
<td>Email</td>
<td><input type="email" name="email" value="${student.email }" /></td>
</tr>
<tr>
<td>Điện thoại</td>
<td><input type="text" name="phone" value="${student.phone }" /></td>
</tr>
<tr>
<td>Địa chỉ</td>
<td><input type="text" name="address" value="${student.address }" /></td>
</tr>
<tr>
<td>Tình trạng</td>
<td><select name="active" id="active">
<c:if test="${student.active==1}">
<option selected value="1">Đang học</option>
<option value="0">Đã nghỉ</option>
</c:if>
<c:if test="${student.active==0}">
<option value="1">Đang học</option>
<option selected value="0">Dừng</option>
</c:if>
</select></td>
</tr>
<tr>
<td colspan="2">
<button class="btn btn-primary">Cập nhật</button>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
Bước 5: Run application
- Kích chuột phải vào project chọn Run As -> Run on Server -> Tomcat v9.0
- Màn hình danh sách sinh viên
- Màn hình sửa sinh viên
Kích để tải source code bài Tạo ứng dụng JSP-Servlet gọi Restful Webservice sử dụng thư viện Jersey Client
Training online liên hệ: Charles Chung
Video
thay lời cảm ơn!
Các bài cũ hơn
- Security trong Restful Webservice sử dụng Jersey 2 để sinh ra JWT (07:24 PM - 29/11/2023)
- Restful Webservice Upload file kèm dữ liệu JSON sử dụng Jersey trong Java và Oracle (09:47 AM - 27/11/2023)
- Tạo RESTful Web Service trong Java với Jersey và Oracle (10:41 AM - 24/11/2023)
- Phát triển ứng dụng RESTful Web Service trong Java với thư viện Jersey (12:52 PM - 22/11/2023)
- Tổng hợp các câu hỏi phỏng vấn về Spring Core-Spring MVC (09:36 AM - 21/11/2023)