在现代 Web 应用程序中,我们以 JSON 格式从服务器获取数据,并使用前端库或 Angular、React 等框架在 jsp 或 html 页面中显示数据。
这与移动应用程序开发类似。
在这里,我们将看到如何从 servlet 获取 JSON 响应并在 jsp 中显示。
什么是 JSON?
Java S cript Object Notation ( JSON ) 是一种用于交换数据的轻量级格式。
- JSON 是一种良好的人类可读格式
- JSON 源自 JavaScript
- JSON 是用于表示结构化数据的基于文本的格式
- JSON 是键值对数据
- JSON 与语言无关
这些是 JSON 的特性。
JSON 可用于在不同平台之间交换数据。
由于轻量级,在不同应用程序(即基于 Web 的应用程序)之间交换信息非常快。
所以知道如何将 JSON 与 servlet 一起使用会很好
在 NetBeans 中创建 Java Web 项目
我们已经知道如何使用 netbeans 创建简单的项目,请参阅使用 maven创建项目和在 netbeans 中创建简单的 Web 项目。
我们创建了一个 Java Web 项目ServletJson
来从 Servlet JSON 获取响应
项目浏览器
在上述项目中
- 为 Studnet 创建 Pojo
- 为地址创建 Pojo
- 为主题创建 Pojo
- 创建 JsonResponse Servlet
- 创建 index.jsp
在 Netbeans 中创建类和页面
索引.Jsp
该文件包含一个点击链接,该链接将转到 url
localhost:8084/ServletJson/jsonResponse
<%@page contentType=”text/html” pageEncoding=”UTF-8′′%>
1
|
<a href="jsonResponse">Get Json response from server</a>
|
JsonResponse.Java
在这里,我们要从 servlet 发送 json 数据响应。
这里有一个链接在 jsp 页面上的链接单击它正在调用/jsonResponse
url,其中 JsonResponse 的 doGet() 方法被调用。
如何设置 HttpServletResponse 设置正文 Json
要生成 json 响应,我们正在设置response.setContentType("application/json");
用于将响应设置为application/json.
这里的响应是 的参考变量HttpServletResponse
。
在 servlet 中,学生对象是使用名称性别手机号码和三个科目标记创建的。创建对象后,我们使用gson 库将对象转换为 json 。
response.setContentType("application/json");
用于以 json 格式发送响应。
response.setCharacterEncoding("utf-8");
是字符编码方式。
我们创建了包含学生 ID、姓名、性别、地址、手机号以及一组科目和地址的学生对象。
我们使用 Gson 对象将此数据发送到 jsp。
该方法 gson.toJson(student);
是将对象转换为 json 字符串
然后我们将 json 数据传递给PrintWriter
对象以在浏览器中写入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package ebhor.servlet;
import com.google.gson.Gson;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns = {"/jsonResponse"})
public class JsonResponse extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
Student student = new Student(12, "Ram Kumar", "Male", "1234565678");
Subject subject1 = new Subject(1, "Computer Fundamentals");
Subject subject2 = new Subject(2, "Computer Graphics");
Subject subject3 = new Subject(3, "Data Structures");
Set subjects = new HashSet();
subjects.add(subject1);
subjects.add(subject2);
subjects.add(subject3);
student.setSubjects(subjects);
Address address = new Address(1, "Street 23 NN West ", "Bhilai", "Chhattisgarh", "India");
student.setAddress(address);
Gson gson = new Gson();
String jsonData = gson.toJson(student);
PrintWriter out = response.getWriter();
try {
out.println(jsonData);
} finally {
out.close();
}
}
}
|
Student.java
该类包含学生数据,如身份证、姓名、性别、地址、手机号码和多个科目标记。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
package ebhor.servlet;
import java.io.Serializable;
import java.util.Set;
import java.util.HashSet;
public class Student implements Serializable {
private long id;
private String name;
private String gender;
private Address address;
private Set subjects = new HashSet(0);
private String mobileNo;
public Student() {
}
public Student(long id, String name, String gender, String mobileNo) {
this.id = id;
this.name = name;
this.gender = gender;
this.mobileNo = mobileNo;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public Set getSubjects() {
return subjects;
}
public void setSubjects(Set subjects) {
this.subjects = subjects;
}
public String getMobileNo() {
return mobileNo;
}
public void setMobileNo(String mobileNo) {
this.mobileNo = mobileNo;
}
}
|
Subject.java
包含主题的 ID 和名称。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
package ebhor.servlet;
import java.io.Serializable;
public class Subject implements Serializable {
private long id;
private String name;
public Subject() {
}
public Subject(long id, String name) {
this.id = id;
this.name = name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
|
地址
包含地址字段 id 、街道、城市、州和国家字段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
package ebhor.servlet;
import java.io.Serializable;
public class Address implements Serializable{
private long id;
private String street;
private String city;
private String state;
private String country;
public Address() {
}
public Address(long id, String street, String city, String state, String country) {
this.id = id;
this.street = street;
this.city = city;
this.state = state;
this.country = country;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
|
结果
这是点击链接运行项目后的 index.jsp 页面,它将在浏览器中显示 json 数据
Jsp页面生成JSON响应
来自 Servlet 的 JSP 页面中的 JSON 响应
上面的 java servlet 返回 JSON 响应。