本文已参与[新人创作礼]活动,一起开启掘金创作之路。
哈喽,大家好!我是Why,一名在读学生,目前刚刚开始进入自己的编程学习生涯。虽然学习起步较晚,但我坚信做了才有0或1的可能。学了一段时间以后也是选择在掘金上分享自己的日常笔记,也希望能够在众多道友的大家庭中打成一片。 本文主要讲解通过反射机制实现Servlet与JSON数据共享,如果大家读后觉得有用的话,还请大家多多支持博主:欢迎 ❤️点赞👍、收藏⭐、留言💬 ✨✨✨个人主页:JinHuan
自定义——>反射机制将高级引用数据类型转换为JSON字符串
实例
此处将任意类型对象内容转换为JSON格式字符串返回
可以使用反射机制手动模拟,也可以使用JSON的jar包
ReflectUtil
package com.jinhuan.util;
import java.lang.reflect.Field;
public class ReflectUtil {
public static String jsonDeal(Object obj) {
/*
* 作用:
* 将任意类型对象内容转换为JSON格式字符串返回
* 参数:
* 一个高级引用类型对象 Object
* */
Class classFile = null;
Field fieldArray[] = null;
StringBuffer res = new StringBuffer("{");
//获取当前对象的类文件
classFile = obj.getClass();
//获得当前class的所有属性
fieldArray = classFile.getDeclaredFields();
//获得当前对象的所有值
try {
for (int i = 0; i < fieldArray.length; i++) {
Field field = fieldArray[i];
//确保私有访问权限属性可以在class文件外部使用
field.setAccessible(true);
//获取每个属性的名称和value
String fileName = field.getName();
Object value = field.get(obj);
//将获得属性及其值拼接为JSON格式字符串
res.append(""");
res.append(fileName);
res.append("":"");
res.append(value);
res.append(""");
if(i < fieldArray.length-1)
res.append(",");
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} finally {
res.append("}");
}
return res.toString();
}
}
Student
package com.jinhuan.entity;
public class Student {
private Integer sid;
private String sname;
public Student(Integer sid, String sname) {
this.sid = sid;
this.sname = sname;
}
public Student() {
}
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
}
OneServlet
package com.jinhuan.controller;
import com.jinhuan.entity.Student;
import com.jinhuan.util.ReflectUtil;
import java.io.IOException;
public class OneServlet extends javax.servlet.http.HttpServlet {
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
}
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
//创建一个学生对象
Student stu = new Student(12, "尽欢");
/*
* 由于Stu是一个高级引用数据对象
* 直接调用request将stu对象传过去的话,传过去的是改对象的地址
* 可以将该对象的内容抓换为一个JSON类型的字符串,来进行传递
* {"sid":12,"sname":"尽欢"}--->字符串格式"{"sid":12,"sname":"尽欢"}"
* 但是,这样进行转换的效率是极低的,所以可以将其封装成一个方法;来帮助我们将每一个对象,转换为一个JSON字符串
*
* */
//将该对象转换为一个JSON字符串
//手动模拟实现
String str = ReflectUtil.jsonDeal(stu);
/*
使用jar包操作方式
1、String str = JSONObject.fromObject(stu).toString();
2、通过json.jar工具类将集合内容转换为【JSON数组格式】字符串
JSONArray jsonArray = JSONArray.fromObject(stuList
*/
//将其存入到请求作用域对象中
request.setAttribute("key",str);
//请求转发
request.getRequestDispatcher("/index_1.jsp").forward(request,response);
}
}
index_1.jsp
<%--
Created by IntelliJ IDEA.
User: 尽欢
Date: 2021/11/23
Time: 16:45
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<script type="text/javascript">
var stu = ${requestScope.key};
window.alert("学员编号 "+stu.sid+" 学员姓名 "+stu.sname);
</script>
</body>
</html>