第十周总结
来源:互联网 发布:华科软件学院 编辑:程序博客网 时间:2024/06/03 16:00
0、css的基本选择器
* 标签选择器 div {css代码}
* class选择器 .名称 {}
* id选择器 #名称{}
** 优先级
style > id > class> 标签
1、javascript的简介
* 是基于对象和事件驱动的语言,应用与客户端。 - 基于对象: ** 提供好了很多对象,可以直接拿过来使用 - 事件驱动: ** html做网站静态效果,javascript动态效果 - 客户端:专门指的是浏览器 * js的特点 (1)交互性 - 信息的动态交互 (2)安全性 - js不能访问本地磁盘的文件 (3)跨平台性 - java里面跨平台性,虚拟机 - 只有能够支持js的浏览器,都可以运行 * javascript和java的区别(雷锋和雷峰塔) (1)java是sun公司,现在oracle;js是网景公司 (2)JavaScript 是基于对象的,java是面向对象 (3)java是强类型的语言,js是弱类型的语言 -比如java里面 int i ="10"; - js: var i = 10; var m = "10"; (4)JavaScript只需解析就可以执行,而java需要先编译成字节码文件,再执行。 * javascript的组成(下面js) 三部分组成 (1)ECMAScript - ECMA : 欧洲计算机协会 - 有ECMA组织制定的js的语法,语句..... (2)BOM - broswer object model: 浏览器对象模型 (3)DOM - document object model:文档对象模型
2、js和html的结合方式(两种) 第一种: - 使用一个标签<script type="text/javascript"> js代码; </script> 第二种: - 使用script标签,引入一个外部的js文件 *** 创建一个js文件,写js代码 - <scripttype="text/javascript" src="1.js"></script> ** 使用第二种方式时候,就不要在script标签里面写js代码了,不会执行。3、js的原始类型和声明变量 ** java的基本数据类型byte short int long float double char boolean ** 定义变量 都使用关键字var ** js的原始类型(五个) - string: 字符串 *** var str ="abc"; - number:数字类型 *** var m = 123; - boolean:true和false *** var flag = true; - null *** var date = new Date(); *** 获取对象的引用,null表示对象引用为空 ,所有对象的引用也是obj - undifined *** 定义一个变量,没有赋值 *** var aa; ** typeof(); 查看当前变量的数据类型4、js的语句 - java里面的语句: ** if判断 ** switch语句 ** 循环for while do-while -js里面的这些语句 ** if判断语句 **** =:表示赋值 **** ==:表示判断 ** switch语句 - java里面支持数据类型 string支持吗?在jdk1.7开始支持 - js里面都支持 - switch(a) { case 5: break; case 6: break; default: ...... } ** 循环语句for while do-while - while循环 **** var i = 5; while(i>1) { alert(i); i--; } - for循环 *** for(inti=0;i<=10;i++) { } for(var mm=0;mm<=3;mm++){ alert(mm); } ** i++ ++i和java里面一样
5、js的运算符
** += : x+=y; ===> x=x+y; ** js里面不区分整数和小数 var j = 123; alert(j/1000*1000); // j/1000*1000 在java里面得到结果是 0 // 在js里面不区分整数和小数,123/1000=0.123 * 1000 = 123 ** 字符串的相加和相减的操作 var str = "123"; ** 如果相加时候,做是字符串连接 ** 如果相减,做的是相减的运算 * //字符串的操作 var str = "456"; //alert(str+1); //在java里面操作的结果是 4561 ,在js里面还是 4561 alert(str-1); //相减时候,执行减法的运算 * 提示NaN:表示不是一个数字 ** boolean类型也可以操作 *** 如果设置成true,相当于这个值是1 *** 如果设置成false,相当于这个值是0 ** == 和 === 区别 ** 做判断 ** == 比较的只是值 ** === 比较的是值和类型 ** 引入知识 直接向页面输出的语句(可以把内容显示在页面上) * document.write("aaa"); document.wirte("<hr/>"); ** 可以向页面输出变量,固定值和html代码
7、js的数组
* 什么是数组? - 使用变量,varm = 10; - java里面的数组 定义 int[] arr = {1,2,3}; * 定义方式(三种) 第一种: vararr = [1,2,3]; var arr =[1,"4",true]; 第二种:使用内置对象Array对象 var arr1 = newArray(5); //定义一个数组,数组的长度是5 arr1[0] = "1"; 第三种:使用内置对象Array var arr2 = newArray(3,4,5); //定义一个数组,数组里面的元素是3 4 5 * 数组里面有一个属性 length:获取到数组的长度 * 数组可以存放不同的数据类型的数据
8、js的函数 ** 在java里面定义方法 public 返回类型void /int 方法名(参数列表) { 方法体; 返回值; } public int add(int a,int b) { int sum = a+b; return sum; } ** 在js里面定义函数(方法)有三种方式 **** 函数的参数列表里面,不需要写var,直接写参数名称 第一种方式: **** 使用到一个关键字 function **** function 方法名(参数列表) { 方法体; 返回值可有可无(根据实际需要); } **** 代码 //使用第一种方式创建函数 function test() { alert("qqqqq"); } //调用方法 //test(); //定义一个有参数的方法 实现两个数的相加 function add1(a,b) { var sum = a+b; alert(sum); } //add1(2,3); //有返回值的效果 function add2(a,b,c) { var sum1 = a+b+c; return sum1; } alert(add2(3,4,5)); 第二种方式: **** 匿名函数 var add = function(参数列表) { 方法体和返回值; } **** 代码 //第二种方式创建函数 var add3 = function(m,n) { alert(m+n); } //调用方法 add3(5,6);
9、js的全局变量和局部变量
** 全局变量:在script标签里面定义一个变量,这个变量在页面中js部分都可以使用 - 在方法外部使用,在方法内部使用,在另外一个script标签使用 ** 局部变量:在方法内部定义一个变量,只能在方法内部使用 - 如果在方法的外部调用这个变量,提示出错 - SCRIPT5009: “nn”未定义 12-js的局部变量.html,行18 字符3
10、script标签放在的位置
* 建议把script标签放到 </body>后面 * 如果现在有这样一个需求: 在js里面需要获取到input里面的值,如果把script标签放到head里面 会出现问题。 html解析是从上到下解析的,script标签放到的是head里面,直接在里面取input里面的值, 因为页面还没有解析到input那一行,肯定取不到。
11、js的重载
* 什么是重载?方法名相同,参数列表不同
- java里面有重载,肯定有
* js里面是否有重载?
* javascript(*******) ** 什么是javascript - 基于对象和事件驱动的语言,应用与客户端。 - 特点: 交互性 安全性 跨平台性 - 组成(3部分) *ECMAScript * bom * dom ** js和html的结合方式(两种) 第一种<script type="text/javascript"> js代码;</script> 第二种<script type="text/javascript" src="js的路径"> </script> ** js的数据类型 * 五种原始类型 string number boolean null undifined * 定义变量使用 var ** js的语句 * if * switch * for while do-while ** js的运算符 * 字符串的操作 *** 字符串相加:连接 *** 字符串相减:执行相减运算 * boolean类型相加 true: 1 false:0 * == 和 === 区别 ** == : 判断值 ** === : 判断值和类型 ** js的数组 三种定义方式 ** var arr = [1,2,"3"]; ** var arr1 = new Array(9);//长度9 ** var arr2 = newArray(1,2,3); //元素是 1 2 3 ** 属性 length:数组的长度 ** js的函数 *** function add(a,b) {方法体和返回值;} *** var add1 =function(m,n) {方法体和返回值;} *** var add2 = new Function("a,b","方法体和返回值"); **** 不要忘记调用,不然不起作用的 ** js的全局变量和局部变量 ** 全局变量:在页面中任何js的部分,都可以使用 ** 局部变量:在方法内部定义一个变量,这个变量只能在方法内部使用 ** script标签位置 ** 建议放在</body>后面 ** js的重载(回去思考这个问题)1、js的String对象 ** 创建String对象 *** var str = "abc"; ** 方法和属性(文档) *** 属性length:字符串的长度 *** 方法 (1)与html相关的方法 - bold():加粗 - fontcolor(): 设置字符串的颜色 - fontsize(): 设置字体的大小 - link(): 将字符串显示成超链接 ****str4.link("hello.html") - sub() sup(): 下标和上标 (2)与java相似的方法 - concat(): 连接字符串 ** //concat方法 var str1 ="abc"; var str2 ="dfg"; document.write(str1.concat(str2)); - charAt():返回指定指定位置的字符串 ** var str3 ="abcdefg"; document.write(str3.charAt(20));//字符位置不存在,返回空字符串 - indexOf(): 返回字符串位置 ** var str4 ="poiuyt"; document.write(str4.indexOf("w"));//字符不存在,返回-1 - split():切分字符串,成数组 ** var str5 ="a-b-c-d"; var arr1 =str5.split("-"); document.write("length:"+arr1.length); - replace() : 替换字符串 * 传递两个参数: -- 第一个参数是原始字符 -- 要替换成的字符 *var str6 = "abcd"; document.write(str6); document.write("<br/>"); document.write(str6.replace("a","Q")); - substr()和substring() * var str7 ="abcdefghuiop"; //document.write(str7.substr(5,5)); //fghui 从第五位开始,向后截取五个字符 *** 从第几位开始,向后截取几位 document.write("<br/>"); document.write(str7.substring(3,5));//de 从第几位开始到第几位结束 [3,5) *** 从第几位开始,到第几位结束,但是不包含最后哪一位
2、js的Array对象
** 创建数组(三种) - var arr1 = [1,2,3]; - var arr2 = new Array(3); //长度是3 - var arr3 = new Array(1,2,3); //数组中的元素是1 2 3 - var arr = []; //创建一个空数组 ** 属性:length:查看数组的长度 ** 方法 - concat方法: 数组的连接 document.write(arr11.concat(arr12)); - join():根据指定的字符分割数组 - push():向数组末尾添加元素,返回数组的新的长度 ** 如果添加的是一个数组,这个时候把数组当做一个整体字符串添加进去 - pop():表示 删除最后一个元素,返回删除的那个元素 - reverse():颠倒数组中的元素的顺序3、js的Date对象 ** 在java里面获取当前时间 Date date = new Date(); //格式化 //toLocaleString() //2015年4月17日 11:17:12 ** js里面获取当前时间 var date = new Date(); //获取当前时间 var date = new Date(); document.write(date); // Fri Apr 17 10:47:46 UTC+0800 2015 //转换成习惯的格式 document.write("<hr/>"); document.write(date.toLocaleString()); ** 应用场景: *** 使用毫秒数处理缓存的效果(不有缓存)4、js的Math对象 * 数学的运算 ** 里面的都是静态方法,使用可以直接使用 Math.方法() ** random():得到随机数(伪随机数) - 得到0-9的随机数 Math.random()*10 Math.floor(Math.random()*10)); 5、js的全局函数 * 由于不属于任何一个对象,直接写名称使用 ** eval() : 执行js代码(如果字符串是一个js代码,使用方法直接执行) **** var str ="alert('1234');"; //alert(str); eval(str); ** isNaN():判断当前字符串是否是数字 -- var str2 = "aaaa"; alert(isNaN(str2)); *** 如果是数字,返回false *** 如果不是数字,返回true ** parseInt():类型转换 ** var str3 = "123"; document.write(parseInt(str3)+1);
6、js的函数的重载 ** 什么是重载?方法名相同,参数不同 ** js的重载是否存在? 不存在 ** 调用最后一个方法 ** 把传递的参数保存到 arguments数组里面 ** js里面是否存在重载?(面试题目) (1)js里面不存在重载。 (2)但是可以通过其他方式模拟重载的效果(通过aruguments数组来实现) *** function add1() { //比如传递的是两个参数 if(arguments.length == 2) { returnarguments[0]+arguments[1]; } else if (arguments.length== 3) { returnarguments[0]+arguments[1]+arguments[2]; } else if (arguments.length== 4) { returnarguments[0]+arguments[1]+arguments[2]+arguments[3]; } else { return 0; } }
7、js的bom对象 ** bom:broswerobject model: 浏览器对象模型 ** 有哪些对象? *** navigator: 获取客户机的信息(浏览器的信息) -navigator.appName - document.write(navigator.appName); *** screen: 获取屏幕的信息 - document.write(screen.width); document.write("<br/>"); document.write(screen.height); *** location: 请求url地址 - href属性 **** 获取到请求的url地址 - document.write(location.href); **** 设置url地址 - 页面上安置一个按钮,按钮上绑定一个事件,当我点击这个按钮,页面可以跳转到另外一个页面 - location.href ="hello.html"; **** <inputtype="button" value="tiaozhuan"onclick="href1();"/> - 鼠标点击事件 onclick="js的方法;" *** history:请求的url的历史记录 - 创建三个页面 1、创建第一个页面 a.html 写一个超链接 到 b.html 2、创建b.html 超链接 到 c.html 3、创建c.html - 到访问的上一个页面 history.back(); history.go(-1); - 到访问的下一个页面 history.forward(); history.go(1); 8、js的dom对象(****) * dom:documentobject model: 文档对象模型 ** 文档: 超文本文档(超文本标记文档) html 、xml ** 对象: 提供了属性和方法 ** 模型:使用属性和方法操作超文本标记型文档 *** 可以使用js里面的dom里面提供的对象,使用这些对象的属性和方法,对标记型文档进行操作 *** 想要对标记型文档进行操作,首先需要 对标记型文档里面的所有内容封装成对象 -- 需要把html里面的标签、属性、文本内容都封装成对象 *** 要想对标记型文档进行操作,解析标记型文档 - 画图分析,如何使用dom解析html *** 解析过程 根据html的层级结构,在内存中分配一个树形结构,需要把html中的每部分封装成对象, - document对象:整个文档 - element对象:标签对象 - 属性对象 - 文本对象 -- Node节点对象:这个对象是这些对象的父对象 *** 如果在对象里面找不到想要的方法,这个时候到Node对象里面去找 DOM模型有三种: DOM level 1:将html文档封装成对象。 DOM level 2:在level 1的基础上添加新的功能,例如:对于事件和css样式的支持。 DOM level 3:支持xml1.0的一些新特性。 * DHTML:是很多技术的简称 ** html: 封装数据 ** css:使用属性和属性值设置样式 ** dom:操作html文档(标记型文档) ** javascript:专门指的是js的语法语句(ECMAScript)
9、document对象 * 表示整个的文档 ** 常用方法 **** write()方法: (1)向页面输出变量(值) (2)向页面输出html代码 - var str ="abc"; document.write(str); document.write("<hr/>"); **** getElementById(); - 通过id得到元素(标签) - //使用getElementById得到input标签 var input1 =document.getElementById("nameid"); //传递的参数是标签里面的id的值 //得到input里面的value值 alert(input1.name); //标签对象.属性名称 //向input里面设置一个值value input1.value ="bbbbb"; **** getElementsByName(); - 通过标签的name的属性值得到标签 - 返回的是一个集合(数组) - //使用getElementsByName得到input标签 var inputs =document.getElementsByName("name1"); //传递的参数是 标签里面的name的值 //alert(inputs.length); //遍历数组 for(vari=0;i<inputs.length;i++) { //通过遍历数组,得到每个标签里面的具体的值 var input1 =inputs[i]; //每次循环得到input对象,赋值到input1里面 alert(input1.value); //得到每个input标签里面的value值 } **** getElementsByTagName("标签名称"); - 通过标签名称得到元素 - //演示getElementsByTagName var inputs1 =document.getElementsByTagName("input"); //传递的参数,是标签名称 //alert(inputs1.length); //遍历数组,得到每个input标签 for(varm=0;m<inputs1.length;m++) { //得到每个input标签 var input1 =inputs1[m]; //得到value值 alert(input1.value); } **** 注意地方 **** 只有一个标签,这个标签只能使用name获取到,这个使用,使用getElementsByName返回的是一个数组, 但是现在只有一个元素,这个时候不需要遍历,而是可以直接通过数组的下标获取到值 //通过name得到input标签 var inputs2 =document.getElementsByName("name11")[0]; alert(inputs2.value); var inputss =document.getElementsByTagName("input")[0]; alert(inputss.value);
2、xml的简介(了解)
* eXtensible Markup Language:可扩展标记型语言 ** 标记型语言:html是标记型语言 - 也是使用标签来操作 ** 可扩展: - html里面的标签是固定,每个标签都有特定的含义 <h1> <br/> <hr/> - 标签可以自己定义,可以写中文的标签 <person></person、<猫></猫> * xml用途 ** html是用于显示数据,xml也可以显示数据(不是主要功能) ** xml主要功能,为了存储数据 * xml是w3c组织发布的技术 * xml有两个版本1.0 1.1 - 使用都是1.0版本,(1.1版本不能向下兼容)3、xml的应用 * 不同的系统之间传输数据 ** qq之间数据的传输 ** 画图分析过程 * 用来表示生活中有关系的数据 * 经常用在文件配置 * 比如现在连接数据库 肯定知道数据库的用户名和密码,数据名称 * 如果修改数据库的信息,不需要修改源代码,只要修改配置文件就可以了
4、xml的语法 (1)xml的文档声明(***) * 创建一个文件 后缀名是 .xml * 如果写xml,第一步必须要有 一个文档声明(写了文档声明之后,表示写xml文件的内容) ** <?xmlversion="1.0" encoding="gbk"?> *** 文档声明必须写在 第一行第一列 * 属性 - version:xml的版本 1.0(使用) 1.1 -encoding:xml编码 gbk utf-8 iso8859-1(不包含中文) - standalone:是否需要依赖其他文件 yes/no * xml的中文乱码问题解决 ** 画图分析乱码问题 ** 保存时候的编码和设置打开时候的编码一致,不会出现乱码 (2)定义元素(标签)(***) (3)定义属性(***) (4)注释(***) (5)特殊字符(***) (6)CDATA区(了解) (7)PI指令(了解)5、xml的元素(标签)定义(*****) ** 标签定义 ** 标签定义有开始必须要有结束:<person></person> ** 标签没有内容,可以在标签内结束 ; <aa/> ** 标签可以嵌套,必须要合理嵌套 *** 合理嵌套<aa><bb></bb></aa> *** 不合理嵌套<aa><bb></aa></bb>: 这种方式是不正确的 ** 一个xml中,只能有一个根标签,其他标签都是这个标签下面的标签 ** 在xml中把空格和换行都当成内容来解析, **** 下面这两段代码含义是不一样的 * <aa>1111111</aa> * <aa> 11111111111 </aa> ** xml标签可以是中文 ** xml中标签的名称规则 (1)xml代码区分大小写 <p> <P>:这两个标签是不一样的 (2)xml的标签不能以数字和下划线(_)开头 <2a> <_aa>: 这样是不正确的 (3)xml的标签不能以xml、XML、Xml等开头 <xmla> <XmlB><XMLC>: 这些都是不正确的 (4)xml的标签不能包含空格和冒号 <a b> <b:c> : 这些是不正确的6、xml中属性的定义(*****) * html是标记型文档,可以有属性 * xml也是标记型文档,可以有属性 * <person id1="aaa"id2="bbb"></person> ** 属性定义的要求 (1)一个标签上可以有多个属性 <personid1="aaa" id2="bbb"></person> (2)属性名称不能相同 <personid1="aaa" id1="bbb"></person>:这个是不正确,不能有两个id1 (3)属性名称和属性值之间使用= ,属性值使用引号包起来 (可以是单引号,也可以是双引号 ) (4)xml属性的名称规范和元素的名称规范一致7、xml中的注释(*****) * 写法 <!-- xml的注释 --> ** 注意的地方 **** 注释不能嵌套 <!-- <!-- --> --> <!-- <!--<sex>nv</sex>--> --> ** 注释也不能放到第一行,第一行第一列必须放文档声明8、xml中的特殊字符(*****) * 如果想要在xml中现在 a<b ,不能正常显示,因为把<当做标签 * 如果就想要显示,需要对特殊字符< 进行转义 ** < < > >
1 Tomcat概述
Tomcat服务器由Apache提供,开源免费。由于Sun和其他公司参与到了Tomcat的开发中,所以最新的JSP/Servlet规范总是能在Tomcat中体现出来。当前最新版本是Tomcat8,我们课程中使用Tomcat7。Tomcat7支持Servlet3.0,而Tomcat6只支持Servlet2.5!
2 安装、启动、配置Tomcat下载Tomcat可以到http://tomcat.apache.org下载。Tomcat分为安装版和解压版:l 安装版:一台电脑上只能安装一个Tomcat;l 解压版:无需安装,解压即可用,解压多少份都可以,所以我们选择解压版。2.1 Tomcat目录结构安装版Tomcat的安装过程请参考day03_res/Tomcat安装.doc文件。把解压版Tomcat解压到一个没有中文,没有空格的路径中即可,建议路径不要太深,因为我们需要经常进入Tomcat安装目录。例如:F:\apache-tomcat-7.0.422.2 启动和关闭Tomcat在启动Tomcat之前,我们必须要配置环境变量:l JAVA_HOME:必须先配置JAVA_HOME,因为Tomcat启动需要使用JDK;l CATALANA_HOME:如果是安装版,那么还需要配置这个变量,这个变量用来指定Tomcat的安装路径,例如:F:\apache-tomcat-7.0.42。l 启动:进入%CATALANA_HOME%\bin目录,找到startup.bat[c1] ,双击即可;l 关闭:进入%CATALANA_HOME%\bin目录,找到shutdown.bat[c2] ,双击即可;startup.bat会调用catalina.bat,而catalina.bat会调用setclasspath.bat,setclasspath.bat会使用JAVA_HOME环境变量,所以我们必须在启动Tomcat之前把JAVA_HOME配置正确。启动问题:l 点击startup.bat后窗口一闪即消失:检查JAVA_HOME环境变量配置是否正确;2.3 进入Tomcat主页 访问:http://localhost:80802.4 配置端口号打开%CATALANA_HOME%\conf\server.xml文件:http默认端口号为80,也就是说在URL中不给出端口号时就表示使用80端口。当然你也可以修改为其它端口号。当把端口号修改为80后,在浏览器中只需要输入:http://localhost就可以访问Tomcat主页了。 2.5 Tomcat的目录结构l bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat6.exe、tomcat6w.exe,前者是在控制台下启动Tomcat,后者是弹出UGI窗口启动Tomcat;如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动Tomcat,但需要先配置JAVA_HOME环境变量才能启动,shutdawn.bat用来停止Tomcat;l conf:这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:Ø server.xml:配置整个服务器信息。例如修改端口号,添加虚拟主机等;下面会详细介绍这个文件;Ø tomcatusers.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了;Ø web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。MIME就是用来说明文档的内容是什么类型的!Ø context.xml:对所有应用的统一配置,通常我们不会去配置它。l lib:Tomcat的类库,里面是一大堆jar文件。如果需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar文件放到这个目录中,这个目录中的jar所有项目都可以共享之,但这样你的应用放到其他Tomcat下时就不能再共享这个目录下的Jar包了,所以建议只把Tomcat需要的Jar包放到这个目录下;l logs:这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。l temp:存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除!l webapps:存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的。项目。其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。http://localhost:8080/examples,进入示例项目。其中examples就是项目名,即文件夹的名字。l work:运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。l LICENSE:许可证。l NOTICE:说明文件。
Web应用(重点)
静态网站:l 在webapps目录下创建一个目录(命名必须不包含中文和空格),这个目录称之为项目目录;l 在项目目录下创建一个html文件;动态网站:l 在webpass目录下创建一个项目目录;l 在项目目录下创建如下内容:Ø WEB-INF目录;¨ 在WEB-INF目录下创建web.xml文件[c3] Ø 创建静态或动态页面1 创建静态应用l 在webapps下创建一个hello目录;l 在webapps\hello\下创建index.html;l 启动tomcat;l 打开浏览器访问http://localhost:8080/hello/index.html index.html<html> <head> <title>hello</title> </head> <body> <h1>Hello World!</h1> </body></html>2 创建动态应用l 在webapps下创建hello1目录;l 在webapps\hello1\下创建WEB-INF目录;l 在webapps\hello1\WEB-INF\下创建web.xml;l 在webapps\hello1\下创建index.html。l 打开浏览器访问http://localhost:8080/hello/index.html web.xml<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"></web-app>完整的Web应用还需要在WEB-INF目录下创建:l classes;l lib目录;webapps|- hello|-index.html|-WEB-INF|-web.xml|-classes|-lib l hello:应用目录,hello就是应用的名称;l index.html:应用资源。应用下可以有多个资源,例如css、js、html、jsp等,也可以把资源放到文件夹中,例如:hello\html\index.html,这时访问URL为:http://localhost:8080/hello/html/index.html;l WEB-INF:这个目录名称必须是大写,这个目录下的东西是无法通过浏览器直接访问的,也就是说放到这里的东西是安全的;l web.xml:应用程序的部署描述符文件,可以在该文件中对应用进行配置,例如配置应用的首页: <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list>l classes:存放class文件的目录;l lib:存放jar包的目录;
6 MyEclipse创建JavaWeb应用
6.1 配置Tomcat
使用MyEclipse配置服务器后,就可以使用MyEclipse来启动和停止服务器了。当然,你需要先安装好服务器(Tomcat),才能配置。
MyEclipse自带了一个Tomcat,强烈建议不要使用它。所以,我们需要先把MyEclipse自带的Tomcat关闭,然后再来配置我们自己的Tomcat。
使用MyEclipse启动Tomcat
6.2 创建JavaWeb应用
Servlet
1. 什么是Servlet * Servlet是JavaWeb三大组件之一(Servlet、Filter、Listener) * Servlet是用来处理客户端请求的动态资源 * Servlet的任务有: > 获取请求数据 > 处理请求 > 完成响应 * Servlet接口方法: > void init(ServletConfig) > voidservice(ServletRequest,ServletResponse) > void destory() > ServletConfig getServletConfig() > String getServletInfo() 2. 实现Servlet的方式 * 实现Servlet接口(不方便) * 继承GenericServlet类(不方便) * 继承HttpServlet类(方便) 3.Servlet第一例 * 写一个类cn.itcast.MyServlet,实现Servlet接口 * 实现service()方法,在其中给出System.out.println("hello servlet!"); * 在web.xml文件中指定Servlet的访问路径为:/myservlet<servlet> <servlet-name>xxx</servlet-name> <servlet-class>cn.itcast.MyServlet</servlet-class></servlet><servlet-mapping> <servlet-name>xxx</servlet-name> <url-pattern>/myservlet</url-pattern></servlet-mapping> 当用户在地址栏中访问:http://localhost:8080/day04_1/myservlet时,会执行System.out.println("hello servlet!"); Servlet生命周期 Servlet接口一共5个方法,但其中只有三个是生命周期方法: * void init(ServletConfig) * voidservice(ServletRequest,ServletResponse) * void destory() 1). 服务器创建Servlet: * 当Servlet第一次被请求时,或服务器启动时,服务器会创建Servlet实例。 * 服务器默认是在servlet第一次被请求时创建Servlet实例,如果希望服务器启动时就创建Servlet实现需要在web.xml中配置 * 服务器只为一个类型的Servlet创建一个实例对象,所以Servlet是单例的; 2). 服务器初始化Servlet: * 当服务器创建Servlet实例后会马上调用Servlet的init(ServletConfig)方法,完成对Servlet的初始化; * init(ServletConfig)只会被调用一次 * 服务器会在调用init()方法时传递ServletConfig参数 3). 服务器使用Servlet处理请求: * 当Servlet被请求时,服务器会调用Servlet的service(ServletRequest,ServletResponse)方法 * service(ServletRequest,ServletResponse)方法每处理一次请求,就会被调用一次,所以它可能会被调用N次 * 因为Servlet是单例的,所以可能在同一时刻一个Servlet对象会被多个请求同时访问,所以这可能出现线程案例问题 * Servlet不是线程案例的,这有助与提高效率,但不能让Servlet具有状态,以免多个线程争抢数据 4). 服务器销毁Servlet * 服务器通常不会销毁Servlet,通常只有在服务器关闭时才会销毁Servlet * 服务器会在销毁Servlet之前调用Servlet的destory()方法 * 可以在destory()方法中给出释放Servlet占有的资源,但通常Servlet是没什么可要释放的,所以该方法一般都是空的 request--> 封装了客户端所有的请求数据!请求行请求头空行请求体(GET没体) 回忆一下http协议!请求协议中的数据都可以通过request对象来获取! * 获取常用信息 >获取客户端IP,案例:封IP。request.getRemoteAddr() >请求方式,request.getMethod(),可能是POST也可能是GET * 获取HTTP请求头 >*****String getHeader(String name),适用于单值头 >int getIntHeader(String name),适用于单值int类型的请求头 >long getDateHeader(String name),适用于单值毫秒类型的请求头 >Enumeration<String> getHeaders(String name),适用于多值请求头 * 请求转发和请求包含 RequestDispatcherrd = request.getRequestDispatcher("/MyServlet"); 使用request获取RequestDispatcher对象,方法的参数是被转发或包含的Servlet的Servlet路径 请求转发:*****rd.forward(request,response); 请求包含:rd.include(request,response); 有时一个请求需要多个Servlet协作才能完成,所以需要在一个Servlet跳到另一个Servlet! >一个请求跨多个Servlet,需要使用转发和包含。 >请求转发:由下一个Servlet完成响应体!当前Servlet可以设置响应头!(留头不留体) >请求包含:由两个Servlet共同未完成响应体!(都留) >无论是请求转发还是请求包含,都在一个请求范围内!使用同一个request和response! *request域 Servlet中三大域对象:request、session、application,都有如下三个方法: >void setAttribute(String name, Object value) >Object getAttribute(String name) > void removeAttribute(String name); >同一请求范围内使用request.setAttribute()、request.getAttribute()来传值!前一个Servlet调用setAttribute()保存值,后一个Servlet调用getAttribute()获取值。 * 请求转发和重定向的区别 >请求转发是一个请求一次响应,而重定向是两次请求两次响应 >请求转发地址栏不变化,而重定向会显示后一个请求的地址 >请求转发只能转发到本项目其他Servlet,而重定向不只能重定向到本项目的其他Servlet,还能定向到其他项目 >请求转发是服务器端行为,只需给出转发的Servlet路径,而重定向需要给出requestURI,即包含项目名! >请求转发和重定向效率是转发高!因为是一个请求! <>需要地址栏发生变化,那么必须使用重定向! <>需要在下一个Servlet中获取request域中的数据,必须要使用转发! 编码 常见字符编码:iso-8859-1(不支持中文)、gb2312、gbk、gb18030(系统默认编码,中国的国标码)、utf-8(万国码,支持全世界的编码,所以我们使用这个)
JSP
JSP基础1. jsp的作用: * Servlet: > 缺点:不适合设置html响应体,需要大量的response.getWriter().print("<html>") > 优点:动态资源,可以编程。 * html: > 缺点:html是静态页面,不能包含动态信息 > 优点:不用为输出html标签而发愁 * jsp(java server pages): > 优点:在原有html的基础上添加java脚本,构成jsp页面。2. jsp和Servlet的分工: * JSP: > 作为请求发起页面,例如显示表单、超链接。 > 作为请求结束页面,例如显示数据。 * Servlet: > 作为请求中处理数据的环节。3. jsp的组成 * jsp = html + java脚本+ jsp标签(指令) * jsp中无需创建即可使用的对象一共有9个,被称之为9大内置对象。例如:request对象、out对象 * 3种java脚本: > <%...%>:java代码片段(常用),用于定义0~N条Java语句!方法内能写什么,它就可以放什么! > <%=...%>:java表达式,用于输出(常用),用于输出一条表达式(或变量)的结果。response.getWriter().print( ... );这里能放什么,它就可以放什么! > <%!...%>:声明,用来创建类的成员变量和成员方法(基本不用,但容易被考到),类体中可以放什么,它就可以放什么! * jsp其实是一种特殊的Servlet > 当jsp页面第一次被访问时,服务器会把jsp编译成java文件(这个java其实是一个servlet类) > 然后再把java编译成.class > 然后创建该类对象 > 最后调用它的service()方法 > 第二次请求同一jsp时,直接调用service()方法。 * 在tomcat的work目录下可以找到jsp对应的.java源代码。 * 查看jsp对应java文件: > java脚本 >html5. jsp注释 * <%-- ... --%>:当服务器把jsp编译成java文件时已经忽略了注释部分! <!--fdsafdsa-->:html注释1. 什么是JSP JSP即java server pages,它是JavaWeb的动态资源。 JSP = html + java脚本 +jsp动作标签(包含EL表达式)2. JSP中java脚本 * <% ... %>:代码段,Java语句 * <%= ... %>:表达式,只是表达式!表达式的值会被输出到客户端 * <%! ... %>:定义,定义成员!例如例如成员变量,方法等<% int a = 10;//定义变量%><% out.println(a);//输出变量%><%=a%>//输出变量<%! private String hello = "world"; public String sayHello() { return hello; }%><%=sayHello()%>---------------------4. JSP真身 * JSP也是Servlet * JSP会在第一次被请求时编码成.java,再编码成.class文件,它其实就是一个Servlet,在处理请求时执行service()方法。 查看真身可以得到,jsp中有9个对象可以无需创建即可使用,它们就是jsp九大内置对象。 --------------------- 5. JSP注释 * <!-- -->,html注释,不是JSP注释,它会出现在JSP的真身中,并发送到客户端,但客户端浏览器不会显示它。 * <%-- --%>,JSP注释,它不会出现在JSP真身中,也就不可能发送到客户端浏览器了。开启服务器关闭服务器web.xml文件的内容,我们可以去其他项目中借!
0 0
- 第十周总结
- 第十周总结
- 第十周总结
- 第十周总结
- 【考研】第十周总结
- 第十周到第十二周总结
- 关于第十周学习心得总结
- leetcode第十周解题总结
- 2017.11.2第十周训练周总结
- 第十次周总结--在路上
- 机器学习 第十周 总结 知识点
- 第十周训练总结(一)
- 第十周训练总结(二)
- 第十一周总结
- 第十四周总结
- 第十天:总结
- 第十一天:总结
- 第十三天:总结
- 不容易系列1
- 在 Fragment 中使用 React Native
- 6 guilty pleasures that are costing you
- RabbitMQ学习之基础概念介绍
- 在实习期间同学问的问题的总结
- 第十周总结
- Java小专题之小程序
- MySQL存储引擎--MyISAM与InnoDB区别
- javascript中的数组总结
- 100%的定位方式
- HMACSHA1对NSData加密
- Linux下使用脚本批量更改文件名
- 生产者/消费者模式(阻塞队列)
- js实现流程动态显示