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就像棉花糖,虽然甜蜜但要小心粘手哦~ 🍡

相关推荐
nlog3n1 小时前
Java策略模式详解
java·bash·策略模式
Qlittleboy2 小时前
windows如何安装wkhtmltoimage 给PHP使用根据HTML生成图片
开发语言·windows·php
水w2 小时前
【Android Studio】解决报错问题Algorithm HmacPBESHA256 not available
android·开发语言·android studio
冷琅辞3 小时前
Elixir语言的云计算
开发语言·后端·golang
Mryan20054 小时前
解决GraalVM Native Maven Plugin错误:JAVA_HOME未指向GraalVM Distribution
java·开发语言·spring boot·maven
Naomi5214 小时前
自定义汇编语言(Custom Assembly Language) 和 Unix & Git
服务器·开发语言·git·unix
烂蜻蜓4 小时前
C 语言命令行参数:让程序交互更灵活
c语言·开发语言·交互
VX_CXsjNo14 小时前
免费送源码:Java+SSM+Android Studio 基于Android Studio游戏搜索app的设计与实现 计算机毕业设计原创定制
java·spring boot·spring·游戏·eclipse·android studio·android-studio
zm-v-159304339864 小时前
解锁 DeepSeek 与 Matlab:攻克科研难题的技术利刃
开发语言·matlab·信息可视化
ylfhpy4 小时前
Java面试黄金宝典33
java·开发语言·数据结构·面试·职场和发展·排序算法