Java如何传递JSON数据到JSP页面
在Java Web开发中,将JSON数据从后端传递到JSP页面是一个常见的需求,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,本文将详细介绍几种在Java中将JSON数据传递到JSP页面的方法。
使用Servlet传递JSON数据
创建Servlet处理JSON数据
我们需要创建一个Servlet来处理业务逻辑并生成JSON数据:
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.Gson;
@WebServlet("/jsonServlet")
public class JsonServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 创建数据
Map<String, Object> data = new HashMap<>();
data.put("name", "张三");
data.put("age", 25);
data.put("city", "北京");
// 使用Gson将Map转换为JSON字符串
Gson gson = new Gson();
String json = gson.toJson(data);
// 将JSON数据存入request作用域
request.setAttribute("jsonData", json);
// 转发到JSP页面
request.getRequestDispatcher("displayJson.jsp").forward(request, response);
}
}
在JSP页面接收并显示JSON数据
创建displayJson.jsp页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>JSON数据显示</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<h1>用户信息</h1>
<div id="user-info"></div>
<script>
// 从request作用域获取JSON数据
var jsonData = '${jsonData}';
// 解析JSON并显示在页面上
var user = JSON.parse(jsonData);
document.getElementById("user-info").innerHTML =
"姓名: " + user.name + "<br>" +
"年龄: " + user.age + "<br>" +
"城市: " + user.city;
</script>
</body>
</html>
使用JSTL和EL表达式传递JSON数据
在Servlet中设置数据
// 同样使用上面的Servlet,但也可以使用其他方式生成JSON
request.setAttribute("jsonString", "{\"name\":\"李四\",\"age\":30,\"city\":\"上海\"}");
在JSP中使用JSTL处理JSON
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html>
<html>
<head>JSTL处理JSON</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<h1>用户信息</h1>
<div id="user-info"></div>
<script>
// 使用JSTL的fn:escapeXml确保JSON字符串被正确转义
var jsonData = "${fn:escapeXml(jsonString)}";
// 解析JSON并显示
var user = JSON.parse(jsonData);
document.getElementById("user-info").innerHTML =
"姓名: " + user.name + "<br>" +
"年龄: " + user.age + "<br>" +
"城市: " + user.city;
</script>
</body>
</html>
使用AJAX从JSP获取JSON数据
创建Servlet返回JSON响应
@WebServlet("/ajaxJsonServlet")
public class AjaxJsonServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
Map<String, Object> data = new HashMap<>();
data.put("name", "王五");
data.put("age", 28);
data.put("city", "广州");
Gson gson = new Gson();
String json = gson.toJson(data);
response.getWriter().write(json);
}
}
在JSP中使用AJAX获取JSON
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>AJAX获取JSON</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<h1>用户信息</h1>
<div id="user-info"></div>
<script>
$(document).ready(function() {
$.ajax({
url: "ajaxJsonServlet",
type: "GET",
dataType: "json",
success: function(data) {
document.getElementById("user-info").innerHTML =
"姓名: " + data.name + "<br>" +
"年龄: " + data.age + "<br>" +
"城市: " + data.city;
},
error: function() {
document.getElementById("user-info").innerHTML = "获取数据失败";
}
});
});
</script>
</body>
</html>
使用Spring MVC传递JSON数据
如果你使用的是Spring MVC框架,传递JSON数据会更加简单:
创建Controller
@Controller
public class JsonController {
@RequestMapping("/springJson")
public String showJson(Model model) {
Map<String, Object> data = new HashMap<>();
data.put("name", "赵六");
data.put("age", 32);
data.put("city", "深圳");
model.addAttribute("jsonData", data);
return "springJsonDisplay";
}
}
在JSP中使用Spring的表单标签
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<!DOCTYPE html>
<html>
<head>Spring MVC JSON</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<h1>用户信息</h1>
<div id="user-info"></div>
<script>
// Spring会将Map自动转换为JSON字符串
var jsonData = '${jsonData}';
var user = JSON.parse(jsonData);
document.getElementById("user-info").innerHTML =
"姓名: " + user.name + "<br>" +
"年龄: " + user.age + "<br>" +
"城市: " + user.city;
</script>
</body>
</html>
注意事项
-
安全性:直接将JSON数据插入到JavaScript中可能会导致XSS攻击,确保对JSON数据进行适当的转义,可以使用
fn:escapeXml函数或其他转义方法。 -
性能:对于大型JSON数据,考虑使用AJAX方式异步加载,避免页面阻塞。
-
编码:确保所有环节(Servlet、JSP、数据库)使用一致的字符编码(通常是UTF-8)。
-
依赖:使用Gson或其他JSON库时,确保项目中有相应的依赖(如Maven或Gradle配置)。
介绍了四种将JSON数据从Java传递到JSP页面的方法:
- 使用Servlet和request作用域
- 使用JSTL和EL表达式
- 使用AJAX异步获取
- 使用Spring MVC框架
选择哪种方法取决于你的项目需求、架构和偏好,对于简单的场景,前两种方法足够;对于需要动态更新数据的场景,AJAX是更好的选择;而使用Spring MVC可以简化开发流程。



还没有评论,来说两句吧...