JavaWeb知识点总结——Java、前端、JavaWeb

**前排提示,本知识点总结面向基于拥有一定C++基础的人,对于C++中重复的知识点一般以跳过为主,没有相关知识的建议另外补一补。
不出意外的话将在16号之前完成相关总结。
还是肝一点14号就写完吧。 **
由于是在个人word上写完直接复制过来的,格式上可能存在一些问题,过段后会腾出时间来优化一下排版。

~~ ~~
~~ ~~

第一章 Java概述
Java优点——跨平台,简单,面向对象,高效,多线程,资源免费,动态性,健壮、安全
SE——标准版 EE——企业版 ME——微型版
JDK(Java开发工具包)包含 JRE(Java运行时环境)包含 JVM(Java虚拟机), SDK(开发工具包)。
跨平台工作——编译器生成.class文件,再由虚拟机转成对应机器语言。
Java垃圾回收机制的特点——内存优化,动态回收,回收的不确定性,占用系统开销。
配置环境变量——JAVA_HOME= C:\Program Files\Java\jdk1.8.0_05
PATH=%JAVA_HOME%\bin
CLASSPATH=.;%JAVA_HOME%\lib\dt.jar; %JAVA_HOME%\lib
tools.jar
程序编写——注意main函数写法:public static void main (String []args)
注释 单行注释://
多行:/*
*
/
文档:/
*
*
*/
第二章 Java语言基础
Java默认采用UTF-16字符集

标识符——即我们平常所说的变量名
关于标识符的几个规则:

  1. 不能以数字开头
  2. 特殊符号仅能使用 _ 和 $
  3. 区分大小写
  4. 不能使用Java关键字

变量:基本与C++相同,
值得一提的是——Java用final关键字定义常量
——Int的长度为32位,16位的整型为short

几种引用类型——数组,类(class),接口,枚举(enum)。

堆,栈的区别——可以这样简单理解,堆用于动态分配(new),栈则反之;由于堆需在运行时动态分配内存,运行速度较慢,栈则相对较快。
值得一提的是——对象的引用是存放在栈中的。
——利用new能在堆中生成多个值相同但地址不同的String变量,而直接赋值生成的String变量会地址将会指向栈中的同一位置。

类型转换:
由低向高进行的自动类型转换——

强制类型转换——基本与C++相同。

操作符——几元操作符就是同时操作几个操作数,三元操作符可以以“ ? :”为例,其他基本与C++相同。

流程控制——分组,循环,转移(break,return等),基本同C++

数组:
几种初始化方法:int a[];
int a[] = {1, 2};
int a[] = new int[]{1, 2};(静态初始化方法)
int a[] = new int[2];(动态初始化方法)
使用new初始化数组后,数组会获得默认初值(一般为0,引用为null)
Foreach遍历方法——for(int e : a){ }
二维数组——基本同C++

第三组 面向对象基础
面向对象,即以事物对象为中心来思考、分析问题,并根据事物的本质特征将其抽象为系统中的对象,作为系统的基本构成单位。
定义:
对象——要进行研究分析的东西。
类——对象的抽象,由特征(变量,或者说属性)、行为(方法)组成
类之间的关系——与、或。
消息——其使对象之间进行通信。
方法——类的行为实现(这不是上面提过了?)

面向对象特征:
唯一性——即生成的每个对象都是唯一的,拥有自己的标识。
分类性——将具有一致属性和行为的对象抽象成类,只反映与应用有关的重要性质。
继承性——即能继承父类的属性与方法。
多态性——即相同的操作、过程可作用于多种类型的对象上并获得不同的结果。

类的声明、使用

参数传递:
提一下引用传递——由于Java中的引用类型为数组、类、枚举,不同于C++,Java中只要形参为引用类型就是引用传递(因为这三个东西本质上就是地址)。

构造方法——如果写的类没有构造方法,程序会自动提供一个缺省构造方法(class a = new class()这种不带参的),如果有的话这种方法将不在存在,想用需再写一个。

方法重载:三个原则

  1. 在同一类中。
  2. 方法名相同。
  3. 参数列表不同。

可变参数——使用实例
public static int add(int a, int… b) {
int sum = a; // 可变参数b被当成数组进行处理
for (int e : b) {
sum += e;
}
return sum;
}
使用注意事项:

  1. 只能出现在参数列表最后一个。
  2. 一个方法中最多出现一个。
  3. 可变参数的本质就是一个数组,因此在调用一个包含可变参数的方法时,既可以传入多个参数,也可以传入一个数组

包:
Java引入包(package)的机制,提供了类的多层命名空间,解决类的命名冲突、类文件管理等问题。
定义包——package mypackage;
注意:

  1. package语句必须作为Java源文件第一条非注释性语句。
  2. 一个Java源文件只能由一条package语句。
    导入包——import 包名.类名;

访问控制符:private 缺省 protect public
Private——仅允许同类成员进行访问。
缺省——允许同一包中的其他类成员访问。
Protect——允许不同包中的子类进行访问。
Public——基本全都能用。

静态成员——类的静态变量和静态方法,在内存中只有一份,供所有对象共用,起到全局的作用。

对象数组——对象的数组化使用方法,使用方法与一般数组相差不大。

第四章 核心类
基本数据数据类型的封装类:
Byte——byte,Short——short,Integer——int ,Long——long
Character——char,Float——float,Double——double
Boolean——boolean
封装类可以直接进行赋值,如: Integer num = 10;
基本变量使用封装类的parseXxx方法对字符串进行转化为,如:
int num = Integer.parseInt(“132”);
相反,String类使用封装类的toString()方法或自身类的valueOf()方法来进行类型转换,如:String s2 = Integer.toString(100);

装箱:基本数据类型转换为对应封装类,
方法——int I = 1; Integer obj = I;(自动装箱)
装箱后数据由栈到堆。
拆箱:将封装类转换为对应基本数据类型
方法——Integer obj = 10; int I = obj;(自动拆箱)
拆箱后数据由堆到栈。
基本类型与其对应封装类之间能够自动进行转换,其本质是Java的自动装箱和拆箱过程。

以下介绍几种常见核心类及其常用方法。
Object类——所有类的顶级父类(即它的方法所有类都可以调用)
equals()方法——用于比较两个对象的内容是否相同
toString()方法——值得一提的是,在使用System.out.println()方法时,会自动调用toString方法,也就是说,如果你自己重写了toString()方法,在println()的时候会输出你重写的内容。
例:
public String toString() {
return this.bookName + “,¥” + this.price + “,” + this.publisher + “,ISBN:” + this.isbn;
}
测试类Demo:
Book b1=new Book(“《Java SE 8应用开发》”,98,“科学出版社”,“978-1-211-66889-8”);
System.out.println(b1);
最后结果将会输出——《Java SE 8应用开发》,¥98.0,科学出版社,ISBN:978-1-211-66889-8。

字符串类——String StringBuffer StringBuilder(引用类型)
String创建的字符串不可变,即为其赋新值的时候,会另寻一块空间存放新值,原值不会消失。
StringBuffer创建的对象可变,可使用append()、insert()、setCharAt()等方法进行改变,其引用地址不会发生变化。
StringBuilder相比StringBuffer没有实现线程安全,性能较好。(?不是很理解)
常用方法:
char charAt(int index)——获取指定位置字符
boolean endWith(String s)——判断是否以s结尾
int indexOf(String s)——s第一次出现的位置
int length——字符串长度
String subString(int begin, int end)——获取从begin到end的字符串
另外两个类就不提了,这种基本翻手册用的类要考的话就离谱,下面要提到的大多类也是如此。

Scanner类
注意读取字符串用next()方法,其他类型用nextXxx()方法。
注意!next()方法遇到空格时停止读取,想要读取整行需要使用nextLine()方法,但nextLine()因为是遇到换行符就停住读取的,使用时要小心(就像是C++中的cin 和 getline),这里有一个比较经典的例子—— https://blog.csdn.net/superme_yong/article/details/80543995.
创建对象——Scanner sc = new Scanner(System.in);

Math类
abs(double a)
ceil(double a)向上取整
floor(double a)向下取整
round(double a)四舍五入
random()返回[0,1)的随机数

第五章 类之间的关系
类之间的六种关系——继承、实现、依赖、关联、聚合、组成。
继承——每个类只能有一个父类,但可以有多个子类
实现——类实现接口的方法
依赖——在一个类的方法中操作另外一个类的对象,这种情况称之为第一个类依赖于第二个类。
关联——在一个类中使用另外一个类的对象作为该类的成员变量,这种情况称之为关联关系。(比依赖关系更紧密)
聚合——表现为一个类(整体)由多个其他类的对象(部分)作为该类的成员变量,其生命周期是分离的。
组成——比聚合关系要求更高的一种关联关系,其生命周期是一致的。

方法重写的几大规则(子类改造父类中的方法):

  1. 方法名、参数列表需完全一致。
  2. 返回类型不变,或是原返回类型的子类。
  3. 异常声明保持一直,或是原类型的子类。
  4. 子类中重写方法的访问类型不能低于父类。

super关键字的用途——在子类的构造方法中调用父类的构造方法;在子类方法中访问父类的属性或方法。
final关键字——修饰方法时表示该方法不可被重写,修饰类时表示该类不可被继承。

第六章 抽象类与接口
抽象类的定义——普通类访问符后(public)加abstract

抽象类、抽象方法的定义规则:
 abstract关键字放在class前,指明该类是抽象类;
 abstract关键字放在方法的返回类型前,指明该方法是抽象方法,抽象方法没有方法体;
 抽象类不能被实例化 即无法使用new关键字直接创建抽象类的实例,即使抽象类中不包含抽象方法也不行;
 一个抽象类中可以含有多个抽象方法,也可以含有已实现的方法;
 抽象类可以包含成员变量以及构造方法,但不能通过构造方法创建实例,可在子类创建实例时调用;
 定义抽象类有三种情况:直接定义一个抽象类;或继承一个抽象类,但没有完全实现父类包含的抽象方法;或实现一个接口,但没有完全实现接口中包含的抽象方法。

接口——允许一个类多个继承
语法上的几个注意点:

  1. 接口只能继承接口。
  2. 接口内的访问符默认为Public。
  3. implements关键字用于实现接口;
  4. 一个类可以实现多个接口,接口之间使用逗号进行间隔;
  5. 一个类在实现一个或多个接口时,这个类必须完全实现这些接口中定义的所有抽象方法,否则该类必须定义为抽象类;
  6. 一个类实现某个接口时,该类将会获得接口中定义的常量、方法等,因此可以将实现接口理解成一种特殊的继承,相当于实现类继承了一个彻底抽象的类。

接口间的继承:
interface InterfaceC extends InterfaceA, InterfaceB { ……}
类继承接口:
public class InterfaceExtends implements InterfaceC, InterfaceD{……}

接口是完全抽象的——只有方法但没有具体实现过程;与之相比,抽象类可以实现自己的方法。抽象类体现的是一种模版式设计。抽象类可以被当成系统实现过程中的中间产品.
接口和抽象类都不能被实例化,需要被其他类实现或继承;
接口和抽象类的类型变量都可以指向其实现类或子类的实例对象;
接口和抽象类都可以包含抽象方法,实现接口或继承抽象类时都必须实现这些抽象方法

instanceof关键字
用法:引用类型变量 instanceof 引用类型
其将返回一个逻辑判断结果。

第七章 异常
异常的两种类别:
错误(Error)——一般指与虚拟机相关的问题,如系统崩溃、虚拟机错误、动态链接失败等,这些错误无法恢复或捕获,将导致应用程序中断;
异常(Exception)——因程序编码错误或外在因素导致的问题,这些问题能够被系统捕获并进行处理,从而避免应用程序非正常中断,例如:除以0、对负数开平方根、空指针访问等。
其中,异常又分为检查性异常(不解决无法通过编译)和非检查性异常(编译器不要求强制处置的异常)。

两种异常处理机制:使用try…catch捕获异常和使用throws声明抛出异常。
异常处理机制的优点:
 异常处理代码和正常的业务代码分离,提高了程序的可读性,简化了程序的结构,保证了程序的健壮性;
 将不同类型的异常进行分类,不同情况的异常对应不同的异常类,充分发挥类的可扩展性和可重用性的优势;
 可以对程序产生的异常进行灵活处理,如果当前方法有能力处理异常,就使用try…catch捕获并处理;否则使用throws声明要抛出的异常,由该方法的上一级调用者来处理异常。

异常捕获的语法:
try {
//业务实现代码(可能发生异常)

}
catch (Exception e) {
e.printStackTrace();
}
catch (异常类2异常对象) {//异常类2的处理代码
}
…//可以有多个catch语句
catch (异常类n 异常对象) {//异常类n的处理代码
}
finally {//资源回收语句
}

thorw 与throws关键字
throw:
throw语句抛出的不是异常类,而是一个异常实例对象,并且每次只能抛出一个异常实例对象
例:throw new Exception(“请输入一个合法的年龄”);

throws:
throws抛出一个异常序列,其只能在定义方法时使用。
例:public void myFunction() throws IOException,Exception{ }

第八章 泛型与集合(仅做一般了解,故不在此展开)

第一章 HTML语言基础
HTML开始就全是新知识了,会额外增加一些重点标记。

编写HTML文件的注意事项:
 HTML不区分大小写,而XHTML区分大小写;
 HTML标签的属性与属性值;
 HTML中的空格;
 HTML中的注释;
 标签可以嵌套使用。

HEAD元素——向浏览器提供了页面的基本信息
子元素:
title元素——用于在浏览器标题栏中显示标题
meta元素——向客户的浏览器传递信息和指令
 标签主要分为两大类:
 对页面的设置,通过http-equiv属性进行指定
 对搜索引擎的设置,通过name属性进行指定
例:

(第二条语句意思为5秒后刷新并进入新页面)

文本元素:
标题标签

,其中h4与默认文本大小基本相同,123更大,56更小。
文本修饰标签(认识即可):

特殊字符——以 & 开头的实体引用,如&nbsp代表空格

文档结构元素:
 段落标签

。当浏览器解析

标签时,通常在下一个段落之前插入一个新的空白行。

标签,可以在文本内容不结束的情况下需要对文本进行换行。


标签可以在页面中产生一条水平线。

列表元素:
有序列表:

  1. 中允许包含多个列表项,每一个列表项都嵌入在
      之间;
    1. 标签用于展示某一列表项,其内容包含在
    2. 之间。
      通过设置ol的type属性来产生序号
      例:

      1. 购物区

      2. 男装

    无序列表——前缀显示为符号的列表

    • 列表项 1
    • 列表项 2
    • ......
    type属性可以为circle(圆)、disc(点)、square(方块)、none等类型,默认为点。

    定义列表——一种标题(dt)与描述(dd)成对出现的列表
    例:

    标题 1
    描述 1
    ......
    效果显示:

    dib与span标签:
     块级元素

    标签用于将网页中的某一特定区域用边框围起来,并赋予指定的样式。

     标签属于行内块,用于指定行内元素
     通过标签来选择特定的文本,以便赋予特殊的样式;
    即span标签通常用于选定特定文本进行样式设置

    URL简介:
     URL包含3个关键部分:协议、主机地址和文件路径

    绝对路径——文件存放的完整路径
    如:http://www.itshixun.com/movie/index.html
    相对路径——更为简洁的路径访问
    相对路径的访问方式有以下几种形式:
     同一目录
     子目录
     父目录
     根目录

    图像标签——<img src=“url” alt=" " …/>
    alt属性的值将会在图片无法加载时作为替代出现。

    超链接标签——链接内容
    标签的title属性用于给链接添加标题,当鼠标悬停在超链接之上时,会提供该链接的更多相关信息。
    例:列表示例

    文本连接与锚点连接
    通过设置标签的id来设置锚点
    例:锚点位置
    链接到锚点

    图片链接与图片热区链接:
    图片链接——在标签前后设置标签
    例:


    图片热区标签——同一个图片中不同的部分链接到不同的目标位置
    通过标签定义映射,再使用标签设置独立链接
    例:





    超链接的target属性—— 指定新窗口的打开方式
    例:打开目标链接(在新窗口中打开)

    第二章 表格(重点)
    表格
    表格的组成——


    常用属性:
    属性 取值 描述
    align left、center、right 设置表格相对周围元素的对齐方式
    bgcolor rgb(x,x,x)、#xxxxxx、colorName 设置表格的背景颜色
    border 像素 设置表格边框的宽度
    cellpadding 像素或百分比 设置单元格与其内容之间的距离
    cellspacing 像素或百分比 设置单元格之间的距离
    height 像素或百分比 设置表格的高度
    width 像素或百分比 设置表格的宽度
    rules none、groups、rows、cols、all 设置表格中的表格线显示方式,默认是all
    frame void、above、below、hsides、vsides、lhs、rhs、box、border 设置表格的外部边框的显示方式

    例:





    姓名电话

    单元格标签——td(数据),th(标题)
    属性:
    属性 描述
    align 设置单元格内容的水平对齐方式:left、center、right、justify
    valign 设置单元格内容的垂直对齐方式:top、middle、bottom、baseline
    rowspan 设置单元格跨越的行数
    colspan 设置单元格跨越的列数
    width 设置单元格的宽度
    height 设置单元格的高度
    bgcolor 设置单元格的背景颜色
    重点关注align, rowspan, colspan属性

    行标签——tr
    常用属性:
    属性 描述
    align 设置单元格内容水平对齐方式:left、center、right、justify
    bgcolor 设置单元格的背景颜色
    bordercolor 设置行内单元格的边框颜色

    第三章 表单(重点)
    Form表单是HTML的一个重要部分,负责采集和提交用户输入的信息。

    表单标签——一个包含表单元素的区域
    如:<form action=“处理数据程序的URL地址” method=“get|post” name=“表单名称” … >
     一个页面可以拥有一个或多个表单标签,标签之间相互独立,不能嵌套
     用户向服务器发送数据时一次只能提交一个表单中的数据

    action属性——action属性值是Web服务器上数据处理程序的URL地址(就是存放数据处理程序的地方)。
    method属性——用于设置向服务器发送数据的方式,主要由get和post两种方式。
    get方式——URL由地址部分和数据部分构成,两种之间用问号“?”隔开,数据以“名称=值”的方式成对出现,且数据与数据之间通过“&”符号进行分割
    例:http://www.itshixun.com/web/login.jsp?userName=admin&userPwd=123456
    post方式——将数据隐藏在HTTP的数据流中进行传输;请求数据不会出现在地址栏中,安全性比get方式要高,并且对数据长度没有限制。

    id与name属性:
     id属性是表单在网页中的唯一标识
     name属性用来设置表单元素的名称,在页面中也应尽量保持唯一

    表单域:
     表单域多用于收集网站访问者的信息,一般位于标签之间
     表单域主要包括文本框、密码框、隐藏域、多行文本框、单选按钮、复选框、列表选择框和文件选择框等元素
     除多行文本框和列表选择框外,大部分表单域使用标签来创建
    一些表单域的介绍:
    text——单行文本框
    password——密码框,输入框中将显示为掩码(*或其他符号)
    radio——单选按钮
    例:
     checked="checked"属性用于指定该项默认被选中,也可以简写成checked格式
     当表单中有多个单选按钮时,浏览器会根据单选按钮的name属性进行分组
    checkbox——复选框(类似单选框,但是在同一组的数据可以被多个选中)
     具有相同name属性的复选框分为一组,组内允许多选
    file——文本选择框:
    accept属性用于指定文件选择窗口的文件类型过滤;
    hidden——隐藏域,隐藏不希望用户看到的数据
    textarea——多行文本框 文本内容
    其中,wrap属性用于设置换行方式
    属性 描述
    off 默认值,文本域中内容足够多时,会在文本域中添加滚动条
    virtual 实现文本区内的自动换行,以改善对用户的显示;但在传输给服务器时,文本只在用户按下Enter键的地方进行换行,其他地方没有换行的效果
    physical 实现文本区内的自动换行,并以这种形式传送给服务器

    列表选择框:
    列表选择框允许用户从列表中选择一项或多项。在HTML中,可以通过和标签来创建一个列表框。
    例:

    选项描述内容 …  列表选择框使用标签进行定义,一个列表可以包含多个列表项  size属性用于指定列表选择框显示的行数  multiple="multiple"属性用于指明当前列表框是否允许按住Ctrl键进行多选,默认只能选择一项  标签的value属性多用于发送给服务器的选项值  标签的selected="selected"用于设置当前选项默认被选中  和标签之间的选项描述内容是显示的列表选择项

    按钮控件:
     表单的按钮有多种功能:可以用于提交表单,也可以用于清除或重置表单,甚至用于触发客户端脚本程序。
     按钮分为提交按钮、重置按钮、图片按钮和普通按钮,可以通过标签或标签来创建按钮。

    src属性是可选的,当type属性为image时,用来指定图片的URL地址

    第四章 CSS语言基础
    CSS基本语法结构(重点):
    基本格式(选择器与声明)——
    五大原则:
     第一项必须是选择器或选择器表达式
     选择器之后紧跟一对大括号
     每个声明是由属性和属性值组成,且位于大括号之内
     声明之间需以英文分号进行间隔
     最后一个声明后面的英文分号可以省略

    CSS的使用(重点):
    内嵌样式——直接在html标签中使用的样式
    例:<h4 style=“border:dotted thin blue; text-align:center;”>内嵌样式的使用

    内部样式表——为当前页面集中设置的样式属性
     内部样式表是一种写在

    外部样式表——单独作为文件的CSS样式,其又分为两种:链接外部样式表和导入外部样式表。
    链接外部样式表——用标签引入的样式表
    在页面的标签中使用标签关联style.css样式文件,然后在中通过标签选择器引用样式文件中预定义的样式
    例:
    链接外部样式表的使用


    导入外部样式表——使用导入的外部样式表
    @import 样式文件的引用地址;
    @import url(“样式文件的引用地址”);
    @import url(“css/style.css”);

    两种样式表的区别:
     隶属关系不同:标签属于HTML标签,而@import是CSS提供的载入方式
     加载时间及顺序不同:使用链接的CSS样式文件时,浏览器先将外部的CSS文件加载到网页当中,然后再进行编译显示;而@import导入CSS文件时,浏览器先将HTML结构呈现出来,再把外部的CSS文件加载到网页中,当网速较慢时会先显示没有CSS时的效果,加载完毕后再渲染页面
     兼容性不同:由于@import是CSS 2.1提出的,只有在IE 5以上的版本才能识别,而标签无此问题
     DOM模型控制样式:使用JavaScript控制DOM改变样式时,只能使用标签,而@import不受DOM模型控制
     综上所述,不管从显示效果还是网站性能上看,link链接方式更具有优势,应优先考虑

    样式表的优先级:内嵌>内部>外部>浏览器缺省默认

    CSS选择器
    基本选择器:

    1. 通用选择器 *{ }——用于匹配文档中的全部元素。
    2. 标签选择器 p{ }——用于匹配文档中的某一全部标签。
    3. 类选择器 .classname{ }——用于匹配文档中的class为相应类的标签。
    4. ID选择器 #idValue{ }——用于匹配唯一ID的标签(在一个文档中,由于ID属性是唯一的,因此ID选择器具有一定局限性,应尽量少用)
      选择器之间也存在优先顺序,优先级从高到低分别是:“ID选择器类选择器标签选择器通用选择器”(即范围从小到大)

    组合选择器

    1. 多元素选择器p,div { }——多个元素用 , 隔开
    2. 后代选择器 div p { }——用于选取某个元素的全部后代元素,后代元素用空格隔开
    3. 子选择器 div > p { }——用于选取某个元素的直接子元素(可以接多个 >)。
    4. 相邻兄弟选择器h3 + p{ }——用于选择紧邻在某元素后的兄弟元素。
    5. 普通兄弟选择器h3 ~ p {background:#ccc;}——即第四个的普通版。
      CSS样式属性(一般了解)
      基本是用的时候查手册的东西
      功 能 属性名 描述
      缩进文本 text-indent 设置行的缩进大小,值可以为正值或负值,单位可以用em、px或百分比(%)
      水平对齐 text-align 设置文本的水平对齐方式,取值left、right、center、justify
      垂直对齐 vertical-align 设置文本的垂直对齐方式,取值bottom、top、middle、baseline
      字间距 word-spacing 设置字(单词)之间的标准间隔,默认normal(或0)
      字母间隔 letter-spacing 设置字符或字母之间的间隔
      字符转换 text-transform 设置文本中字母的大小写,取值none、uppercase、lowercase、capitalize
      文本修饰 text-decoration 设置段落中需要强调的文字,取值none、underline(下划线)、overline(上划线)、line-through(删除线)、blink(闪烁)
      空白字符 white-space 设置源文档中的多余的空白,取值normal(忽略多余)、pre(正常显示)、nowrap(文本不换行,除非遇到
      标签)
      还有很多这里就不展示了……

    第五章 CSS页面布局(不做要求)

    第六章 JavaScript语言基础
    Jsp简介
     JavaScript是一种脚本语言,可以直接嵌入HTML页面之中
     当用户在浏览器中预览该页面时,浏览器会解释并执行其中的JavaScript脚本

    Jsp特点:
     解释性
     嵌套在HTML中
     弱数据类型
     跨平台
     基于对象
     基于事件驱动
    规范——与java、C++没什么大的不同

    Jsp的使用形式(重点)
    三种使用形式:

    1. 行内Jsp脚本
      例:查看结果
    2. 内部Jsp脚本
      写在

    基本语法、运算符、流程控制同Java
    值得注意的是:

    1. Jsp变量声明用的是var关键字,例:var name,age;
    2. Jsp判等多了个“=”严格等于(与“”区别在于“==”支持自动类型转换,前后变量值相等就为true)
       JavaScript中的变量是弱数据类型
       在声明变量时不需要指明变量的数据类型,通过关键字var进行声明;
       在变量的使用过程中,变量的类型可以动态改变,类型由所赋值的类型来确定。
       通过typeof运算符或typeof()函数来获得变量的当前数据类型。

    提一下with语句
    例:

    函数(重点)
    在JavaScript中,函数可分为预定义函数和用户自定义函数。

    几个预定义函数:
    isNaN()——判断是否为数字
    eval()——用于将JavaScript中的字符串作为脚本代码来执行
    对话框
     alert()函数用于弹出一个提示对话框
     confirm()函数用于弹出一个确认对话框,在确认对话框中,点击“确定”时返回true,点击“取消”时返回false
    prompt()用于接收用户输入的输入框

    自定义函数(重点):
    命名函数的定义——
    例:function funcName([parameters]){
    statementes;
    [return expression];
    }
    匿名函数的定义——
     匿名函数的定义格式与命名函数基本相同,只是没有提供函数的名称,且在函数结束位置以分号(;)结束。
     由于没有函数名字,所以需要使用变量对匿名函数进行接收,方便后面函数的调用。
    使用示例:
    对象函数的定义——var funcName=new Function([parameter s],statements;);
     JavaScript提供了Function类,用于定义函数
     Function是用来定义函数的关键字,首字母必须大写
    例:var showInfo=new Function(“name”,“age”,“authority”,“address”,
    “alert(‘数据处理中……’);”+
    “return( ‘姓名:’+name+’,年龄:’+age+’,权限:’+authority+’,地址:’+address);”);
    alert(showInfo(“guoqy”,30,“管理员”,“青岛”));
    自调用函数——定义和调用一同实现的函数
    例:var user=“admin";
    (function(userData){
    alert(“欢迎”+ userData +“来到漫步时尚广场”);
    })(user);

    第七章 JavaScript对象(一般了解)
    也都是做的时候翻手册的东西,这里提一下自定义对象

    自定义对象
    五种定义方式:

    1. 原始方式
      例:var goods=new Object();
      goods.name=“男士白领衬衣”;
      goods.type=“男装”;
      goods.price=“580”;
      goods.color=“white”;
      goods.showInfo=function(){
      alert(“商品名称:”+goods.name+"\n商品类型:"+goods.type+"\n商品价格:"
      +goods.price+"\n商品颜色:"+goods.color);
      }
      goods.showColor=showColor;
      function showColor(){
      alert(“商品颜色:”+goods.color);
      }

    2. 构造函数方式——
      创建构造函数(首字母需要大写)
      用new运算符和构造函数来创建一个对象
      例:
      function ClassName([param1][,param2]…){
      this.propertyName=value;
      //其他属性…
      this.methodName=functionName | function (){…};
      //其他方法…
      }

    3. 原型方式
      例:
      //创建构造函数
      function Goods(){
      }
      Goods.prototype.name=“耐克运动鞋”;
      Goods.prototype.type=“鞋类”;
      Goods.prototype.price=1200;
      Goods.prototype.color=“白色”;
      Goods.prototype.showInfo=function(){
      alert(“商品名称:”+this.name+"\n商品类型:"+this.type+"\n商品价格:"
      +this.price+"\n商品颜色:"+this.color);
      };
      //创建一个对象
      var goods=new Goods();
      //方法的调用
      goods.showInfo();

    4. 混合方式
       原型方式创建对象时,对象的属性采用默认值,在对象创建完成后再去改变属性的值
       构造方式在创建对象时,会重复生成方法所引用的函数
       在实际应用中,经常将构造函数和原型方式相结合来解决上述问题
       混合方式的优势在于:每个对象在创建时都具有独立的属性值,且方法所引用的函数只会创建一次
      例:
      //创建构造函数
      function Goods(name,type,price,color){
      this.name=name;
      this.type=type;
      this.price=price;
      this.color=color;
      }
      //原型方式添加方法
      Goods.prototype.showInfo=function(){
      alert(“商品名称:”+this.name+"\n商品类型:"+this.type+"\n商品价格:"
      +this.price+"\n商品颜色:"+this.color);
      };
      //创建对象实例
      var goods1=new Goods(“男士衬衣”,“男装”,200,“白色”);
      //方法的调用
      goods1.showInfo();

    5. JSON方式
       使用JSON方式无需构造函数和new关键字,直接创建所需的JavaScript对象即可
       JSON对象是以“{”开始,以“}”结束,且属性与属性值成对出现
      例:
      var goods={
      name:“男士衬衣”,
      type:“男装”,
      price:200,
      color:“白色”,
      showInfo:function(){
      alert(“商品名称:”+this.name+"\n商品类型:"+this.type+"\n商品价格:"
      +this.price+"\n商品颜色:"+this.color);
      },
      showColor:function(){
      alert(“商品颜色:”+this.color);
      }
      };
      //方法的调用
      goods.showInfo();
      //eval()转换
      var movie=eval("("+good+")");
      //对象方法的调用
      movie.showInfo();

    在数据传输过程中,JSON数据往往以字符串的形式进行传输,所以在页面中需要通过:
    1.将JSON字符串转成JSON对象前,需在JSON字符串两侧添加一对括号“()”。
    2.使用eval()方法将该字符串强制转换成JSON对象

    第八章 BOM与DOM编程
    BOM模型:
     浏览器对象模型BOM定义了JavaScript操作浏览器的接口,提供了与浏览器窗口交互的功能,例如获取浏览器窗口大小、版本信息、浏览历史记录等
     BOM是用于描述浏览器中对象与对象之间层次关系的模型,提供了独立于页面内容、并能够与浏览器窗口进行交互的对象结构
    DOM模型(文档对象模型):
     DOM(文档对象模型)属于BOM的一部分,用于对BOM中的核心对象document进行操作
     DOM是一种与平台、语言无关的接口,允许程序和脚本动态地访问或更新HTML或XML文档的内容、结构和样式,且提供了一系列的函数和对象来实现访问、添加、修改及删除操作

    window对象(重点):
    属 性 描 述
    closed 只读,返回窗口是否已被关闭
    defaultStatus 可返回或设置窗口状态栏中的缺省内容
    innerWidth 只读,窗口的文档显示区的宽度(单位像素)
    innerHeight 只读,窗口的文档显示区的高度(单位像素)
    name 当前窗口的名称
    opener 可返回对创建该窗口的window对象的引用
    parent 如果当前窗口有父窗口,表示当前窗口的父窗口对象
    self 只读,对窗口自身的引用
    top 当前窗口的最顶层窗口对象
    status 可返回或设置窗口状态栏中显示的内容

    window对象的方法:

    1. open()方法——用于打开一个新窗口
      例:var targetWindow=window.open(url,name,features,replace)
       参数features用于设置窗口在创建时所具有的特征,如标题栏、菜单栏、状态栏、是否全屏显示等特征。
    2. close()方法——用于关闭指定浏览器窗口
      例:targetWindow.close()
       当关闭当前页面时,参数targetWindow可以是window对象,也可省略
       当关闭当前页面中所打开的其他页面时,windowObject为目标窗口对象
    3. setTimeout()方法——设置计时器,在指定的时间间隔后调用函数或计算表达式,且仅执行一次。
      例:var id_Of_timeout=setTimeout(code,millisec)
       参数code必需,表示被调用的函数或需要执行的JavaScript代码串
       参数millisec必需,表示在执行代码前需等待的时间(以毫秒计)
       code代码仅被执行一次
       setTimeout()方法返回一个计时器的ID
    4. clealTimeout()方法——用于取消setTimeout()放置的计时器
      例:clearTimeout(id_Of_timer);
    5. setInterval()方法——按指定周期调用函数或计算表达式(执行多次)
    6. clearInerval()方法——用于取消setInterval()放置的计时器
      例:clearInterval(id_Of_Interval)

    location对象:
     location对象中包含当前页面的URL地址的各种信息,例如:协议、主机服务器和端口号等。

    history对象:
     history对象用于保存用户在浏览网页时所访问过的URL地址

    navigator对象:
     navigator对象中包含浏览器的相关信息,如浏览器名称、版本号和脱机状态等信息。

    document对象(重点):
     document对象是window对象的子对象,是指在浏览器窗口中显示的内容部分
    属 性 描 述
    body 提供对body元素的直接访问
    cookie 设置或查询与当前文档相关的所有cookie
    referrer 返回载入当前文档的文档URL
    URL 返回当前文档的URL
    lastModified 返回文档最后被修改的日期和时间
    domain 返回下载当前文档的服务器域名
    all[] 返回对文档中所有HTML元素的引用,all[]已经被documen对象的getElementById()等方法替代
    forms[] 返回对文档中所有的form对象集合
    images[] 返回对文档中所有的image对象集合,但不包括由标签内定义的图像

    document对象的属性:

    1. referrer属性
    2. cookie属性
       cookie是浏览器在客户端保存的与服务器端的会话信息,该信息允许服务器端访问
       cookie本质上是一个字符串
      例:document.cookie=cookieStr;
      cookieStr是要保存的cookie值,使用时需要注意以下几项:
       cookie本身有一定的大小限制,每个cookie所存放的数据不能超过4KB
       cookie是由一些键值对(cookieName-value)构成;根据cookieName来检索cookie中信息,包括expires、path和domain等信息
       一般情况下,cookie信息都没有经过编码;当cookie中包含空格、分号、逗号等特殊符号时,需要使用escape()函数进行编码;当从cookie中取出数据时,需要使用unescape()函数进行解码
      例:document.cookie=cookieSplit+cookieName+"="+escape(userName)+","+escape(userPwd) +";expires="+expireDate.toGMTString();
      //cookie取值
      var currentCookie=document.cookie;
      var startPosition=currentCookie.indexOf(beginPart);
      cookieData=currentCookie.substring(startPosition+(beginPart).length,endPosition);
      //对cookie数据进行分割
      var datas=cookieData.split(",");

    document对象的方法:
     document对象的方法从整体上分为两大类:
     对文档流的操作
     对文档元素的操作
     open()、write()、writeln()和close()方法可以实现文档流的打开、写入、关闭等操作
     getElementById()、getElementsByName()、getElementsByTagName()等方法用于操作文档中的元素

    1. write()和writeln()方法
       write()和writeln()方法都是用于向文档流中输出内容;
       当输出内容为纯文本时,将在页面中直接显示;
       当输出内容为HTML标签时,由浏览器解析后并进行显示。
    2. getElementById()方法——重点
       用于返回指定ID的元素;当页面中有多个ID相同的元素时,只返回第一个符合条件的元素
    3. getElementsByName()
       用于返回指定name属性的元素集合,多用于单行文本框和复选框等具有name属性的元素
    4. getElementsById()方法——重点
       用于返回指定标签名的元素集合,元素在集合中的顺序即是其在文档中的顺序
       当参数为“*”时,将返回页面中所有的标签元素
    5. getElementsByClassName()方法——重点
       用于返回指定class属性的元素集合,
    6. querySeletor()方法
       用于返回指定CSS选择器的元素;当满足条件的有多个时,只返回第一个元素
    7. quertSeletorAll()方法
       是HTML 5中新引入的方法,返回指定CSS选择器的元素集合

    Form对象:
     Form对象是document对象的子对象,通过Form对象可以实现表单验证等效果
     通过Form对象可以访问表单对象的属性及方法

    Table对象:
     在页面设计时,经常需要控制表格的数据与结构,比如对表格添加行、删除行等操作
     在JavaScript中提供了Table、TableRow和TableCell对象用于对表格、行和单元格进行操作

    Element对象的常用属性:
    属 性 描 述
    attributes 返回指定节点的属性集合

    常用方法:
    方 法 描 述
    getAttribute() 返回指定属性对应的属性值
    getElementsByTagName() 返回具有指定标签名的元素子元素集合,类型为NodeList
    setAttribute() 为节点添加属性;当属性存在时,则进行替换

    事件处理:

    第一章 JavaWeb入门
    动态网站的特征:
     交互性:根据用户的操作以及请求,网页会动态改变并响应。
     自动更新:无需手动更新页面,系统会自动生成新的页面,从而大大减少网站维护成本。
     多样性:在不同时间、不同用户访问同一网页时会显示不同的内容。

    Java Web应用,是用Java技术来解决相关Web互联网应用领域的技术总和,并遵循统一的Java EE技术标准。
    Javaweb应用优势:
     平台无关性
     效率
     访问Java API
     重用性

    第二章 Servlet基础
    Servlet简介
     Servlet是基于Java语言的Web服务器端编程技术,是Sun公司提供的一种实现动态网页的解决方案。
     按照Java EE规范定义,Servlet是运行在Servlet容器中的Java类,它能处理Web客户的HTTP请求,并产生HTTP响应。

    Servlet特点:
     高效
     方便
     功能强大
     可移植性好

    servlet与servlet容器
     Servlet运行在服务器端,由Servlet容器所管理,Servlet容器也叫Servlet引擎,是Web服务器或应用服务器的一部分,用于在发送的请求和响应之上提供网络服务、解码基于MIME的请求、格式化基于MIME的响应。

    servlet接口
     javax.servlet.Servlet的定义如下:public interface Servlet
     所有的Servlet都必须直接或间接地实现javax.servlet.Servlet接口;
     Servlet接口规定了必须由Servlet类实现并且由Servlet引擎识别和管理的方法集;
     Servlet接口的基本目标是提供与Servlet生命周期相关的方法,如:init()、service()和destroy()等。

    Servlet运行周期
     在Servlet生命周期中,会经过创建、初始化、服务可用、服务不可用、处理请求、终止服务、销毁七种状态。
     Servlet生命周期可分为四个阶段:加载和实例化、初始化、处理请求、销毁。

    加载和实例化:
     Servlet容器在如下时刻加载和实例化一个Servlet:
     在服务器运行中,客户机首次向Servlet发出请求时;
     重新装入Servlet时,如:服务器重新启动、Servlet被修改;
     在为Servlet配置了自动装入选项(load-on-startup)时,服务器在启动时会自动装入此Servlet。
    初始化:
     Servlet实例化后,Servlet容器将调用Servlet的init(ServletConfig config)方法来对Servlet实例进行初始化;
     如果初始化没有问题,Servlet在Web容器中会处于服务可用状态;如果初始化失败,Servlet容器会从运行环境中清除掉该实例;
     当Servlet运行出现异常时,Servlet容器会使该实例变为服务不可用状态。Web程序维护人员可以设置Servlet,使其成为服务不可用状态,或者从服务不可用状态恢复成服务可用状态。
     处理请求:
     服务器接收到客户端请求,会为该请求创建一个“请求”对象和一个“响应”对象并调用service()方法,service()方法再调用其他方法来处理请求;
     在Servlet生命周期中,service()方法可能被多次调用。当多个客户端同时访问某个Servlet的service()方法时,服务器会为每个请求创建一个线程,这样可以并行处理多个请求,减少请求处理的等待时间,提高服务器的响应速度。但同时也要注意对同一对象的并发访问问题。
    销毁:
     当Servlet容器需要终止Servlet(比如Web服务器即将被关掉或需要出让资源),它会先调用Servlet的destroy()方法使其释放正在使用的资源。在Servlet容器调用destroy()方法之前,必须让当前正在执行service()方法的任何线程完成执行,或者超过了服务器定义的时间限制。在destroy()方法完成后,Servlet容器必须释放Servlet实例以便被垃圾回收。

    Servlet的配置
    使用@WebServlet配置:
    例——@WebServlet("/manager/homeCostServlet")
    在web.xml文件中配置:
    例:
    ———用于声明Servlet
    safeCode ——指定servlet的名字
    com.servlet.SafeCode——servlet对应的类名

    ———用于指定Servlet的URL映射
    safeCode ——指定以什么方式(名字)访问Servlet
    /safecode ——指定访问路径(注意加斜杠)

    Servlet的应用
    数据处理:
    超链接形式的数据请求语法格式:
    <a href=”URL地址?参数=参数值[&参数=参数值…]”>链接文本
    例:
    下一页
    <ahref="KaTeX parse error: Expected 'EOF', got '&' at position 82: …getHomeCostById&̲id={item.id}">修改

    当用户通过超链接发送的请求到达Servlet容器时,包含数据的请求将被容器转换为HttpServletRequest对象。对请求数据的处理工作便由HttpServletRequest对象完成。
    HttpServletRequest对象常用的数据处理方法有:
     public String getParameter(String name)
    返回由name指定的用户请求参数的值。
     public String[] getParameterValues(String name)
    返回由name指定的一组用户请求参数的值。
     public Enumeration getParameterNames()
    返回所有客户请求的参数名。

    重定向与转发(重点):
    重定向——重定向是指由原请求地址重新定位到某个新地址,原有的request请求失效,客户端看到的是新的request请求返回的响应结果,客户端浏览器地址栏变为新请求地址

    重定向通过HttpServletRequest对象的sendRedirect()方法实现,该方法会通知客户端去重新访问新指定的URL地址,其语法格式如下:
    public void sendRedirect(String location)——其中location参数用以指定重定向的URL,它可以是相对路径或绝对路径。
    例:response.sendRedirect("/chapter02/index.jsp");

    请求转发——请求转发是指将请求再转发到其他地址,转发过程中使用的是同一个request请求,转发后浏览器地址栏内容不变。
     请求转发的过程发生在服务器内部,对客户端是透明的。服务器只能从当前应用内部查找相应的转发资源,而不能转发到其它应用的资源。
     请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发给另外一个资源,并让该资源对此请求进行响应。
    例: request.getRequestDispatcher("/manager.jsp").forward(request, response);

    请求转发与重定向的区别:
     转发只能将请求转发给同一个Web应用中的组件;而重定向不会受限于此。
     重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,而请求转发不会。
     重定向对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;请求转发在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。
     请求转发调用者与被调用者之间共享相同的request对象和response对象,而重定向的两个对象是独立的。

    第三章 Servlet核心接口
    ServletContext接口
     Servlet容器在启动一个Web应用时,会为该应用创建一个唯一的ServletContext对象供该应用中的所有Servlet对象共享,Servlet对象可以通过ServletContext对象来访问容器中的各种资源。
    应用域属性:
     ServletContext对象可以理解为容器内的一个共享空间,可以存放具有应用级别作用域的数据,Web应用中的各个组件都可以共享这些数据。这些共享数据以key/value的形式存放在ServletContext对象中,并以key作为其属性名被访问。
    存取方法:
    方法 方法描述
    setAttribute(String name,Object object) 把一个对象和一个属性名绑定并存放到ServletContext中,参数name指定属性名,参数Object表示共享数据
    getAttribute(String name) 根据参数给定的属性名,返回一个Object类型的对象
    getAttributeNames() 返回一个Enumeration对象,该对象包含了所有存放在ServletContext中的属性名
    removeAttribute(String name) 根据参数指定的属性名,从ServletContext对象中删除匹配的属性
    应用信息获取方法:
    方法 方法描述
    getContextPath() 返回当前Web应用的根路径
    getServletContextName() 返回Web应用的名字。即元素中元素的值
    getRequestDispatcher(String path) 返回一个用于向其它Web组件转发请求的RequestDispatcher对象
    getContext(String uripath) 根据参数指定的URL返回当前Servlet容器中其他Web应用的ServletContext()对象,URL必须是以“/”开头的绝对路径

    HttpServletRequest接口
     在Servlet API中,ServletRequest接口被定义为用于封装请求的信息,ServletRequest对象由Servlet容器在用户每次请求Servlet时创建并传入Servlet的service()方法中;

    获取请求行信息:
    方法 方法描述
    getMethod() 获取请求使用的HTTP方法,例如,GET、POST、PUT
    getRequestURI() 获取请求行中的资源名部分
    getProtocol() 获取使用的协议及版本号。例如,HTTP/1.1、HTTP/1.0
    getQueryString() 获取请求URL后面的查询字符串,只对GET有效
    getServletPath() 获取Servlet所映射的路径
    getContextPath() 获取请求资源所属于的Web应用的路径
    request.setCharacterEncoding(“UTF-8”);//设置请求对象的字符编码

    这章废话太多了,待会儿回来总结

    第四章 会话跟踪
    无状态的HTTP协议
     HTTP协议是一种无状态协议。
     HTTP协议采用“连接-请求-应答-关闭连接”模式。
    会话跟踪技术及其含义
     会话跟踪技术是一种在客户端与服务器间保持HTTP状态的解决方案。从开发角度考虑,是使上一次请求所传递的数据能够维持状态到下一次请求,并且辨认出是否相同的客户端所发送出来的。
    Cookie技术
     Cookie技术是一种在客户端保持会话跟踪的解决方案。
     Cookie是指某些网站为了辨别用户身份而储存在用户终端上的文本信息(通常经过加密)。
     Cookie在用户第一次访问服务器时,由服务器通过响应头的方式发送给客户端浏览器;当用户再次向服务器发送请求时会附带上这些文本信息
    Cookie的作用:
     通过Cookie,服务器在接收到来自客户端浏览器的请求时,能够通过分析请求头的内容而得到客户端特有的信息,从而动态生成与该客户端相对应的内容。(比如用户信息的记录)

    Cookie对象的创建:
    例:Cookie unameCookie = new Cookie(“username”,“QST”);
     两个参数分别代表名字和属性值

    HttpServletResponse对象通过addCookie()方法,以增加“Set-Cookie”响应头的方式(不是替换原有的)将Cookie对象响应给客户端浏览器,存储在客户端机器上
    如:response.addCookie( unameCookie );
    获取并遍历客户端Cookie:
     存储在客户端的Cookie,通过HttpServletRequest对象的getCookies()方法获取,该方法返回所访问网站的所有Cookie的对象数组,遍历该数组可以获得各个Cookie对象。
    例:
    Cookie[] cookies = request.getCookie();
    if(cookies != null)
    for(Cookie c : cookies){
    out.println(“属性名:” + c.getName());
    out.println(“属性值” + c.getValue());
    }

    Cookie的访问路径:
    在默认情况下,Cookie只能被创建它的应用获取。Cookie的setPath()方法可以重新指定其访问路径。
    例:
    unameCookie.setPath("/chapter04/jsp/");

    Cookie的存活时间:
     默认情况下,Cookie保存在浏览器内存中,在浏览器关闭时失效,这种Cookie也称为临时Cookie(或会话Cookie)。
     若要使Cookie较长时间的保存在磁盘上,可以通过Cookie对象的setMaxAge()方法设置其存活时间,保存在磁盘上的Cookie也称为持久Cookie。
    例:unameCookie.setMaxAge(72460*60)(以秒为单位)

    Cookie的缺点(主要集中于安全性和隐私保护上):
     Cookie可能被禁用
     Cookie是与浏览器相关的
     Cookie可能被删除
     Cookie的大小和个数受限
     Cookie安全性不够高

    Session技术
     Session技术是指使用HttpSession对象实现会话跟踪的技术,是一种在服务器端保持会话跟踪的解决方案。
     HttpSession对象会在用户第一次访问服务器时由容器创建(注意只有访问JSP、Servlet等程序时才会创建,只访问HTML、IMAGE等静态资源并不会创建),当用户调用其失效方法(invalidate()方法)或超过其最大不活动时间时会失效。在此期间,用户与服务器之间的多次请求都属于同一个会话。

    获取HttpSession对象:
    例:HttpSession session = request.getSession();

    HttpSession接口的方法:
    方法 描述
    void setAttribute(String key,Object value) 以key/value的形式将对象保存在HttpSession对象中
    Object getAttribute(String key) 通过key获取对象值
    void removeAttribute(String key) 从HttpSession对象中删除指定名称key所对应的对象
    例:
    //存储会话域属性"username",值为"QST"
    session.setAttribute(“username”,“QST”);
    //通过属性名"username"从会话域中获取属性值
    String uname = (String)session.getAttribute(“username”);
    //通过属性名将属性从会话域中移除
    session.removeAttribute(“username”);

    第五章 JSP语法(重点)
    JSP与Servlet
     JSP是一种服务器端脚本语言,其出现降低了Servlet编写页面的难度。JSP本质上就是Servlet,实际上JSP是首先被翻译成Servlet后才编译运行的,因此JSP能够实现Servlet所能够实现的所有功能。
    相比Servlet,JSP有以下优点:
     输出、阅读和维护更加容易。
     JSP页面的设计可以使用标准的设计工具(Adobe DreamWeaver等)
     JSP通过标签库等机制能很好的与HTML结合

    JSP的执行原理:
     JSP同Servlet一样,都运行在Servlet容器中,当同一个JSP页面再次被请求时,只要该JSP文件没有发生过改动,容器将直接调用已装载的字节码文件,而不会再执行翻译和编译的过程,从而大大提高了服务器的性能。

     JSP的执行过程经过“请求-翻译-编译-执行-响应”五个过程。

    JSP基本结构:
     JSP页面就是带有JSP元素的常规Web页面,它由模板文本和JSP元素组成。
     在一个JSP页面中,所有非JSP元素的内容称为模板文本(template text)。模板文本可以是任何文本,如:HTML、XML,甚至可以是纯文本。

    JSP的三种基本元素:
    脚本元素:
     脚本元素允许用户将小段的代码(一般情况下是Java代码)添加到JSP页面中
     JSP脚本元素包括:脚本、表达式、声明和注释。
    JSP脚本,语法:<% JSP脚本 %>
    例:<%
    if(Calendar.getInstance().get(Calendar.AM_PM) == Calendar.AM){
    %>
    JSP表达式——一种简单的输出形式,语法:<%= 表达式 %>
    JSP声明——用于声明一个或多个变量和方法,语法<%! JSP声明 %>
    例:<%!int i=0;%>
    <%!public String f(int i){
    if(i<3)
    return ("…");
    return “”;
    }
    %>
    JSP注释,语法——<%-- --%>

    指令元素:
     JSP指令用来向JSP容器提供编译信息。
     指令并不向客户端产生任何输出,所有的指令都只在当前页面中有效。
    JSP指令元素包括三种:
     page指令
     include指令
     taglib指令

    page指令(重点):
     page指令描述了和页面相关的信息,如:导入所需类包、指明输出内容类型、控制Session等。
     page指令一般位于JSP页面的开头部分,在一个JSP页面中,page指令可以出现多次,但是在每个page指令中,每一种属性却只能出现一次(import属性除外),重复的属性设置将覆盖掉先前的设置。
    例:<%@page language=“java” contentType=“text/html; charset=UTF-8”%>

    import指令:
     import属性用来指定当前JSP页面中导入的Java软件包或类名列表。如果需要导入多个类或包,可以在中间使用逗号隔开或使用多个page指令。
    例:<%@page import="java.util.* "%>

    include指令:
     include指令的作用是在页面翻译期间引入另一个文件,被包含的文件可以是JSP、HTML或文本文件。
    例:<%@include file=“header.jsp”%>

    taglib指令:
     taglib指令用于指定JSP页面所使用的标签库,通过该指令可以在JSP页面中使用标签库中的标签。
    例:<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>

    几种常用的动作元素:
     jsp:include动作用于在页面被请求时引入一个文件;
     jsp:forward动作用于把请求转发到另一个页面;
     jsp:useBean动作用于查找或实例化一个JavaBean;
     jsp:setProperty动作用于设置JavaBean的属性;
     jsp:getProperty动作用于输出某个JavaBean的属性。

    提一下include动作元素
    jsp:include动作可以包含一个或几个jsp:param子动作,用于向要引入的页面传递数据。
    语法:<jsp:include page=“urlSpec” flush=“true”>
    <jsp:param name=“name” value=“value”/>

    </jsp:include>
    其中:
     page指定引入文件的地址;
     flush="true"表示设定是否自动刷新缓冲区,默认为false,可省略;在页面包含大量数据时,为缩短客户端延迟,可将一部分内容先行输出;
     name指定传入包含文件的变量名;
     value指定传入包含文件的变量名对应的值。

    include指令元素与include动作元素的区别:对包含文件的处理方式和处理时间不同。
     include指令元素是在翻译阶段就引入所包含的文件,被处理的文件在逻辑和语法上依赖于当前JSP页面,其优点是页面的执行速度快。
     include动作元素是在JSP页面运行时才引入包含文件所产生的应答文本,被包含的文件在逻辑和语法上独立于当前JSP页面,其优点是可以使用param子元素更加灵活地处理所需要的文件,缺点是执行速度要慢一些。

    第六章 JSP内置对象
     JSP内置对象是指在JSP页面中,不用声明就可以在脚本和表达式中直接使用的对象。

    JSP的九种内置对象
    对象名称 类型 功能说明
    request javax.servlet.http.HttpServletRequest 请求对象,提供客户端HTTP请求数据的访问
    response javax.servlet.http.HttpServletResponse 响应对象,用来向客户端输出响应
    out javax.servlet.jsp.JspWriter 输出对象,提供对输出流的访问
    session javax.servlet.http.HttpSession 会话对象,用来保存服务器与每个客户端会话过程中的信息
    application javax.servlet.ServletContext 应用程序对象,用来保存整个应用环境的信息
    pageContext javax.servlet.jsp.PageContext 页面上下文对象,用于存储当前JSP页面的相关信息
    config javax.servlet.ServletConfig 页面配置对象,JSP页面的配置信息对象
    page javax.servlet.jsp.HttpJspPage 当前JSP页面对象,即this
    exception java.lang.Throwable 异常对象,用于处理JSP页面中的错误

    与Input/Output有关的内置对象:
    request对象:
     request对象即请求对象,表示客户端对服务器发送的请求,主要用于接受客户端通过HTTP协议传送给服务器端的数据。
     request对象的类型为javax.servlet.http.HttpServletRequest,与Servlet中的请求对象为同一对象。
     request对象的作用域为一次request请求。
    常用方法:
     void setCharacterEncoding(String charset):设置请求体参数的解码字符集;
     String getParameter(String name):根据参数名获取单一参数值;
     String[] getParameterValues(String name):根据参数名获取一组参数值;
     void setAttribute(String name,Object value):以名/值的方式存储请求域属性;
     Object getAttribute(String name):根据属性名获取存储的对象数据。

    response对象:
     response对象即响应对象,表示服务器对客户端的响应。主要用来将JSP处理后的结果传回到客户端。response对象类型为javax.servlet.http.HttpServletResponse,与Servlet中的响应对象为同一对象。
     response对象拥有HttpServletResponse接口的所有方法,其常用的方法如下:
     void setContentType(String name):设置响应内容的类型和字符编码;
     void sendRedirect(String url):重定向到指定的URL资源。

    out对象:
     out对象即输出对象,用来控制管理输出的缓冲区(buffer)和输出流(output stream)向客户端页面输出数据。
     out对象的方法可以分为两类:
     数据的输出;
     缓冲区的处理
    与Context有关的内置对象:
    session对象:
     session对象即会话对象,表示浏览器与服务器之间的一次会话。
     一次会话的含义是:从客户端浏览器连接服务器开始,在关闭浏览器或主动退出后,会话结束。这个过程可以包含浏览器与服务器之间的多次请求与响应。
     session对象的类型为javax.servlet.http.HttpSession,session对象具有HttpSession接口的所有方法,其常用方法如下:
     void setAttribute(String name, Object value):以名/值对的方式存储session域属性;
     Object getAttribute(String name):根据属性名获取属性值;
     void invalidate():使session对象失效,释放所有的属性空间。

    application对象:
     application对象即应用程序上下文对象,表示当前应用程序运行环境,用以获取应用程序上下文环境中的信息。
     application对象在容器启动时实例化,在容器关闭时销毁。作用域为整个Web容器的生命周期。
     application对象实现了javax.servlet.ServletContext接口,具有ServletContext接口的所有功能。application对象常用方法如下:
     void setAttribute(String name,Object value):以名/值对的方式存储application域属性;
     Object getAttribute(String name):根据属性名获取属性值;
     void removeAttribute(String name):根据属性名从application域中移除属性。

    pageContext对象:
     pageContext即页面上下文对象,表示当前页面运行环境,用以获取当前JSP页面的相关信息。
     pageContext对象作用范围为当前JSP页面。

    与Servlet有关的对象:
    page对象:
     page对象即this,代表JSP本身,更准确地说它代表JSP被翻译后的Servlet,因此它可以调用Servlet类所定义的方法。page对象的类型为javax.servlet.jsp.HttpJspPage,在实际应用中,page对象很少在JSP中使用。
    config对象:
     config对象即页面配置对象,表示当前JSP页面翻译后的Servlet的ServletConfig对象,存放着一些初始的数据结构。
     config对象实现于java.servlet.ServletConfig接口。config对象和page对象一样都很少被用到。

    与error有关的对象
    exception对象:
     exception对象即异常对象,表示JSP页面产生的异常。
     如果一个JSP页面要应用此对象,必须将此页面中page指令的isErrorPage属性值设为true,否则无法编译

    JSP的四种作用域
     对象的生命周期和可访问性称为作用域(scope),在JSP中有四种作用域:页面域、请求域、会话域和应用域。
    四种作用域的生命周期和可访问性介绍如下:
     页面域(page scope),页面域的生命周期是指页面执行期间。存储在页面域的对象只对于它所在页面是可访问的。
     请求域(request scope),请求域的生命周期是指一次请求过程,包括请求被转发(forward)或者被包含(include)的情况。存储在请求域中的对象只有在此次请求过程中才可以被访问。
     会话域(session scope),会话域的生命周期是指某个客户端与服务器所连接的时间;客户端在第一次访问服务器时创建会话,在关闭浏览器或主动退出后,会话结束。存储在会话域中的对象在整个会话期间(可能包含多次请求)都可以被访问。(浏览器启动期间)
     应用域(application scope),应用域的生命周期是指从服务器开始执行服务到服务器关闭为止,是四个作用域中时间最长的。存储在应用域中的对象在整个应用程序运行期间可以被所有JSP和Servlet共享访问,在使用时要特别注意存储数据的大小和安全性,否则可能会造成服务器负载过重和线程安全性问题。

    四种作用域分别对应pageContext、request、session和application四个内置对象。

    第七章 JavaBean
     JavaBean是一种特殊的Java类,以封装和重用为目的,在类的设计上遵从一定的规范,以供其它组件根据这种规范来调用。

    JavaBean最大的优势在于重用,同时它又具有以下特性:
     易于维护、使用、编写;
     封装了复杂的业务逻辑;
     可移植性;
     便于传输,既可用于本地也可用于网络传输。

    一个标准的JavaBean需要遵从以下规范:
     JavaBean是一个公开的(public)类,以便被外部程序访问;
     具有一个无参的构造方法(即一般类中默认的构造方法),以便被外部程序实例化时调用;
     提供setXxx()方法和getXxx()方法,以便让外部程序设置和获取其属性

    JSP提供的访问JavaBean 的3个动作元素
     jsp:useBean:创建或查找JavaBean实例对象
     jsp:setProperty:设置JavaBean对象的属性值
     jsp:getProperty:获取JavaBean对象的属性值

    jsp:useBean元素:
     jsp:useBean元素用于在某个指定的作用域范围内查找一个指定名称的JavaBean对象,如果存在则直接返回该JavaBean对象的引用,如果不存在则实例化一个新的JavaBean对象,并将它按指定的名称存储在指定的作用域范围内。
    例:<jsp:useBean id=“beanInstanceName” class=“package.class”
    scope=“page|request|session|application”/>
    其中:
     id属性用于指定JavaBean对象的引用名称和其存储域属性名;
     class属性用于指定JavaBean对象的完整类名;
     scope属性用于指定JavaBean对象的存储域范围,其取值只能是page、request、session、application四个值中的一个,默认为page。

    jsp:setProperty元素:
     jsp:setProperty元素用于设置JavaBean对象的属性,相当于调用JavaBean对象的setter方法。
    例:<jsp:setProperty name=“beanInstanceName”
    property=“propertyName” value=“propertyValue” |
    property=“propertyName” param=“parameterName” |
    property=“propertyName” |
    property="*"
    />
    其中:
     name属性用于指定JavaBean对象的名称,其值应与jsp:useBean标签中的id属性值相同;
     property属性用于指定JavaBean对象的属性名;
     value属性用于指定JavaBean对象的某个属性的值,可以是一个字符串也可以是一个表达式,它将被自动转换为所要设置的JavaBean属性的类型,该属性可选;
     param属性用于将一个请求参数的值赋给JavaBean对象的某个属性,它可以将请求参数的字符串类型的返回值转换为JavaBean属性所对应的类型,该属性可选。value和param属性不能同时使用。

    jsp:getProperty元素:
     jsp:getProperty元素用于读取JavaBean对象的属性,等同于调用JavaBean对象的getter方法,然后将读取的属性值转换成字符串后输出到响应正文中。
    语法:<jsp:getProperty name=“beanInstanceName” property=“propertyName”/>
    其中:
     name属性用于指定JavaBean对象的名称,其值应与jsp:useBean标签的id属性值相同;
     property属性用于指定JavaBean对象的属性名。

    第十一章 MVC设计模式
     MVC(Model-View-Controller)模式是一种软件体系结构,有三个组成部分:Model(模型)、View(视图)和Controller(控制器)。MVC结构的每个部分具有各自的功能与作用,并以最少的耦合协同工作,从而提高应用的可扩展性和可维护性。

     模型(Model)层
     模型层是应用系统的核心层,负责封装数据和业务操作。
     模型层可以分为数据模型和业务模型。数据模型用来对用户请求的数据和数据库查询的数据进行封装;业务模型用来对业务处理逻辑进行封装。
     控制器(Controller)将用户请求数据和业务处理逻辑交给相应的模型,视图(View)从模型中获取数据,模型发生改变时通知视图数据的更新。
     开发人员在后期对项目的业务逻辑维护时,只需要对模型层做更新、变动,而不需要牵扯到视图层,这样一来,即可将网页设计和程序处理完整的分离,又可使日后的维护更具弹性。
     视图(View)层
     视图层主要指与用户交互的界面,即应用程序的外观。这层主要被当作用户的操作接口,让用户输入数据和显示数据处理后的结果。
     用户通过视图输入数据,并将数据转交给控制器,控制器根据用户请求调用相应的数据模型和业务模型进行处理,然后根据处理结果选择合适的视图,视图再调用模型对结果数据进行显示,同时当模型更新数据时,视图也随之更新。
     控制(Controller)层
     控制层主要的工作就是控制整个系统处理的流程,其角色通常是介于视图层和模型层之间,进行数据传递和流程转向。
     控制层接收用户的请求和数据,然后做出判断将请求和数据交由哪个模型来处理,最后将结果交由视图来显示模型返回的数据。

    Model 1和Model 2两种应用模式:
     Model 1模式是以JSP为主的开发模式;
     Model 2模式即Java Web应用的MVC模式。(重点)

    Model2模式:
    在Model 2模式中,通过JavaBean、EJB等组件实现MVC的模型层;通过JSP实现MVC的视图层;通过Servlet实现MVC的控制

    • 2
      点赞
    • 2
      收藏
      觉得还不错? 一键收藏
    • 1
      评论

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

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

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值