木舟0基础学习Java的第二十五天(JavaWeb)

news2024/11/15 10:33:37

XML 概念和体系

XML指可扩展标记语言(EXtensible Markup Language)

XML没有预定义标签 需要自定义标签 <标签></标签>

XML特点

XML数据以纯文本格式存储

实现不同应用程序之间的数据通信

实现不同平台数据通信

实现不同平台的数据共享

使用XML将不同的程序 不同的平台联系起来

XML作用

数据存储和数据传输

可以用来做配置文件

Javaee开发中用XML来做配置文件 SSM DUBOO 分布式框架等等

XML和HTML的差异

HTML中的标签是已经设计好的 需要学习使用

XML中的标签为自定义的 以<标签><标签/>格式定义即可

XML模板和注意事项

<?xml version="1,0" encoding="utf-8" ?>
<!--声明必须写在第一行,对当前xml文档进行约定-->
<!--version:指定解析当前xml文件 解析器的版本为1.0-->
<!--encoding:当前文档的编码类型 文档编码要和保存文件时的编码一致 不然会乱码-->

<!--有两个学生 张三和李四 姓名 年龄 学号-->
<stus>
    <stu>
        <name>张三</name>
        <age>23</age>
        <desc><![CDATA[<a href="http://www.baidu.com">点击跳转页面</a>]]></desc><!--一般不会这么写-->
    </stu>
    <stu>
        <name>李四</name>
        <age>24</age>
    </stu>
</stus>

1.有且只有一个根元素

2.xml文档声明必须放在第一行

3.所有标签必须成对出现

4.标签严格区分大小写

5.元素可以嵌套其他元素

6.属性值必须加引号

XML元素

元素是指开始标签到结束标签的部分

一个元素中可以包含:其他元素 普通文本 属性 以上的混合

读取XML文件

方法1

dom4j-1.1.jar

public class mainTest {
    public static void main(String[] args){
        try {
            System.out.println("hello word!");
            //创建读取对象
            SAXReader reader=new SAXReader();
            //指定解析的xml源     reader.read(new File("src/com/muzhou/xml/stus.xml")).var;
            Document document = reader.read(new File("src/com/muzhou/xml/stus.xml"));
            //得到根元素 root    document.getRootElement().var;
            Element rootElement = document.getRootElement();
            /*System.out.println(rootElement.getName());//stus
            System.out.println(rootElement.element("stu").getName());//stu
            System.out.println(rootElement.element("stu").element("name").getName());//name
            System.out.println(rootElement.element("stu").element("age").getName());//age
            System.out.println(rootElement.element("stu").element("name").getText());//张三
            System.out.println(rootElement.element("stu").element("age").getText());//23
            System.out.println(rootElement.element("stu").element("name").getStringValue());//张三*/
            List<Element> elements = rootElement.elements();
            for (Element e : elements) {
                String name=e.element("name").getText();
                String age=e.element("age").getText();
                System.out.println(name+"---"+age);
            }
        } catch (DocumentException e) {
            throw new RuntimeException(e);
        } catch (MalformedURLException e) {
            throw new RuntimeException(e);
        }
    }
}

方法2

jaxen-1.1.2.jar

public class XpathTest {
    public static void main(String[] args) {
        try {
            SAXReader reader=new SAXReader();
            Document document = reader.read(new File("src/com/muzhou/xml/stus.xml"));
            Element rootElement = document.getRootElement();
            //Xpath
            Element element =(Element) rootElement.selectSingleNode("//desc");
            System.out.println(element.getText());
            List<Element> list= element.selectNodes("//name");
            for (Element element1 : list) {
                System.out.println(element1.getText());
            }
        } catch (DocumentException e) {
            throw new RuntimeException(e);
        } catch (MalformedURLException e) {
            throw new RuntimeException(e);
        }
    }
}

TOMCAT

下载tomcat免安装版 解压

找到conf-logging.properties修改

将GBK 修改为 UTF-8

找到bin目录下startup.bat 测试是否可以连接

如果打不开或闪退 

先检查环境变量JAVA_HOME配置的jdk是否正确

还是闪退就在startup.bat头上加这两句

SET JAVA_HOME=E:\Java\Jdk     //jdk配置的地址
SET TOMCAT_HOME=E:\tomcat\apache-tomcat-9.0.37     //tomcat配置的地址

WEB

IDER最新版创建web项目

1.先创建一个普通项目

2.鼠标右键项目名,后点击 Add Framework Support(添加项目支持)

3.依次点击 Edit Configurations… >> Add new… >> Tomcat Serve 下的 Local,而后点击OK

4.依次点击页面中的 Deployment >> + >> Artifact… 后点击OK

项目需要继承HttpServlet 重写service方法

@WebServlet("/loginUser")
public class LoginServlet extends HttpServlet {
    @Override//只用来处理get请求 一般不写 因为继承了HttpServlet重写了service方法 service方法中包含了该方法
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet被调用了");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("service方法");
        String uname = req.getParameter("uname");
        String pwd = req.getParameter("pwd");
        System.out.println(uname+"---"+pwd);
        //模拟数据校验
        if("admin".equals(uname) && "123456".equals(pwd)){
            //给浏览器响应数据
            resp.getWriter().write("success");
        }else{
            resp.getWriter().write("fail");
        }
    }

    @Override//只用来处理post请求 一般不写 因为继承了HttpServlet重写了service方法 service方法中包含了该方法
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doPost被调用了");
    }
}
@WebServlet("/myweb")//这个注解是告诉浏览器访问当前java类的网络地址名称
public class MyServlet extends HttpServlet {//HttpServlet可以基于tomcat服务器开发的java程序
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //resp在浏览器上响应数据
       resp.getWriter().write("this is my first web project");
       //req用来接受浏览器上提交的数据
        String uname = req.getParameter("uname");
        System.out.println("服务器收到浏览器发送的数据:"+uname);
    }
}

 

修改js基础配置模板

Settings>>Editor>>Code Style>>File and Code Templates>>Other>>JSP files>>jsp File.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String path = request.getContextPath(); //获取当前工程的根目录
String basePath = request.getScheme() + "://" + request.getServerName() + ":"+ request.getServerPort();
%>
<html>
<head>
<base href="<%=basePath%>"><!--这个让此文件下的路径都相对于当前工程开始-->
<title>Title</title>
</head>
<body>
</body>
</html>

jsp连接servlet

方法1:配置文件

 <servlet>
        <servlet-name>bbb</servlet-name>
        <servlet-class>com.muzhou.MyWeb</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>bbb</servlet-name>
        <url-pattern>/bbb</url-pattern>
    </servlet-mapping>

方法2:注释连接  @WebServlet("/aaa")

//生命周期 init>service>destroy
//init 在程序第一次被调用时执行 只能执行一次
//service 每次程序被调用时都会执行
//destroy 在程序结束时或移除项目时执行一次
@WebServlet("/aaa")
public class MyWeb extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doget");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        String name=req.getParameter("uanme");
        String pwd =req.getParameter("pwd");
        if("admin".equals(name)&&"123456".equals(pwd)){
            resp.getWriter().write("登录成功");
        }else{
            resp.getWriter().write("登录失败");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("dopost");
    }
    //初始化
    @Override
    public void init() throws ServletException {
        System.out.println("程序开始时:初始化");//只会被调用一次
        //如果项目部署数据量大时 可以在配置文件中配置<load-on-startup>2</load-on-startup>
        //让init方法提前被调用 配置load后init的生命周期变为 从服务器开启到服务器关闭一直被调用
    }
    //销毁
    @Override
    public void destroy() {
        System.out.println("程序结束时:销毁");//服务器停止时调用该方法
    }
}

servlet进网站的错误

404 资源未找到 原因:请求地址中servlet别名书写错误或者项目名称拼写错误

500 内部服务器错误 原因:Java代码有误

或者报错:classnotfoundexception:com.my.servlet.myservlet

原因1:web.xml 全限定路径有误<servlet-class>com.web.MyServlet</servlet-class>

原因2:service 方法体service(req,resp)代码执行错误

405 请求方式不支持 与servlet中的方法不匹配 尽量使用service方法处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2055475.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux------Cortex-A架构的处理器运行模型与其寄存器组

寄存器组分为 外设寄存器组 比如&#xff1a;和总线相连的io寄存器&#xff0c;usart配置寄存器&#xff0c;spi配置寄存器等等 内核寄存器组&#xff1a;R0-R15 CPSR SPSR一共18个寄存器组&#xff0c;内核寄存器组用来记录当前程序地址状态&#xff0c;当前执行指令等&a…

8月来得及|1000/660/880题45天带刷计划!

刷题不在于多&#xff0c;而在于精 你选的这几本题集没有问题&#xff0c;660题专门训练客观题&#xff0c;880题和1000题都是不错的综合性题集&#xff0c;特别适合在强化阶段进行刷题训练&#xff0c;但是问题是你做这么多题&#xff0c;也不一定能起到多好的作用。 刷题的…

Linux | 进程概念详解:冯诺依曼体系结构、进程基本概念、PCB、进程组织、fork()创建子进程、进程运行逻辑

文章目录 进程概念1、冯诺依曼体系结构2、进程2.1基本概念2.2描述进程-PCB2.3组织进程2.4查看进程2.5通过系统调用获取进程标识符2.6通过系统调用创建进程-fork初识头文件与返回值fork函数的调用逻辑和底层逻辑 进程概念 1、冯诺依曼体系结构 目前我们认识的计算机中&#xff…

dm 到 dm 的 HS 同步部署

一、数据库部署 完成两节点数据库部署并初始化&#xff0c;配置参数如下&#xff1a; 节点 192.168.2.132 192.168.2.133 数据库版本 DM8 DM8 实例名 DM1 DM2 端口号 5236 5236 数据文件路径 /home/dmdba/dmdata /home/dmdba/dmdata 二、 dmhs 部署 1. 部署…

户外无线麦克风哪个牌子好,领夹麦克风十大品牌排行榜推荐

​为了在数字时代的浪潮中有效传达自己的思想和感情&#xff0c;选择合适的声音工具变得尤为重要。无线领夹麦克风就是这样一种工具&#xff0c;它能够帮助我们在任何环境下都保持最佳的语音传递效果。经过慎重考虑和市场调研&#xff0c;我为大家推荐几款性能卓越且价格合理的…

测试报告----功能测试

目录 一、项目背景 二、项目功能 &#xff08;1&#xff09;页面1&#xff1a;用户注册 &#xff08;2&#xff09;页面2&#xff1a;登陆页面 &#xff08;3&#xff09;页面3&#xff1a;信息主页 &#xff08;4&#xff09;页面4&#xff1a;详情页面 ​编辑&#xf…

获取当前路由器的外网IP(WAN IP)

GPT-4o (OpenAI) 获取当前路由器的外网IP&#xff08;WAN IP&#xff09;可以通过以下几种方法&#xff1a; 1. 访问路由器管理页面&#xff1a; - 通常路由器的管理页面可以通过在浏览器中输入路由器的IP地址来访问&#xff08;例如&#xff0c;192.168.0.1 或 192.168.1…

接口基础知识9:详解response body(响应体)

课程大纲 一、定义 HTTP响应体&#xff08;HTTP Response Body&#xff09;&#xff1a;服务器返回给客户端的数据部分&#xff0c;‌它包含了服务器对客户端请求的响应内容&#xff08;如客户端请求的资源、客户端请求的执行结果&#xff09;。 与请求类似&#xff0c;HTTP …

使用python实现3D聚类图

实验记录&#xff0c;在做XX得分预测的实验中&#xff0c;做了一个基于Python的3D聚类图&#xff0c;水平有限&#xff0c;仅供参考。 一、以实现三个类别聚类为例 代码&#xff1a; import pandas as pd import numpy as np from sklearn.decomposition import PCA from sk…

【Prometheus】监控系统

目录 一.Prometheus概述 1.Prometheus的认识与了解 2.Prometheus的特点 3.Prometheus存储引擎 TSDB 的特点优势 4.Prometheus 的生态组件 Prometheus server Client Library Exporters Service Discovery Alertmanager Pushgateway Grafana 5.Prometheus 的…

二叉树(四)

一、二叉树的性质 二、练习 1.某二叉树共有399个节点&#xff0c;其中有199个度为2的节点&#xff0c;则二叉树中的叶子节点数为&#xff08; &#xff09;。 A.不存在这样的树 B.200 C.198 D.199 答案&#xff1a;B 参考二叉树的性质第三条 2.在具有2…

如何将系统/数据/程序从一个硬盘驱动器迁移到另一个硬盘驱动器

何时需要硬盘迁移软件 大多数时候&#xff0c;计算机用户考虑迁移硬盘的原因是&#xff1a; 旧硬盘太小&#xff0c;无法存储不断增加的数据&#xff0c;您需要将这些数据转移到更大的硬盘上。 您购买了比当前硬盘更大更快的新硬盘&#xff0c;并且想要将程序和数据移动到新硬…

数据库分库分表的介绍

为什么要分库分表 把存于一个库的数据分散到多个库中&#xff0c;把存于一个表的数据分散到多个表中。如果说读写分离是为了分散数据库读写操作压力&#xff0c;分库分表就是为了分散存储压力&#xff0c;一般情况下&#xff0c;单表数据量到达千万级别&#xff0c;就可以考虑…

怎么才能真正学好网络安全?一文搞懂网络安全体系

文章目录 前言 网络安全研发具体干什么&#xff1f;二进制安全具体干什么&#xff1f;网络渗透具体干什么&#xff1f;网络渗透方向的工作有下面几个方向&#xff1a;网络安全的学习路线网络安全的学习路线大纲网络安全初体验学习方法 如何入门学习网络安全【黑客】 【----帮助…

suricata编译安装和运行

目录 编译安装 运行 调试 编译安装 apt -y install autoconf automake build-essential cargo \ libjansson-dev libpcap-dev libpcre2-dev libtool \ libyaml-dev make pkg-config rustc zlib1g-dev apt-get install libpcre3-dev wget https://www.openin…

Python编码系列—Python数据可视化:Matplotlib与Seaborn的实战应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

google浏览器chrome用户数据(拓展程序,书签等)丢失问题

一、问题背景 我出现这个情况的问题背景是&#xff1a;因为C盘块满了想清理一部分空间&#xff08;具体看这&#xff1a;windows -- C盘清理_c盘softwaredistribution-CSDN博客&#xff09;&#xff0c;于是找到了更改AppDatta这个方法&#xff0c;但因为&#xff0c;当时做迁移…

ZooKeeper 的四种 Znode (数据节点)类型

ZooKeeper 的四种 Znode &#xff08;数据节点&#xff09;类型 1. PERSISTENT&#xff08;持久节点&#xff09;2. EPHEMERAL&#xff08;临时节点&#xff09;3. PERSISTENT_SEQUENTIAL&#xff08;持久顺序节点&#xff09;4. EPHEMERAL_SEQUENTIAL&#xff08;临时顺序节点…

Zookeeper 如何保证事务的顺序一致性

Zookeeper 如何保证事务的顺序一致性 1、ZXID&#xff1a;唯一事务标识2、两阶段提交协议3、同步与复制 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Apache ZooKeeper 通过几个关键机制来确保事务的顺序一致性&#xff0c;这些机制包括全…

【正点原子K210连载】第三十一章 视频播放实验 摘自【正点原子】DNK210使用指南-CanMV版指南

1&#xff09;实验平台&#xff1a;正点原子ATK-DNK210开发板 2&#xff09;平台购买地址https://detail.tmall.com/item.htm?id731866264428 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第三十一章 视频播放…