第十周总结

来源:互联网 发布:华科软件学院 编辑:程序博客网 时间: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
原创粉丝点击