详解XML,Tomcat和Servlet

XML,Tomcat和Servlet程序

1. XML文件
1.1 XML文件介绍
可拓展性标记语言
XML可以作为
	1. 小型数据库,保存数据
	2. 可以作为配置文件,maven ==> POM
	3. 作为网络数据传输的媒介 5%  95% ==> JSON

XML文件中所有标签名,属性名,都可以自定义。
但是要求必须严格遵守XML语法
	1. 标签名必须有前后标签
	2. 每一个XML文件中有且只有一个根标签 rootElement
1.2 XML文件案例
<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student id="1">
        <name>汤姆</name>
        <age>5</age>
        <gender>1</gender>
        <salary>50000</salary>
        <address>
            <city>火星</city>
            <area>A城</area>
        </address>
    </student>
    <student id="2">
        <name>杰克</name>
        <age>6</age>
        <gender>1</gender>
        <salary>24000</salary>
        <address>
            <city>水星</city>
            <area>B城</area>
        </address>
    </student>
    <student id="3">
        <name>麦瑞</name>
        <age>8</age>
        <gender>0</gender>
        <salary>30000</salary>
        <address>
            <city>木星</city>
            <area>C城</area>
        </address>
    </student>
</students>
1.3 XML解析方式
DOM解析
	需要加载整个XML文件,对于内存的需求较大,并且可以对XML文件进行增删改查操作。
	DOM解析通常用于JavaWEB项目开发中,作用于框架配置文件。
	
SAX解析
	读取一行XML文件,解析一行XML文件,对于内存需求较小,没有对于XML文件修改能力。
	一般用于手机文本解析方式

DOM解析
	把所有的XML文件中标签看作是一个类对象
	rootElement 根标签
	Element 标签
	attribute 属性
	text 文本
	
	Java提供了对应DOM解析方式,但是【特别low】
	这里使用第三方提供的基于DOM解析的方式 Dom4j Jar包来完成对于XML文件的解析。Dom4j Java全球性框架内置的XML文件解析方式 Spring SpringMVC MyBatis Hibernate Strust
1.4 使用Dom4J解析XML文件
package com.qfedu.a_xml;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;

public class Demo1 {
    public static void main(String[] args) throws FileNotFoundException, DocumentException {
        // 1. 创建获取XML文件的核心类 SAXReader
        SAXReader saxReader = new SAXReader();

        /*
         2. 读取对应的XML文件,获取XML文件的Document对象,也就是整个XML文件对象
         这里需要使用Document对象解析整个XML文件
        */
        Document document = saxReader.read(new FileInputStream("./src/student.xml"));

        /*
        3. 获取XML文件的根节点对象,根节点对象是Element XML元素对象
         */
        Element rootElement = document.getRootElement();

        /*
        根据指定的子节点名字获取当前节点下的第一个子节点
         */
        Element student = rootElement.element("student");
        System.out.println(student);

        // 可以获取对应名字的属性值
        String id = student.attributeValue("id");
        System.out.println(id);

        // 获取当前节点的所有子节点List集合
        List<Element> elements = student.elements();
        for (Element element : elements) {
            // 获取文本节点对应的文本数据,返回值是String类型
            System.out.println(element.getText());

            if ("address".equals(element.getName())) {
                List<Element> elements1 = element.elements();
                for (Element element1 : elements1) {
                    System.out.println(element1.getText());
                }
            }
        }
    }
}
1.5 Xpath解析XML文件

Xpath语法API

package com.qfedu.a_xml;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.tree.DefaultAttribute;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;

public class Demo2 {
    public static void main(String[] args) throws FileNotFoundException, DocumentException {
        Document document = new SAXReader().read(new FileInputStream("./src/student.xml"));

        Element rootElement = document.getRootElement();
    
        List<Element> list = rootElement.selectNodes("//name");
        for (Element element : list) {
            System.out.println(element.getText());
        }

        List<DefaultAttribute> list1 = rootElement.selectNodes("//@id");
        for (DefaultAttribute element : list1) {
            System.out.println(element.getValue());
        }

        List<Element> list2 = rootElement.selectNodes("//student[1]");
        for (Element element : list2) {
            System.out.println(element);
            System.out.println(element.element("name").getText());
            System.out.println(element.element("age").getText());
            System.out.println(element.element("gender").getText());
            System.out.println(element.element("salary").getText());
        }

        List<Element> list3 = rootElement.selectNodes("//student[last()]");
        for (Element element : list3) {
            System.out.println(element);
            System.out.println(element.element("name").getText());
            System.out.println(element.element("age").getText());
            System.out.println(element.element("gender").getText());
            System.out.println(element.element("salary").getText());
        }

        List<Element> list4 = rootElement.selectNodes("//student[@id = 2]");
        for (Element element : list4) {
            System.out.println(element);
            System.out.println(element.element("name").getText());
            System.out.println(element.element("age").getText());
            System.out.println(element.element("gender").getText());
            System.out.println(element.element("salary").getText());
        }

        List<Element> list5 = rootElement.selectNodes("//student[salary > 25000]");
        for (Element element : list5) {
            System.out.println(element);
            System.out.println(element.element("name").getText());
            System.out.println(element.element("age").getText());
            System.out.println(element.element("gender").getText());
            System.out.println(element.element("salary").getText());
        }
    }
}
2. Tomcat【重点】
2.1 Tomcat 汤姆猫服务器
服务器
	对外提供服务的一个计算机,称之为服务器
	游戏服务器,邮件服务器,视频服务器,网络服务服务器

Tomcat是什么?
	Tomcat是符合JavaEE规范的一个服务器【软件】
	一个计算机安装了Tomcat服务器软件之后,可以对外提供网络服务,就可以认为是一个服务器。
	1. 免费
	2. 开源
	3. 满足基本的JavaEE规范,可以提供服务JavaWEB要求的服务器环境
	
	JBoss收费 ... 公司自行研发的服务器软件
2.2 Tomcat服务器的安装和启动
请将 apache-tomcat-8.5.41.zip Tomcat 8.5.41 压缩包 解压到一个你自己能够找到的【非中文路径下】,并且不能在C盘

找到Tomcat路径下的bin目录
	startup.bat 开启Tomcat服务器软件的Windows批处理文件
	shutdown.bat 关闭Tomcat服务 Windows批处理文件

startup.bat 开启tomcat服务器,不允许关闭对应的小黑框,程序炸了自行承担结果
验证Tomcat服务器启动OK
	localhost:8080 看到三脚猫!!!

关闭Tomcat服务器需要使用shutdown.bat
2.3 Tomcat启动问题
1. 关不掉
	Windows 10小bug
	明确当前Tomcat服务器没有执行其他操作,可以使用X号关闭,之后正常

2. 闪退
	Tomcat服务器底层源代码是基于Java完成的,执行Tomcat服务器,需要对应的Java环境,闪退是因为JDK环境变量配置问题!!!
	a. JDK路径配置错误
	b. JDK安装出现问题
2.4 Tomcat路径解释和注意文件
bin
	binary 二进制文件目录
	需要了解和关注的文件
		startup.bat startup.sh
		shutdown.bat shutdown.sh
	
conf
	configuration 配置文件路径
	server.xml 整个Tomcat服务器配置文件
	web.xml Tomcat部署JavaWEB项目的【母版】配置文件
	
lib
	library 库文件
		Tomcat服务器运行或者说支持JavaWEB项目运行所需的Jar包
		serlvet-api.jar jsp-api.jar el-api.jar
		
logs
	日志目录
	【日志很重要】
	
temp
	临时目录,保存一些必要的缓存文件
	
webapps
	JavaWEB项目存放目录
	
work
	工作临时目录,后期处理到JSP文件时,可以参考
2.5 IDEA配置Tomcat,并创建第一个JavaWEB项目
2.6 JavaWEB项目目录结构
JavaWEB Project Name
--| src Java源代码路径
--| web JavaWEB项目根目录
----| 静态资源目录,可以存放HTML文件,JSP文件,CSS文件,JS文件,还有其他的一些静态资源目录或者文件
----| WEB-INF 该目录资源不能直接访问,需要通过web.xml配置之后才可以使用
------| web.xml 整个JavaWEB项目配置文件
------| lib 当前JavaWEB项目所需的第三方Jar目录
------| classes src路径下Java文件编译生成的.class文本保存目录 

JavaWEB项目目录结构

2.7 IDEA配置JavaWEB项目和启动验证

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. Servlet【重点 撒花!!!】
3.1 Servlet介绍
Java提供给程序员操作JavaWEB动态资源一种方式,可以从前端获取用户提供的数据,并且可以使用Java后台代码完成操作,返回数据。

Servlet ==> Java Server Applet Java服务器程序
3.2 第一个Servlet程序
3.2.1 web.xml配置Servlet程序
package com.qfedu.a_servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 当前类继承HttpServlet,完成HttpServlet中的doGet和doPost方法
 * 就可以看作是一个Servlet程序
 */
public class TestServletDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 向前端页面发送一个字符串
        resp.getWriter().append("<h1>Welcome to Servlet World</h1>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*
         执行调用当前TestServletDemo1内的doGet方法,不管
         浏览器请求的是Post还是Get都是同一个处理方式
        */
        doGet(req, resp);
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <!--  Servlet程序配置文件  -->
    <servlet>
        <!-- 要求和servlet-mapping中的servlet-name子标签内容一致 -->
        <servlet-name>TestServletDemo1</servlet-name>
        <!-- 告知服务器当前Servlet-name对应的程序是指向哪一个Java文件,或者说是哪一个类 -->
        <servlet-class>com.qfedu.a_servlet.TestServletDemo1</servlet-class>
    </servlet>

    <!--  Servlet程序映射  -->
    <servlet-mapping>
        <!--
        Servlet程序的名字,通常是Servlet对应的类名
        要求和Servlet标签内的servlet-name子标签内容一致
         -->
        <servlet-name>TestServletDemo1</servlet-name>
        <!--
        通过URL请求的资源名
        http://localhost:8080/Day29_SL/test1
        -->
        <url-pattern>/test1</url-pattern>
    </servlet-mapping>
</web-app>

在这里插入图片描述

3.2.2 使用@WebServlet注解完成Servlet程序,要求web3.1以上
package com.qfedu.a_servlet;

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 java.io.IOException;

/**
 * 使用注解方式告知服务器,当前Java程序对应的是哪一个资源名
 * http://localhost:8080/Day29_SL/test2
 * 对应的就是当前资源
 */
@WebServlet("/test2")
public class TestServletDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().append("<h1>布达佩斯大饭店</h1>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
3.3 web.xml 和@WebServlet优缺点
web.xml
优点:
	1. 严谨,可以利用web.xml基本的XML文件语法约束要求,避免servlet程序映射冲突问题。
	2. 权重比较高!!!
缺点:
	1. 操作麻烦
	2. 阅读性较差
	
@WebServlet
优点:
	1. 简单,明了
缺点:
	1. 出现了资源名名字冲突情况下,只有在Tomcat服务器启动加载时出现问题,无法做到错误前置。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值