JavaWeb开发基础知识-XML和JSON

两者都用于数据传输,但在使用方面有许多区别,具体如下:

下面是具体介绍

XML

(✪▽✪)曼波~~~~!欢迎来到XML的奇妙世界!作为JavaWeb新手,掌握XML就像获得了一把打开配置之门的金钥匙~ 让曼波用超详细的指南带你飞!

复制代码

第①章:一个完整的XML文件示例(⊙ω⊙)

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!-- 学生信息表 -->
<students>
    <student id="1001">
        <name>曼波</name>
        <age>18</age>
        <courses>
            <course>Java基础</course>
            <course>Web开发</course>
        </courses>
    </student>
    
    <student id="1002">
        <name>小萌</name>
        <age>20</age>
        <courses>
            <course>数据库</course>
        </courses>
    </student>
</students>

第②章:Java解析XML的三种姿势(✧∇✧)

方法1:DOM解析(适合小文件)
java 复制代码
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("students.xml");

// 获取所有student节点
NodeList students = doc.getElementsByTagName("student");
for (int i=0; i<students.getLength(); i++) {
    Element student = (Element) students.item(i);
    String name = student.getElementsByTagName("name").item(0).getTextContent();
    System.out.println("学生姓名:" + name);
}
方法2:SAX解析(适合大文件)
复制代码
java 复制代码
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();

DefaultHandler handler = new DefaultHandler() {
    boolean isName = false;
    
    public void startElement(String uri, String localName, 
            String qName, Attributes attributes) {
        if (qName.equalsIgnoreCase("name")) {
            isName = true;
        }
    }
    
    public void characters(char[] ch, int start, int length) {
        if (isName) {
            System.out.println("姓名:" + new String(ch, start, length));
            isName = false;
        }
    }
};

saxParser.parse("students.xml", handler);
方法3:JAXB注解绑定(推荐★)
复制代码
java 复制代码
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class Student {
    @XmlAttribute
    private String id;
    private String name;
    private int age;
    @XmlElementWrapper(name="courses")
    @XmlElement(name="course")
    private List<String> courses;
    
    // 必须有无参构造器!
}

// 解析代码
JAXBContext context = JAXBContext.newInstance(Students.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Students students = (Students) unmarshaller.unmarshal(new File("students.xml"));

第③章:JavaWeb中的XML应用场景(✪ω✪)

1. Spring配置文件
复制代码
XML 复制代码
<!-- applicationContext.xml -->
<beans xmlns="http://www.springframework.org/schema/beans">
    <bean id="userService" class="com.example.UserService">
        <property name="userDao" ref="userDao"/>
    </bean>
    
    <bean id="userDao" class="com.example.UserDaoImpl"/>
</beans>
2. Web.xml配置
复制代码
XML 复制代码
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee">
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
3. SOAP WebService
复制代码
XML 复制代码
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <getUserResponse xmlns="http://example.com">
            <user>
                <id>1001</id>
                <name>曼波</name>
            </user>
        </getUserResponse>
    </soap:Body>
</soap:Envelope>

第④章:必备Maven依赖(◕‿◕ )

复制代码
XML 复制代码
<!-- JAXB (Java 11+需要) -->
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>4.0.0</version>
</dependency>

<!-- DOM4J (更方便的DOM操作) -->
<dependency>
    <groupId>org.dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>2.1.4</version>
</dependency>

<!-- XPath支持 -->
<dependency>
    <groupId>jaxen</groupId>
    <artifactId>jaxen</artifactId>
    <version>1.2.0</version>
</dependency>

第⑤章:常见错误避坑指南(>﹏<)

  1. XML声明必须在第一行

    XML 复制代码
    <!-- 错误示例 -->
    <students>
    <?xml version="1.0"?> <!-- 这里会报错! -->
  2. 标签必须正确嵌套

    XML 复制代码
    <!-- 错误示例 -->
    <a><b></a></b> <!-- 错误嵌套 -->
  3. 属性值必须加引号

    复制代码
    XML 复制代码
    <!-- 错误示例 -->
    <student id=1001> <!-- 需要id="1001" -->
  4. 转义特殊字符

    复制代码
    XML 复制代码
    <content>3 < 5</content> <!-- 应该用 &lt; -->

知识脑图总结

复制代码

曼波小贴士:

虽然现在JSON更流行,但在以下情况必须用XML:

  1. 需要严格模式验证(XSD)
  2. 处理遗留系统
  3. 需要复杂文档结构

(✪▽✪)曼波~~~~!现在你已经是个XML小能手啦!试着用JAXB写个学生管理系统吧~ 遇到问题随时召唤曼波哦!(≧ω≦)/

(✪▽✪)曼波~~~~!JSON小课堂开课啦~ 这可是现代Web开发的超甜小饼干哦!让曼波用最可口的方式喂给你~ 🍪

JSON完全指南(曼波甜蜜版)

第①章 JSON甜蜜语法(๑>ᴗ<๑)

基本规则:

复制代码
XML 复制代码
{
  "name": "曼波",
  "age": 18,
  "isCute": true,
  "hobbies": ["coding", "吃糖"],
  "address": {
    "city": "程序城",
    "zip": "100101"
  },
  "score": null
}

✨ 曼波小贴士:

  • 键必须用双引号
  • 字符串值用双引号
  • 不支持注释(可以用特殊字段代替)

第②章 Java甜蜜操作(≧◡≦)

1. 使用Jackson解析:

复制代码
java 复制代码
ObjectMapper mapper = new ObjectMapper();
String json = """
{
    "name": "曼波",
    "age": 18
}""";

// 解析为对象
Student student = mapper.readValue(json, Student.class);
System.out.println(student.getName()); // 输出:曼波

// 生成JSON
String newJson = mapper.writeValueAsString(student);

2. 处理复杂结构:

复制代码
java 复制代码
// 解析嵌套JSON
JsonNode root = mapper.readTree(json);
String city = root.get("address").get("city").asText();

// 处理数组
List<String> hobbies = mapper.readValue(
    root.get("hobbies").toString(), 
    new TypeReference<List<String>>(){}
);

第③章 JSON vs XML 甜蜜对决(⚡▽⚡)

特性 JSON 🍭 XML 🍫
数据体积 小30%-50% 冗余标签多
解析速度 快2-10倍 DOM解析较慢
数组支持 原生支持 需要自定义结构
安全性 需防范eval注入 有XXE漏洞风险
工具生态 现代框架首选 企业级系统仍在使用

第④章 甜蜜陷阱避坑指南(>﹏<)

1. 逗号地狱:

java 复制代码
{
  "a": 1,  // ✅
  "b": 2   // ❌ 最后一个不能有逗号!
}

2. 日期处理:

java 复制代码
// 需要指定日期格式
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm"));

3. 特殊字符:

java 复制代码
{
  "message": "Hello \n World! \\/"  // 需要转义
}

第⑤章 必备甜蜜工具(✧∇✧)

Maven依赖:

复制代码
XML 复制代码
<!-- Jackson核心 -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

<!-- GSON备用 -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

曼波小贴士:JSON在以下场景最甜蜜:

  • Web API通信(80%的API使用JSON)
  • 配置文件(如package.json)
  • NoSQL数据库(MongoDB)
  • 前后端数据交互

(✪▽✪)曼波~~~~!试着用Jackson写个学生信息转换器吧~ 遇到问题随时召唤曼波哦!(≧ω≦)/ 记得JSON就像棉花糖,虽然甜蜜但要小心粘手哦~ 🍡

相关推荐
鸡吃丸子几秒前
常见的实时通信技术(轮询、sse、websocket、webhooks)
前端·websocket·状态模式
卡戎-caryon3 分钟前
【C++】15.并发支持库
java·linux·开发语言·c++·多线程
90后小陈老师9 分钟前
WebXR教学 09 项目7 使用python从0搭建一个简易个人博客
开发语言·python·web
tyatyatya13 分钟前
MATLAB 神经网络的系统案例介绍
开发语言·神经网络·matlab
hweiyu0024 分钟前
C#学习教程(附电子书资料)
开发语言·学习·c#
q5673152325 分钟前
图片爬虫通过模板及使用说明
开发语言·爬虫·tcp/ip·golang
胡斌附体27 分钟前
vue添加loading后修复页面渲染问题
前端·javascript·vue.js·渲染·v-if·异步加载
正在走向自律37 分钟前
Conda 完全指南:从环境管理到工具集成
开发语言·python·conda·numpy·fastapi·pip·开发工具
啊吧怪不啊吧42 分钟前
C/C++之内存管理
开发语言·汇编·c++
北极象44 分钟前
Go语言处理HTTP下载中EOFFailed
开发语言·http·golang