JavaEE

D01 html

补全前面对象:
ctrl+2+l

01-01 html入门

html是第一门网页制作语言,最简单的一门语言。hyperText Markup Language 超文本标记语言。
html语言由标记组成。学习html语言,掌握一些常用的标记即可!

Hello World sunyang

html语法: 2.1 基本结构: --文件头(用户在浏览器看不到) --文件体(用户在浏览器的主体看得到) 2.2 head文件头 作用:告诉浏览器如何解释该html页面 This is a title 你好

01-02 文本标签

2.3 文本标签
标题(h1~h6):
	
	
	

标题1

标题2

标题3

标题4

标题5
标题6
水平线(hr): 段落(p) 段落缩进(blockquote) 上下标(sup和sub) 换行(br) 原样输出(pre) 有序列表ol li 无序列表ul li 项目列表标签(dl dt dd) 行内标签(span) 块标签
-------------------------------------

标题1

标题2

标题3

标题4

标题5
标题6

用户在浏览器看不到用户在浏览器看不到用户在浏览器看不到用户在浏览器看不到用户在浏览器看不到用户在浏览器看不到用户在浏览器看不到用户在浏览器看不到用户在浏览器看不到

用户在浏览器的主体看得到用户在浏览器的主体看得到用户在浏览器的主体看得到用户在浏览器的主体看得到用户在浏览器的主体看得到用户在浏览器的主体看得到用户在浏览器的主体看得到

段落缩进段落缩进段落缩进段落缩进段落缩进段落缩进段落缩进段落缩进段落缩进段落缩进段落缩进段落缩进段落缩进段落缩进段落缩进段落缩进段落缩进段落缩进段落缩进段落缩进
数学公式:x的平方:y=x2 水的化学式:H2O
葡萄美酒夜光杯,
欲饮琵琶马上催。
		 凉州词
葡萄美酒夜光杯,欲饮琵琶马上催。
最喜欢的明星?
  1. 凤姐
  2. 张杰
  3. 如花
  1. 凤姐
  2. 张杰
  3. 如花
  • 凤姐
  • 张杰
  • 如花
  • 凤姐
  • 张杰
  • 如花
学生管理系统
  • 学生管理
  • 成绩管理
  • 系统管理
技术总监
工程师1
工程师2
财务总监
财务1
财务2
span的内容
div的内容
-------------------------------------

JavaEE_第1张图片

JavaEE_第2张图片

在这里插入图片描述

01-03 超链接




超链接地址
链接到图片
链接到百度

JavaEE_第3张图片

http协议流程:
JavaEE_第4张图片




超链接地址
链接到图片
链接到百度
去到底部





























在第一章。。。 返回顶部 1、在body第一行写: 2、在需要的地方写: 返回顶部 不同页面跳转打锚点: 1、在html文本标签.html中打点, 2、超链接地址

01-04 图像和表格标签



替代文字

  
  
  
  


JavaEE_第5张图片

2.6 转义字符:

JavaEE_第6张图片

2.7 表格标签

原始代码:
2018期末总成绩
姓名 班级 成绩
孙1 机1 100
孙1 算1 90
孙2 机2 90
孙3 机3 80

行合并前:
JavaEE_第7张图片
行合并后:
JavaEE_第8张图片

	
        孙1
        机1
        100
    
    	
        孙1 
        算1
        90
    

列合并:

    
        平均分
	    
        85
    

JavaEE_第9张图片
01-05 表单标签1
JavaEE_第10张图片

01-06 表单标签2

作用:采集用户输入信息,提交给后台处理




用户名:
密码:
男:女:
足球:篮球:乒乓:
下拉选项:
隐藏域。特点:不会显示到html页面,但是可以携带数据
文件选择器:
提交按钮:
按钮:
重置:
多行输入域:

JavaEE_第11张图片
D02 CSS
02-01框架标签
JavaEE_第12张图片

框架标签需要放在body外面

    
       
    	
        
       
    



  • 学生管理
  • JavaEE_第13张图片
    02-02 css使用方法

    全称CSS(Cascading Style Sheet) 样式
    作用:网页的美化
    
    
    
    css使用方法
    
    
    
    
    超链接
    超链接
    超链接
    
    	1)行内样式
    	注意:
    		1)使用标签的style属性进行css控制,css写在style属性值中
    		2)弊端:只能控制一个标签的样式
    		超链接
    	2)内部样式
    		注意:
    		1)使用style的标签进行css控制,css内容写在style标签体内
    		2)一次控制多个标签的样式
    		3)和html标签混杂在一起,不好维护。css内容无法在多个html页面中重用
    		
    	3)外部样式(推荐使用)
    		注意:
    		1)建立独立后缀为css的文件,css内容写在该文件中
    		2)在使用css的html页面中,导入外部css文件
    		
    		
    例子:
    1、创建xx.css文件
    @charset "utf-8";
    /* CSS Document */
    	a{
    		font-size:24px;
    		color:#0F0;
    	}
    2、创建html引入样式
    
    
    css使用方法
    
    
    
    

    02-03 css选择器

    
    
    
    
    
    div的内容1
    div的内容2
    div的内容3
    div的内容4
    内部的span
    外部的span 超链接

    02-04 css常用属性

    文本:
    
    
    今天天气不错!
    
    
    字体:
    
    背景:
    
    列表:
    
    
    
    
    系统菜单
    
    • 学生管理
    • 教师管理
    • 课程管理
    表格:
    2014年期末考试成绩单
    姓名 班级 成绩
    sun1 sun1 sun1
    边框:
    div1

    02-05 盒子模型

    
    
    
    
    div1
    div2

    JavaEE_第14张图片
    02-06 定位

    
    
    
    
    QQ登录页面
    
    
    
    
    
    
    
    用户名:
    密    码:

    JavaEE_第15张图片

    
    

    JavaEE_第16张图片
    JavaEE_第17张图片
    02-07 JavaScript入门

    作用:用户和浏览器交互
    小程序:
    
    
    
    
    QQ登录页面
    
    
    
    
    
    
    用户名:
    密    码:

    D03 JavaScript

    1、直接写在html文档
    
    /*2、导入外部js文件*/
    
    

    03-01 JavaScript数据类型和运算符

    1、EMCA 基础语法
    2、BOM编程
    3、DOM编程
    
    
    
    类型的转换函数:
    string->number
    /*
    1、定义和赋值变量: var 变量名=值
    注:var可要可不要,不建议省略
    2、在js中可以重复定义变量,以后面定义的变量会覆盖前面
    3、数据类型: number string boolean object
    4、如果var h;未赋值,undefined,不会默认赋值,js中变量的类型是由变量的值决定
    */
    var a = 10;
    var b = 10;
    document.write("a的值为:"+a+",a的数据类型:"+typeof(a)+"
    "); var c = 3.14; document.write("a的值为:"+c+"
    "); var d = 'd'; document.write("d的值为:"+d+"
    "); var e = true; document.write("e的值为:"+e+"
    "); var f = new Object(); document.write("f的值为:"+f+"
    "); var g = "hello"; document.write("g的值为:"+g+"
    "); /*string->int*/ var a = "10"; document.write("a的类型"+typeof(a)); a = parseInt(a); document.write("a的类型"+typeof(a)); /*转换失败*/ var b = "a10"; document.write("b的类型"+typeof(b)); b = parseInt(b); document.write("b的类型"+typeof(b)); /*转换成功,如果转换的第一个类型是数字就可转换,直到遇到未数字为止停止*/ var c = "10a"; document.write("c的类型"+typeof(c)); c = parseInt(c); document.write("c的类型"+typeof(c)); /*string->float*/ var d = "3.14"; d = parseFloat(d); document.write("d的类型"+typeof(d)); 运算符: /*算术运算符 + - ^ / % true=1,false=0*/ var a = 10; var b = true; document.write("结果为:"+(a*b)+"
    "+"10"); document.write("结果为:"+(a+b)+"
    "+"11"); var a = 10; var b = 20; document.write("结果为:"+(a*b)+"
    "+"200"); document.write("结果为:"+(a+b)+"
    "+"30"); /*比较运算符 > < >= <= == */ var a = 10; var b = 20; document.write("结果为:"+(a>b)+"
    "); document.write("结果为:"+(a"); document.write("结果为:"+(a=b)+"
    "); /*逻辑运算符 && || ! */ /*三目运算符 (a>b)? true:false */ /*a=b,将b的值赋给a*/

    03-02 流程控制语句1
    03-03 流程控制语句2

    
    

    03-04 函数

    	/*
    	函数定义1
    		function add(a, b) {
    		var result = a + b;
    		document.write("结果为:"+result);
    	}
    	调用1
    	add(10,20);
    	*/
    	function add(a, b) {
    		var result = a + b;
    		document.write("结果为:"+result);
    		return result;
    	}
    	
    	add(10,20);
    	
    	/*可以有返回值*/
    	function add(a, b) {
    		var result = a + b;
    		document.write("结果为:"+result);
    		return result;
    	}
    	
    	var s = add(10,20);
    	
    	/*没有重载的概念*/
    	/*js中形式参数的数量和实际参数数量不一致也可以*/
    	/*js的每个函数中都隐藏一个arguments的数组,这个数组用于接收函数调用时传递过来的实际参数值*/
    	function add(a, b) {
    		for(var i=0;i

    03-05 函数练习

    
    
    
    
    请输入一个月份:
    

    03-06 内置对象

    
    
    时钟案例:
    
    当前时间为:
    
    
    
    /*
    方法1:创建数组
    方法2:不指定长度
    */
    var arr = new Array(3);
    //给数组赋值
    arr[0]=10;
    
    var arr = new Array();
    alert(arr.length);
    
    var arr = new Array();
    arr[0]=10;
    arr[1]="hello";
    arr[2]=true;
    
    for(var i=0;i

    03-07 自定义对象

    
    
    /*定义对象方法2 无参的构造函数*/
    function Person(){}
    var p = new Person();
    p.name="xxx";
    p.age=14;
    p.haha=function(){
    	alert("追加属性和方法");
    }
    
    /*定义对象方法3 使用Object对象*/
    var p = new Object();
    p.name="xxx";
    p.age=14;
    p.haha=function(){
    	alert("追加属性和方法");
    }
    
    /*定义对象方法4 使用自变量形式*/
    var p = {
    	//定义属性
    	"name":"gousheng",
    	"age":23,
    	//定义方法
    	"say":function(){
    		alert("444");	
    	}
    };
    

    03-08 自定义对象练习

    js:
    // JavaScript Document
    /*
    设计一个数组工具类对象,例如ArrayUtils对象,该对象提供以下两个方法:
    		search(array,str):传入指定的数组和指定的字符串,返回指定字符串所在的位置
    		max(array):传入指定的数组,返回该数组中的最大值
    */
    
    function ArrayUtils(){
    	//定义方法
    	this.search=function(array,str){
    		for(var i=0;imax){
    				max=array[i];	
    			}
    		}
    		return max;
    	}	
    }
    
    调用:
    
    
    
    

    03-09 BOM编程入门

    给内置对象追加方法:
    
    
    作业:
    1、使用原型给String对象添加两个方法
    toCharArray() 返回当前字符串的字符数组
    reverse() 返回反转后的字符串
    helloworld
    dlrowolleh
    
    /*
    给String对象,添加两个方法:
    	toCharArray() 返回字符数组
        reverse() 反转字符串的内容
    */
    
    

    D04

    2.1 BOM编程
    BOM是(Broswer Object Model)
    什么是BOM编程?
    通过JavaScript提供的4个对象操作浏览器,就是BOM编程。
    浏览器在加载这个html文件时,JavaScript引擎会把浏览器的各个部分的信息封装到对象中,浏览器
    会分为以下几个对象:
    窗口:window对象
    地址栏:location对象
    历史记录栏:history对象
    整个屏幕:screen对象
    

    JavaEE_第18张图片

    04-01 window和location对象

    1.1 入门
    BOM就是浏览器对象模型编程,通过JavaScript引擎提供的四个浏览器对象,操作浏览器。
    1.2 window对象
    window代表一个窗口
    
    
    
    
    超链接
    
    
    
    
    
    1.4 history对象
    history对象表示窗口的历史记录栏
    
    
    
    
    
    跳转到练习
    
    
    
    1.5 screen对象
    代表是一个屏幕
    
    

    04-02 事件编程

    2.1 回顾javase的事件编程
    GUI编程三个要素:
    事件源:按钮、JButton JFrame
    事件:KeyEvent WindowEvent
    监听器:KeyListener WindowListener
    
    GUI编程具体的步骤:
    1、创建事件源
    2、编写监听器
    3、在事件源上注册监听器
    
    JavaScript事件编程:
    1、事件源:html标签 按钮、下拉框、输入域
    2、事件:click、dblclick mouseover
    3、监听器:函数
    
    事件编程
    
    
    
    
    
    
    事件:
    
    
    
    
    
    
    
    
    提示信息
    
    籍贯 城市选择案例: 请选择籍贯:
    省: 市: 鼠标相关: function testOut(){ alert("鼠标移出"); } function testOver(){ alert("鼠标经过"); }
    页面加载相关 //事件是在加载完标签后再触发,通常用在body里 function testLoad(){ alert("触发了onload方法");

    04-03 DOM编程入门

    DOM编程:Document Object Model 文档对象编程
    在浏览器加载完html页面的时候,JavaScript引擎把整个html页面的所有html标签封装成对象,通过这些
    标签对象来操作(控制)html页面的显示效果。
    JavaScript引擎加载完html页面后,会把每个标签封装成对象,这些标签对象形成一个树状结构
    步骤:
    1、找到需要控制的标签对象
    2、通过标签对象的属性和方法改变标签
    

    04-04 查询标签对象方法

    /*
    all:获取所有标签对象
    forms:获取form标签对象
    images:获取img标签对象
    links:获取a标签对象
    */
    var nodeList = document.all;
    for(var i=0;i");
    		}
    	}
    	
    	var firstChild = formNode.firstChild;
    	alert(firstChild.nodeName);
    	
    	var lastChild = formNode.lastChild;
    	alert(lastChild.nodeName);
    	
    	var next = document.nextSibling;
    	alert(next.nodeName);
    	
    	var pre = document.previousSibling;
    	alert(pre.nodeName);
    
    通过document方法查询标签对象,三种方式
    
    用户名:
    
    
    

    04-05 设置标签属性

    修改标签对象的属性:
    
    
    
    
    
    
    
    

    04-06 设置标签属性练习
    04-07 动态表格案例

    	//标签对象的方法
    	//添加相关的:
    	function add(){
    		var input = document.createElement("input");	
    		input.setAttribute("type","button");
    		input.setAttribute("value","按钮");
    		插入相关的:
    		var mBody = document.getElementsByTagName("body")[0];
    		//mBody.appendChild(input);
    		//新的按钮对象加入到btn按钮前面
    		var isnert = document.getElementById("insert");
    		//参1 新的对象 参2 插入到前面的对象
    		mBody.insertBefore(input,insert);
    	}
    标签对象的方法:动态表格案例
    
    
    
    编号 姓名 密码
    1

    04-08 正则表达式

    
    
    
    
    
    
    用户名:
    密  码:
    确  认:
    邮  箱:

    D05
    05-02 xml作业

    HTML:超文本标记语言
    1、标签不区分大小写
    2、标签可以不匹配
    
    由w3c组织,针对html的语法缺陷,设计了xml语言
    1.2 XML语言
    xml,Extend Markup Lanuage 可扩展标记语言
    描述带关系的数据结构(作为软件的配置文件)
    作用:
    1、配置文件
    2、数据库
    

    05-03 xml语法

    
    css:
    student{
    	width:100px;
    	height:100px;
    	background-color:red;
    	font-size:50px;
    }
    xml:
    
    
    
    	张三
    	20
    
    

    JavaEE_第19张图片

    05-04 _dom4j读取xml文件

    定义xml:根标签只有一个
    
    
    
     
     
     	
     		wangwu
     	
     	
     		tianliu
     	 
     
    4 xml解析:
    4.1解析方式
    1、DOM解析:JavaScript的DOM,基于对象的编程
    
    2、SAX解析:
    4.2 DOM解析的工具(叠加开发工具)
    sun官方jaxp工具
    jdom工具
    dom4j工具,三大框架读取xml文件的程序
    

    JavaEE_第20张图片

    4.3 dom4j工具使用
    1、下载dom4j-1.6.1.jar
    2、导入jar
    

    JavaEE_第21张图片

    删除jar
    

    JavaEE_第22张图片
    05-05 _dom4j读取标签和属性

    contact.xml
    
     
     	
     		wangwu
     	
     	
     		tianliu
     	 
     
    main()
            SAXReader reader = new SAXReader();
            File file = new File("./src/contact.xml");
            Document document = reader.read(file);
    
    遍历集合3种方式:
    			List elementsList = rootElement.elements("contact");
    			//遍历list
    			for(int i=0;i it = elementsList.iterator();
    			while(it.hasNext()) {//判断是否有下一个元素
    				Element next = it.next();
    			}
    			
    	        SAXReader reader = new SAXReader();
    			File file = new File("./src/contact.xml");
    			Document doc = reader.read(file);
    			//读取属性
    			Element conElem = doc.getRootElement().element("contact");
    			//获取标签上的属性
    			String id = conElem.attributeValue("id");
    			System.out.println(id);
    			//想拿到id=002属性
    			Element conElem2 = (Element) doc.getRootElement().elements().get(1);
    			
    			Element element = doc.getRootElement().element("contact");
    			Attribute idAttr = element.attribute("id");
    			idAttr.getName();
    			idAttr.getValue();
    			//所有属性值
    			List attributes = element.attributes();
    			for (Attribute attr : attributes) {
    				System.out.println(attr.getName()+"="+attr.getValue());
    			}
    

    JavaEE_第23张图片
    05-06 _dom4j修改xml内容

    	        SAXReader reader = new SAXReader();
    			File file = new File("./src/contact.xml");
    			Document doc = reader.read(file);
    			Element nameElem = doc.getRootElement().element("contact").element("name");
    			String name = nameElem.getText();
    			System.out.println(name);
    			
    			//通过父标签获取指定子标签的文本
    			Element element = doc.getRootElement().element("contact");
    			String nameElement = element.elementText("name");
    			
    			//xml中的空格和换行,会被作为xml的内容被解析到
    读xml:
    			//1、读取xml文件
    	        SAXReader reader = new SAXReader();
    			File file = new File("./src/contact.xml");
    			Document doc = reader.read(file);
    			//2、创建List对象
    			List list = new ArrayList<>();
    			//3、将xml-》list对象
    			//3.1读取所有contact对象
    			List conList = doc.getRootElement().elements("contact");
    			System.out.println(conList);
    			for (Element elem : conList) {
    				//3.2 创建contact对象
    				Contact con = new Contact();
    				//3.3把contact标签数据放入contact对象
    				String id = elem.attributeValue("id");
    				String name = elem.attributeValue("name");
    				con.setId(id);
    				con.setName(name);
    				//3.4把contact对象放入list对象
    				list.add(con);
    			}
    			//4、输出
    			for (Contact cont : list) {
    				System.out.println(cont.toString());
    			}
    写xml:
    			//1、先读xml
    			Document doc = new SAXReader().read(new File("./src/contact.xml"));
    			//2、修改属性值
    			
    			//3、写入xml
    			FileOutputStream fops = new FileOutputStream("e:/contact01.xml");
    			//4、设置输出格式
    			
    			//紧凑的
    			OutputFormat format = OutputFormat.createCompactFormat();
    			//OutputFormat format2 = OutputFormat.createPrettyPrint();
    			//5、设置输出编码
    			format.setEncoding("UTF-8");
    			XMLWriter xmlWriter = new XMLWriter(fops,format);
    			xmlWriter.write(doc);
    
    创建新的文档:
    			//1、创建新文档
    			Document doc = DocumentHelper.createDocument();
    			//2、添加标签
    			Element conListElem = doc.addElement("contact-list");
    			Element conElem = conListElem.addElement("contact");
    			//3、添加属性
    			conElem.addAttribute("name", "zhangsan");
    			conElem.addAttribute("id", "001");
    			FileOutputStream fops = new FileOutputStream("e:/contact01.xml");
    			//4、设置输出格式
    			//紧凑的
    			//OutputFormat format = OutputFormat.createCompactFormat();
    			OutputFormat format = OutputFormat.createPrettyPrint();
    			//5、设置输出编码
    			format.setEncoding("UTF-8");
    			XMLWriter xmlWriter = new XMLWriter(fops,format);
    			xmlWriter.write(doc);
    结果:
    
    
      
    
    
    修改:
    			//2、修改属性值
    			Element conElem = doc.getRootElement().element("contact");
    			System.out.println(conElem);
    			Attribute idAttr = conElem.attribute("id");
    			idAttr.setValue("003");
    			//方法2:如果是存在就覆盖
    			conElem.addAttribute("id", "004");
    			
    			Element nameElem = conElem.element("name");
    			nameElem.setText("lisi4");
    
    删除:
    			Element conElem = doc.getRootElement().element("contact");
    			conElem.detach();
    			//方法2
    			conElem.getParent().remove(conElem);
    			
    			//删除属性
    			Attribute idAttr = doc.getRootElement().element("contact").attribute("id");
    			idAttr.detach();
    
    

    JavaEE_第24张图片
    Java知识点复习:

    		/*
    		 * 数组:
    		 *ArrayList: 底层是数组,查询快,数组的增删慢,先挪出位置1.2
    		 *LinkedList: 底层链表,从连头查,增删快,直接接回来
    		 *Vector:线程安全的 1.1
    		 */
    		 
    		/**
    		 * 输出流:
    		 * 字符输出流
    		 * 		Writer->FileWriter/BufferedWriter
    		 * 
    		 * 		write(char c)
    		 * 		write(char[] data)
    		 * 		write(String str)
    		 * 字节输出流
    		 * 		OutputStream->FileOutputStream/BufferedOutputStream/ObjectOutputStream
    		 * 		write(byte)
    		 * 		write(byte[] data)
    		 */
    

    06-01 回顾
    06-02 xpath表达式语法详解

    之前DOM的方式:
    删除id=002的contact
    		//1、读取contact.xml
    		SAXReader reader = new SAXReader();
    		Document doc = reader.read(new File("e:/contact.xml"));
    		List conList = doc.getRootElement().elements("contact");
    		//2、删除id=002的contact标签
    		for (Element ele : conList) {
    			if(ele.attributeValue("id").equals("002")) {
    				//删除
    				ele.detach();
    				break;
    			}
    		}
    		//3、将修改后的document写出到硬盘的xml文件中
    		FileOutputStream fos = new FileOutputStream("e:/contact-w.xml");
    		OutputFormat format = OutputFormat.createPrettyPrint();
    		XMLWriter writer = new XMLWriter(fos,format);
    		writer.write(doc);
    		writer.close();
    
    1.1作用:快速地查询到xml文件中节点
    当xml层级很深时,如何快速定位到所需标签,就用的xpath技术,xpath属于dom4j插件
    1、找到jar 在dom4j库中 jaxen-1.1-beta-6.jar
    E:\javaee\tools\dom4j-1.6.1\dom4j-1.6.1\lib\jaxen-1.1-beta-6.jar
    使用xpath
    

    JavaEE_第25张图片

    使用xpath:
    		//1、读取contact.xml
    		SAXReader reader = new SAXReader();
    		Document doc = reader.read(new File("e:/contact.xml"));
    		//2、查询到id属性值为002的contact标签
    		Element conElem = (Element)doc.selectSingleNode("//contact[@id='002']");
    		//3、删除id=002的contact标签
    		conElem.detach();
    		//4、将修改后的document写出到硬盘的xml文件中
    		FileOutputStream fos = new FileOutputStream("e:/contact-w.xml");
    		OutputFormat format = OutputFormat.createPrettyPrint();
    		XMLWriter writer = new XMLWriter(fos,format);
    		writer.write(doc);
    		writer.close();
    
    xpath语法:文档:G:\架构师\javaee\day06xml\day06xml\XPathTutorial.zip
    
    

    JavaEE_第26张图片
    JavaEE_第27张图片
    JavaEE_第28张图片
    JavaEE_第29张图片
    JavaEE_第30张图片
    JavaEE_第31张图片
    JavaEE_第32张图片
    JavaEE_第33张图片
    JavaEE_第34张图片
    JavaEE_第35张图片
    JavaEE_第36张图片
    JavaEE_第37张图片
    JavaEE_第38张图片
    。。。。。。
    06-03 xpath表达式语法详解+案例
    JavaEE_第39张图片

    		//3、利用xpath方法查询xml文件
    		String xpath = "";
    		//2.1 /
    		//xpath = "/contact-list";//根标签contact-list
    		xpath = "/contact-list/contact";//根标签下的子标签contact
    		//2.2 //
    		xpath = "//contact";//选取所有contact标签(不分层次)
    		xpath = "//contact/name";//选取所有父标签是contact的name标签
    		//2.3 *
    		xpath = "/contact-list/*";//选取根标签contact-list下的子标签
    		xpath = "/contact-list//*";//选取根标签contact-list下所有标签
    		//2.4 []
    		xpath = "//contact[1]";//第一个contact标签
    		xpath = "//contact[last()]";
    		//2.5 @
    		xpath = "//@id";//选择所有id属性
    		xpath = "//contact[@id]";//所有包含id属性的标签
    		//2.6 =
    		xpath = "//contact[@id='002']";
    		//2.7 and 逻辑与
    		//选取id属性为002,且name属性为eric的contact标签
    		xpath = "//contact[@id='002' and @name='eric']";
    		//2.8 选取文本 text()
    		xpath = "//name[1]/text()";
    		xpath = "//contact[@id='001']/name[1]/text()";
    		xpath = "//name[text()='陈六']";
    		List list = doc.selectNodes(xpath);
    		for (Node node : list) {
    			System.out.println(node);
    		}
    案例:
    
    
    	
    		eric1
    		123456
    	
    	
    		eric2
    		123456
    	
    	
    		eric3
    		123456
    	
    
    
    注:未调试成功
    	//1、获取用户输入的用户名和密码
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	System.out.println("请输入用户名:");
    	String name = br.readLine();
    	System.out.println("name:"+name);
    	System.out.println("请输入密码:");
    	String pwd = br.readLine();
    	//2、在user.xml中,查找name,password标签
    	Document doc = new SAXReader().read(new File("./src/user.xml"));
    	System.out.println("doc:"+doc);
    	Element nameElem = (Element) doc.selectSingleNode("//user/name[text()='"+name+"']");
    	System.out.println(nameElem.attributeValue("name"));
    	if(nameElem != null){
    		//获取父标签
    		Element userElem = nameElem.getParent();
    		//判断password子标签的文本内容
    		String dbpwd = userElem.elementText("password");
    		if(pwd.equals(dbpwd)) {
    			System.out.println("登录成功");
    		} else{
    			System.out.println("密码错误,请重新输入");
    		}
    	} else{
    		//用户名不存在
    		System.out.println("用户名不存在");
    	}
    

    06-04 xpath案例

    		Document doc = new SAXReader().read(new File("./src/day06/personList.html"));
    		System.out.println(doc);
    		//获取title标签文本
    		Element titleElem = (Element) doc.selectSingleNode("//title");
    		System.out.println(titleElem.getText());
    		//获取tbody/tr
    		List trList = (List)doc.selectNodes("//tbody/tr");
    		System.out.println("编号\t姓名\t性别\t年龄\t地址\t电话");
    		for (Element trElem : trList) {
    			//获取第一个td内容
    			//((Element)trElem.elements("td").get(0)).getText();
    			String id = trElem.selectSingleNode("td[1]").getText();
    			String name = trElem.selectSingleNode("td[2]").getText();
    			String gender = trElem.selectSingleNode("td[3]").getText();
    			String age = trElem.selectSingleNode("td[4]").getText();
    			String address = trElem.selectSingleNode("td[5]").getText();
    			String phone = trElem.selectSingleNode("td[6]").getText();
    			System.out.println(id+"\t"+name+"\t"+gender+"\t"+age+"\t"+address+"\t"+phone+"\t");
    		
    		}
    

    06-05 sax解析原理

    xml解析方式:
    dom解析:原理xml解析引擎一次性把整个文件加载进内存,在内存创建一颗document树
    问题:大文件,使用dom解析效率低,会导致内存溢出
    编程方式:面向对象编程方式
    sax解析:原理加载一点,读取一点,处理一点。优势:占用内存比较小
    编程方式:基于事件编程方式
    2.2 SAX解析工具
    sun公司官方的sax解析工具,在jdk中包含sax解析工具的api
    2.3 SAX解析的开发步骤:
    package day06;
    
    import java.io.File;
    import java.io.IOException;
    
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    public class Demo6 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    		try {
    			//1、创建SAXParser解析对象
    			SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
    			//2、解析xml文件
    			/**
    			 * 参1:需要解析的xml文件
    			 * 参2:指定的DefaultHandler
    			 */
    			/**
    			 * 事件编程模式三要素:
    			 * 事件源:xml文件
    			 * 事件:解析到开始标签(包含属性),解析到结束标签,解析文本内容
    			 * 监听器:DefaultHandler
    			 */
    			try {
    				parser.parse(new File("./src/contact.xml"), new MyDefaultHandler1());
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		
    		
    		} catch (ParserConfigurationException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (SAXException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    	
    	private static class MyDefaultHandler1 extends DefaultHandler {
    
    		/**
    		 * 遇到开始标签触发方法
    		 * 
    		 * qName:表示当前读到的开始标签名称
    		 * attributes:属性列表
    		 */
    		@Override
    		public void startElement(String uri, String localName, String qName, Attributes attributes)
    				throws SAXException {
    			// TODO Auto-generated method stub
    			//super.startElement(uri, localName, qName, attributes);
    			System.out.println("开始标签名:"+qName);
    		}
    
    		/**
    		 * 遇到结束标签触发方法
    		 * 
    		 * qName:表示当前读到的结束标签名称
    		 */
    		@Override
    		public void endElement(String uri, String localName, String qName) throws SAXException {
    			// TODO Auto-generated method stub
    			//super.endElement(uri, localName, qName);
    			System.out.println("结束标签名:"+qName);
    		}
    
    		/**
    		 * 遇到文本内容触发此方法
    		 * 如何获取当前读到的内容
    		 * char[]:表示到目前为止读到的文本内容
    		 * 数组:长城  男  1245
    		 * start:表示当前内容的起始位置 男的位置就是start 20
    		 * length:表示当前内容的长度
    		 */
    		@Override
    		public void characters(char[] ch, int start, int length) throws SAXException {
    			// TODO Auto-generated method stub
    			//super.characters(ch, start, length);
    			//获取当前读到的内容
    			String curContent = new String(ch,start,length);
    			System.out.println(curContent);
    		}
    
    		/**
    		 * 遇到xml文档开始,只调用一次
    		 */
    		@Override
    		public void startDocument() throws SAXException {
    			// TODO Auto-generated method stub
    			super.startDocument();
    		}
    
    		/**
    		 * 遇到xml文档结尾,只调用一次
    		 */
    		@Override
    		public void endDocument() throws SAXException {
    			// TODO Auto-generated method stub
    			super.endDocument();
    		}
    	}
    }
    

    06-06 sax案例

    读出文件:
    package day06;
    
    import java.io.File;
    import java.io.IOException;
    
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    public class Demo7 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    		try {
    			//1、创建SAXParser解析对象
    			SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
    			//2、解析xml文件
    			try {
    				MyDefaultHandler2 handler2 = new MyDefaultHandler2();
    				parser.parse(new File("./src/day06/contact.xml"), handler2);
    				String content = handler2.getContent();
    				System.out.println(content);
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			
    		} catch (ParserConfigurationException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (SAXException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    
    	}
    	
    	private static class MyDefaultHandler2 extends DefaultHandler {
    
    		private StringBuffer sb = new StringBuffer();
    		
    		public String getContent() {
    			return sb.toString();
    		}
    		
    		/**
    		 * qName:开始标签的名字
    		 * attributes:属性
    		 */
    		@Override
    		public void startElement(String uri, String localName, String qName, Attributes attributes)
    				throws SAXException {
    			// TODO Auto-generated method stub
    			super.startElement(uri, localName, qName, attributes);
    			
    			sb.append("<"+qName);
    			//属性列表
    			if(attributes != null) {
    				//遍历属性
    				for (int i = 0; i < attributes.getLength(); i++) {
    					String name = attributes.getQName(i);
    					String value = attributes.getValue(i);
    					sb.append(" "+name+"=\""+value+"\"");
    				}
    			}
    			sb.append(">");
    		}
    
    		@Override
    		public void endElement(String uri, String localName, String qName) throws SAXException {
    			// TODO Auto-generated method stub
    			super.endElement(uri, localName, qName);
    			sb.append("");
    		}
    
    		@Override
    		public void characters(char[] ch, int start, int length) throws SAXException {
    			// TODO Auto-generated method stub
    			super.characters(ch, start, length);
    			String content = new String(ch,start,length);
    			sb.append(content);
    		}
    	}
    }
    

    06-07 sax封装对象案例

    package day06;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    public class Demo8 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    		try {
    			//1、创建SAXParser解析对象
    			SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
    			//2、解析xml文件
    			try {
    				MyDefaultHandler2 handler2 = new MyDefaultHandler2();
    				parser.parse(new File("./src/day06/contact.xml"), handler2);
    				//String content = handler2.getContent();
    				//System.out.println(content);
    				List conList = handler2.getList();
    				for (Contact contact : conList) {
    					System.out.println(contact);
    				}
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		} catch (ParserConfigurationException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (SAXException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    
    	}
    	
    	private static class MyDefaultHandler2 extends DefaultHandler {
    
    		//用于存储所有contact对象信息
    		List conList = new ArrayList();
    		//用于存储一个contact标签中的信息
    		private Contact contact = null;
    		
    		public List getList() {
    			return conList;
    		}
    		
    		//用于记录当前标签是哪个
    		private String curTag;
    		
    		/**
    		 * 思路:
    		 * 1、创建一个新的Contact对象,用于封装contact标签信息
    		 * 2、把当前读到的这个contact标签信息封装到Contact对象中
    		 * 3、把封装好的Contact对象放入List中
    		 */
    		
    		/**
    		 * qName:开始标签的名字
    		 * attributes:属性
    		 */
    		@Override
    		public void startElement(String uri, String localName, String qName, Attributes attributes)
    				throws SAXException {
    			// TODO Auto-generated method stub
    			super.startElement(uri, localName, qName, attributes);
    			curTag = qName;
    			//在读到contact开始标签时创建contact对象
    			if(qName.equals("contact")) {
    				//创建Contact对象
    				contact = new Contact();
    				String id = attributes.getValue("id");
    				contact.id = id;
    			}
    		}
    
    		@Override
    		public void endElement(String uri, String localName, String qName) throws SAXException {
    			// TODO Auto-generated method stub
    			super.endElement(uri, localName, qName);
    			//把curTag置null
    			curTag = null;
    			//3、在读到contact结束标签时把contact对象放到List中
    			if(qName.equals("contact")) {
    				//创建Contact对象
    				conList.add(contact);
    			}
    		}
    
    		//文本内容(包含空格换行)
    		@Override
    		public void characters(char[] ch, int start, int length) throws SAXException {
    			// TODO Auto-generated method stub
    			super.characters(ch, start, length);
    			String content = new String(ch,start,length);
    			//子标签中文本内容封装到Contact对象
    			if("name".equals(curTag)) {
    				contact.name = content;
    			} else if("gender".equals(curTag)) {
    				contact.gender = content;
    			} else if("phone".equals(curTag)) {
    				contact.phone = content;
    			} else if("email".equals(curTag)) {
    				contact.email = content;
    			} else if("address".equals(curTag)) {
    				contact.address = content;
    			}
    		}
    	}
    	
    	static class Contact {
    		public String id;
    		public String name;
    		public String gender;
    		public String phone;
    		public String email;
    		public String address;
    		@Override
    		public String toString() {
    			return "Contact [id=" + id + ", name=" + name + ", gender=" + gender + ", phone=" + phone + ", email="
    					+ email + ", address=" + address + "]";
    		}
    	}
    }
    

    DOM解析、SAX解析区别
    JavaEE_第40张图片

    06-08 dtd约束

    3、XML三大内容:
    语法:w3c组织对xml文件的编程规则规范
    解析:
    约束:由开发者指定的对xml文件内容规范
    3.1、什么是约束?
    3.2、约束分类
    DTD约束:相对简单的,数据类型简单
    	场景:hibernate struts2
    Schema约束:相对复杂,功能强大,数据类型非常丰富,为了替代DTD
    
    tem1:xml和dta
    
    
      
      
      
      
    ]>
    
      Tove
      Jani
      Reminder
      Don't forget me this weekend
    
    
    tem2:dtd和xml分离
    note.dtd
      
      
      
      
      
    note.xml
    
    
    
      Tove
      Jani
      Reminder
      Don't forget me this weekend
    
    
    SYSTEM :本地文件
    PUBLIC:网络上的
    约束标签:
    EMPTY:空标签
    PCDATA:普通字符串(不能包含子标签)
    ANY:任意内容(可以包含子标签)
    
    顺序问题:先后不能错
    数量问题:
    子元素,有且仅有1个
    +	1个或多个
    *	0个或多个
    ?	0个或1个
    
    
    

    JavaEE_第41张图片
    JavaEE_第42张图片

    约束属性:
    
     
      Don't forget me this weekend
      
      属性类型:w3c文档
    

    JavaEE_第43张图片

    06-09 schema约束

    名称空间约束xml
    
    
    
    				
    	
    		true
    		老张
    		2015-06-04
    	
    
    
    book.xsd
     
    
    	
    		
    			
    				
    					
    						
    							
    							
    							
    						
    						
    					
    				
    			
    		
    	
    
    

    JavaEE_第44张图片

    D07 tomcat服务器
    07-01 作业讲解_通讯录系统

    Contact.java
    package cn.nubia;
    
    public class Contact {
    
    	public String id;
    	public String name;
    	public String gender;
    	public String phone;
    	public String email;
    	public String address;
    	
    	public Contact() {
    		super();
    	}
    	
    	public Contact(String id, String name, String gender, String phone, String email, String address) {
    		super();
    		this.id = id;
    		this.name = name;
    		this.gender = gender;
    		this.phone = phone;
    		this.email = email;
    		this.address = address;
    	}
    	
    	public String getId() {
    		return id;
    	}
    	public void setId(String id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getGender() {
    		return gender;
    	}
    	public void setGender(String gender) {
    		this.gender = gender;
    	}
    	public String getPhone() {
    		return phone;
    	}
    	public void setPhone(String phone) {
    		this.phone = phone;
    	}
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String email) {
    		this.email = email;
    	}
    	public String getAddress() {
    		return address;
    	}
    	public void setAddress(String address) {
    		this.address = address;
    	}
    	@Override
    	public String toString() {
    		return "Contact [id=" + id + ", name=" + name + ", gender=" + gender + ", phone=" + phone + ", email=" + email
    				+ ", address=" + address + "]";
    	}
    }
    
    ContactDao.java
    package cn.nubia;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.UUID;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.Node;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    public class ContactDao {
    
    	
    	public static void insert(Contact contact) throws Exception {
    		//把联系人保存到xml
    		//1、把e://contact.xml文件读进来
    		Document doc = new SAXReader().read(new File("e:/contact.xml"));
    		//2、修改document对象
    		Element rootElem = doc.getRootElement();
    		//添加标签
    		Element conElem = rootElem.addElement("contact");
    		//添加属性
    		//使用UUID的算法生成随机且唯一的字符串
    		conElem.addAttribute("id", contact.getId());
    		//添加子标签
    		conElem.addElement("name").setText(contact.getName());
    		conElem.addElement("gender").setText(contact.getGender());
    		conElem.addElement("phone").setText(contact.getPhone());
    		conElem.addElement("email").setText(contact.getEmail());
    		conElem.addElement("address").setText(contact.getAddress());
    		//3、把修改后的对象写到原来xml中
    		FileOutputStream foups = new FileOutputStream("e:/contact.xml");
    		OutputFormat format = OutputFormat.createPrettyPrint();
    		XMLWriter writer = new XMLWriter(foups,format);
    		writer.write(doc);
    		writer.close();
    	}
    	
    	public static void delete(String id) throws Exception {
    		//把联系人保存到xml
    		//1、把e://contact.xml文件读进来
    		Document doc = new SAXReader().read(new File("e:/contact.xml"));
    		//2、删除contact标签
    		//2.1、根据id查询对应的contact标签
    		Element conElem = (Element) doc.selectSingleNode("//contact[@id='"+id+"']");
    		//2.2、删除
    		conElem.detach();
    		//3、把修改后的对象写到原来xml中
    		FileOutputStream foups = new FileOutputStream("e:/contact.xml");
    		OutputFormat format = OutputFormat.createPrettyPrint();
    		XMLWriter writer = new XMLWriter(foups,format);
    		writer.write(doc);
    		writer.close();
    	}
    	
    	public static void update(Contact contact) throws Exception {
    		//把联系人保存到xml
    		//1、把e://contact.xml文件读进来
    		Document doc = new SAXReader().read(new File("e:/contact.xml"));
    		//2、修改document对象
    		//2.1根据id查询对应的contact标签,xpath
    		Element conElem = (Element) doc.selectSingleNode("//contact[@id='"+contact.getId()+"']");
    		conElem.element("name").setText(contact.getName());
    		conElem.element("gender").setText(contact.getGender());
    		conElem.element("phone").setText(contact.getPhone());
    		conElem.element("email").setText(contact.getEmail());
    		conElem.element("address").setText(contact.getAddress());
    		//3、把修改后的对象写到原来xml中
    		FileOutputStream foups = new FileOutputStream("e:/contact.xml");
    		OutputFormat format = OutputFormat.createPrettyPrint();
    		XMLWriter writer = new XMLWriter(foups,format);
    		writer.write(doc);
    		writer.close();
    	}
    	
    	public static List query() throws Exception {
    		//把联系人保存到xml
    		//1、把e://contact.xml文件读进来
    		Document doc = new SAXReader().read(new File("e:/contact.xml"));
    		//2、获取所有contact标签
    		List conList = (List) doc.getRootElement().elements("contact");
    		List list = new ArrayList();
    		for (Element element : conList) {
    			//2.1、创建contact对象
    			Contact contact = new Contact();
    			//2.2、把contact标签信息封装到contact对象中
    			contact.setId(element.attributeValue("id"));
    			contact.setName(element.elementText("name"));
    			contact.setGender(element.elementText("gender"));
    			contact.setPhone(element.elementText("phone"));
    			contact.setEmail(element.elementText("email"));
    			contact.setAddress(element.elementText("address"));
    			//2.3、把contact对象放入List
    			list.add(contact);
    		}
    		return list;
    	}	
    }
    Main.java
    package cn.nubia;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.List;
    import java.util.UUID;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class Main {
    
    	public static void main(String[] args) throws Exception {
    		// TODO Auto-generated method stub
    		//使用UUID的算法生成随机且唯一的字符串
    		String uuid = UUID.randomUUID().toString();
    		System.out.println(uuid);
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    		while(true) {
    			//1、查询菜单
    			System.out.println("===============");
    			System.out.println("[1] 增加联系人");
    			System.out.println("[2] 删除联系人");
    			System.out.println("[3] 修改联系人");
    			System.out.println("[4] 查询联系人");
    			System.out.println("[Q] 退出程序");
    			System.out.println("===============");
    			//2、获取用户输入
    			System.out.println("请输入你的选择");
    			String command = br.readLine();
    			if ("1".equals(command)) {
    				insetContact();
    			}else if("2".equals(command)) {
    				deleteContact();
    			}else if("3".equals(command)) {
    				updateContact();
    			}else if("4".equals(command)) {
    				queryContacts();
    			}else if("Q".equals(command)) {
    				break;
    			}
    		}
    	}
    
    	private static void queryContacts() throws Exception {
    		// TODO Auto-generated method stub
    		List contactsList = ContactDao.query();
    		System.out.println(contactsList);
    	}
    
    	private static void updateContact() throws Exception {
    		String id = "001";
    		Contact contact = new Contact(id, "孙杨", "男", "15686201111", "[email protected]", "唐嫣南路");
    		ContactDao.update(contact);
    		System.out.println("update success");
    	}
    
    	private static void deleteContact() {
    		// TODO Auto-generated method stub
    		//ContactDao.delete(contact);
    	}
    
    	private static void insetContact() throws Exception {
    		String id = UUID.randomUUID().toString();
    		Contact contact = new Contact(id, "孙杨", "男", "15686201111", "[email protected]", "唐嫣南路");
    		ContactDao.insert(contact);
    		System.out.println("insert success");
    	}
    }
    

    07-02 web服务软件作业详解

    		/*
    		 *输入流:
    		 *	输入字节流:InputStream
    		 *			FileInputStream
    		 *			BufferedInputStream
    		 *
    		 *	方法:
    		 *			read() 读取一个字节
    		 *			read(byte[] data) 读取多个字节
    		 *
    		 *	输入字符流:Reader
    		 *			FileReader
    		 *			BufferedReader
    		 *	方法:
    		 *			read()
    		 *			read(char[] data) 读取多个字符
    		 */
    		
    		//1、创建ServerSocket对象,监听某个端口
    		ServerSocket server = new ServerSocket(8888);
    		System.out.println("服务器正在启动...");
    		while(true) {
    			//2、接收客户端连接
    			Socket socket = server.accept();
    			//3、把本地的hello.html的内容发送给socket客户端
    			//3.1、构建数据发送通道
    			OutputStream os = socket.getOutputStream();
    			//3.2、读取本地hello.html文件内容
    			FileInputStream fis = new FileInputStream("e:/web_server/06.转义字符.html");
    			//边读边写
    			/*int len1 = 0;
    			while((len1 = fis.read())!= -1) {
    				os.write(len1);
    			}*/
    			//使用字节数组形式
    			byte[] buffer = new byte[1024];
    			int len2 = 0;
    			while((len2 = fis.read(buffer))!= -1) {
    				//os.write(buffer);
    				os.write(buffer,0,len2);
    			}
    			//4、关闭资源
    			os.close();
    			fis.close();
    		}
    

    07-03 tomcat服务器基本使用
    JavaEE_第45张图片
    JavaEE_第46张图片
    JavaEE_第47张图片
    JavaEE_第48张图片

    运行class和jar包
    

    JavaEE_第49张图片
    JavaEE_第50张图片
    配置首页
    JavaEE_第51张图片

    07-05 网站部署+添加站点

    tomcat与网站是在一起的
    虚拟网站的配置:
    tomcat和网站不在一起时:在E:\javaee\server\apache-tomcat-7.0.73-windows-x64\apache-tomcat-7.0.73\conf\server.xml
    	
    	
    	path不写内容,表示当前网站是默认网站,优先于ROOT的网站
    	优点:软件和网站分离
    	弊端:修改server.xml文件,风险比较大
    
    5.3 通过添加xml文件的方式配置虚拟网站
    不动conf\server.xml
    修改:conf\Catalina\localhost\newsnubia.xml
    访问:http://localhost:8080/newsnubia/
    
    
    	 
    隐藏端口:
    

    JavaEE_第52张图片

    站点配置:目录在\conf\server.xml
          
                
             
          
    name="localhost" appBase="webapps"
    站点和网站的关系?
    一个站点放置很多网站,放网站的目录是webapps
    添加站点步骤:
    1、目录在\conf\server.xml
    	  
    	  	
    	  	
    

    JavaEE_第53张图片

    2、在本地的hosts文件中添加一个站点和ip地址的映射
    C:\Windows\System32\drivers\etc\hosts
    127.0.0.1       www.nubia.com
    访问:http://www.nubia.com/zhidao/zhidao.html
    注:未调试通
    
    7 动态网站的开发
    		html/css/javascript 前端(静态网页)
    
    		静态网站: 只包含静态网页
    		动态网站: 既有静态网页,可以有动态网页
    
    		静态网页:用户多个访问这个网页时,网页的源码是不会改变的。
    		动态网页:用户多个访问这个网页时,网页的源码是有可能改变的。
    

    07-06 开发servlet程序

    	使用servlet技术开发动态网页
    	1)servlet就是一个普通java类,继承HttpServlet类
    	2)servlet交给tomcat服务器运行(web服务器软件)!!!
    jdk 是javase
    jdk没有自带serverlt javaee的lib,需要导包
    E:\javaee\server\apache-tomcat-7.0.73-windows-x64\apache-tomcat-7.0.73\lib\servlet-api.jar
    运行servlet程序:使用tomcat服务器
    package b_servlet;
    
    import java.io.IOException;
    import java.util.Date;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class HelloServlet extends HttpServlet{
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		//super.doGet(req, resp);
    		resp.setContentType("text/html;charset=utf-8");
    		//向浏览器输出内容
    		resp.getWriter().write("当前时间为:"+ new Date());		
    	}
    }
    1、找到程序字节码文件,在代码目录对应的目录
    E:\javaeeprj\day07\bin\b_servlet
    2、在tomcat下建立目录
    apache-tomcat-7.0.73\webapps\nubiaweb\WEB-INF\classes\
    3、需要根据java类的包结构拷贝对应class
    4、外部要访问WEB-INF内容需要配置web.xml
    
    
    
    
    
    	
    		
    		HelloServlet
    		b_servlet.HelloServlet
    	
    	
    	
    		
    		HelloServlet
    		
    		/hello
    	
    
    
    
    5、访问
    http://localhost:8080/nubiaweb/hello
    右键查看源码:
    当前时间为:Tue Dec 18 17:51:30 CST 2018
    

    手动开发servlet程序

    1)编写一个普通的java类,继承HttpServlet类,覆盖doGet方法(
    注意: 到tomcat的lib目录下拷贝servlet-api.jar导入到你的项目中
    
    public class HelloServlet extends HttpServlet{
    	
    	//覆盖doGet
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		resp.setContentType("text/html;charset=utf-8");
    		//向浏览器输出内容
    		resp.getWriter().write("当前时间为:"+new Date());
    	}
    	
    }
    
    
    2)把servlet交给tomcat服务器运行!!!!!!
    
    2.1 把servlet对应的class文件拷贝到tomcat的某个项目(bbs)的WEB-INF/classes目录下
    
    2.2 在bbs项目的WEB-INF/web.xml文件配置servlet
    
    
    
     
    	
    	
    		
    		HelloServlet
    		
    		gz.itcast.b_servlet.HelloServlet
    	
    
    	
    		
    		HelloServlet
    		
    		/hello
    	
    
    
    
    
    3.通过URl访问这个servlet
    
    http://localhost:8080/bbs/hello
    

    工具开发servlet程序

    1)创建一个bbs的web project
    
    2)在WebRoot下编写静态网页
    
    3)在src下编写动态网页
    
    	3.1 在src右键选择 “servlet”
    	3.2 写上servlet的包,名,选择覆盖doGet方法 -> next
    	3.3 修改servlet的名称,修改访问servlet的url -> finished	
    
    4)myecplise关联tomcat服务器
    	4.1 window-> preferences -》 搜索“tomcat” -> 找到“tomcat6.x”
    	4.2 选择 tomcat的根目录
    	4.3 把disable -> enable
    
    5)部署网站
    	5.1 点击发布图标 -> 选择网站- 》 选择发布的tomcat服务器
    -> ok
    
    6)访问:
    	静态文件: http://localhost:8080/bbs/index.html
    	动态文件: http://locahost:8080/bbs/hello	
    

    总结

    
    			1)web服务软件作用:把本地资源共享给外部访问
    			2)tomcat服务软件基本使用:
    					2.1 启动: startup.bat			
    					2.2 关闭: shutdown.bat
    			3)网站的目录结构
    					|-webRoot  根目录
    						|-文件
    						|-WEB-INF
    							|-classes
    							|-lib
    							web.xml  配置servlet,配置首页
    
    			4)部署网站的三种方式
    				4.1 直接拷贝到webapps目录
    				4.2 虚拟网站
    						server.xml 
    						
    				4.3 添加xml文件方式配置虚拟网站
    						在conf/Catalina/locahost
    						添加bbs.xml
    						
    						访问网站名称就是xml的文件名称
    
    			5)增加站点
    					5.1 server.xml添加host标签
    					5.2 修改hosts文件
    					5.3  访问站点使用站点名称
    

    D08 http
    08-01 http协议入门

    有内核的浏览器:IE、谷歌、火狐
    tcp/ip协议:专注的是客户端和服务端之间的数据是否传输成功
    http协议:就是在tcp/ip协议的基础上封装的一套协议,专注的客户端和服务端数据传输的格式是否一致
    

    JavaEE_第54张图片
    08-02 http请求信息

    GET / HTTP/1.1请求行
    Host: www.baidu.com请求头
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
    
    2.1请求行
    http协议版本:
    	http1.0:当浏览器和服务器连接之后,在一次连接中只能发一次请求
    	http1.1:发多次
    常见问题:
    	在一个html页面,页面上有三张图片,访问这个html页面,问:一共发出几次请求?
    	答案:4次,html一次,图片资源3次
    

    08-03 HttpServletRequest对象使用
    08-04 http请求案例(浏览器类型+防止非法链接+获取请求参数数据)
    08-05 获取请求参数+web项目断点调式
    08-06 http响应详解+http响应案例

    你可能感兴趣的:(javaee)