Java高级特性
Enum
声明了Enum的类构造器只允许私有。
特点:
1、枚举的直接父类是java.lang.Enum,但是不能显示继承Enum,且其子类也不能被继承。
2、枚举就相当于一个类,可以定义构造方法、成员变量、普通方法和抽象方法。
3、默认私有的构造方法,即使不写访问权限也是private。
4、每个实例分别用一个全局常量表示,枚举类型的实例个数有限、固定,不能使用new关键字。
5、枚举实例必须位于枚举中最开始部分,每个实例以逗号开始分割,枚举实例列表的后面要有分号与其他成员相分割。
泛型
泛型是jdk5的新特性,所谓的泛型就是参数化类型 ,即在定义类时不指定类中属性的具体类型,而由外部在声明及实例化对象时指定具体的类型。这种类型参数可以用在类、接口和方法的创建中,分别为泛型类、泛型接口、泛型方法。Java语言引入泛型的好处是更安全简单。
类型通配符:
1、一般使用?代替具体的类型实参,表示可以接受此类型的任意泛型对象。
2、上限:,设置类型参数的上限。
3、下限:,设置类型参数下限。
反射
反射主要是指通过类加载,动态的访问,检测和修改类本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语句。
反射的核心概念“一切的操作都将使用Object完成,类、数组的引用都可以使用Object进行接收。
反射常用类:
1、class类
三种获取Class类实例的方法:
//方法一(不会进行初始化)
Class cl1=A.class;
//方法二(会进行静态初始化)
Class cl2=Class.forName("com.woniu.reflectdemo.A");
//方法三(进行初始化)
Classcl3=new A().getClass();
class类常用操作:
static Class> forName(String name) 传入完整的”包.类”名称实例化Class对象;
Constructor[] getConstructors() 得到一个类的全部public构造方法(包括父类);
Field[] getDeclaredFields() 得到本类中定义的全部属性(不包括父类);
Field[] getFields() 取得本类的全部public属性(包括父类);
Method[] getMethods() 取得本类的全部public方法(包括父类);
Method getMethod(Stringname,Class...parameterTypes)返回一个Method对象,并设置一个方法中的所有参数类型;
Class[] getInterfaces() 得到一个类中所有实现的全部接口;
String getName() 得到一个类完整的“包.类”名称;
Package getPackage() 得到一个类的包;
Class getSuperClass() 得到一个类的父类;
Object newInstance() 根据Class定义的类实例化对象;
Class> getComponentType() 返回表示数组类型的Class;
boolean isArray() 判断此Class是否是一个数组;
/通过反射获取类的修饰符及类名
Class acl= A.class;
/获取访问修饰符
acl.getModifiers();
获取类名
acl.getName();
acl.getSimpleName();
通过无参构造创建对象
1.获取类的class实例
调用无参构造
A a= acl.newInstance();
2.通过构造器创建对象
取本类构造器
Constructor con= acl.getDeclaredConstructor();
无参构造
A a2=con.newInstance();
有参构造
Constructor con2= acl.getDeclaredConstructor(int.class);
A a3=con2.newInstance(1);
2、constructor类
常用方法:
int getModifiers() 得到构造方法的修饰符;
String getName() 得到构造方法的名称;
Class>[] getParameterTypes() 得到构造方法中参数的类型;
String toString() 返回此构造方法的信息;
T newInstance(Object...initargs) 向构造方法中传递参数,实例化对象
3、field类
Object get(Object obj) 得到一个对象中属性的具体内容;
void set(Object obj,Object value) 设置指定对象中属性的具体内容;
int getModifiers() 得到属性的修饰符;
String getName() 返回此属性的名称;
boolean isAccessible() 判断此属性是否可被外部访问;
void setAccessible(boolean flag) 设置一个属性是否可被外部访问;
String toString() 返回此Field类的信息;
static void setAccessible(AccessibleObject[]array,boolean flag)设置一组属性是否可被外部访问;
4、method类
int getModifiers() 取得本方法的访问修饰符;
String getName() 取得方法的名称;
Class>[] getParameterTypes() 得到方法的全部参数类型;
Class> getReturnType() 得到方法的返回值类型;
Class>[] getExceptionTypes() 得到一个方法的全部抛出异常;
Object invoke(Object obj,Object..args) 通过反射调用类中的方法;
注解
Annotation(注解),是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过Annotation,开发人员可以在不改变原有逻辑的条件下,在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证、处理或者进行部署。
Annotation提供了一种为程序元素(包、类、构造器、方法、成员变量、参数、局部变量)设置元数据的方法。Annotation不能运行,他只有成员变量,没有方法。Annotation跟public、final修饰符地位一样,都是 程序元素的一部分,Annotation不能作为一个程序元素使用。
jdk默认提供的Annotation:
1、@Override:限定重写父类方法,如果存在,则正确;反之则报错
2、@Deprecated:用于表示某个程序元素已过时。
3、@SuppressWaring:抑制编译器警告;
4、@SafeVarargs:是JDK7专门为抑制“堆污染”警告提供的。
注解的定义:
public @interface Table{
String name() default “张三”;
int age() default 1;
}
Annotation分类:
1、标记Annotation:没有成员变量的Annotation被称为标记。这种Annotation仅用自身存在与否来为我们提供信息,例如@override。
2、元数据Annotation:包含成员变量的Annotation。因为他们可以接受更多的元数据,因此被称为元数据Annotation。
元注解(注解的注解):
@Retention:用于指定Annotation可以保留多长时间。
1、RetentionPolicy.SOURCE:Annotation只保留在源代码中,编译器编译时,直接丢弃这种
2、Annotation;RetentionPolicy.RUNTIME:编译器把Annotation记录在class文件中。当运行java程序时,JVM会保留该Annotation,程序可以通过反射获取该Annotation的信息;
3、RetentionPolicy.CLASS:编译器把Annotation记录在class文件中。当运行java程序时,JVM中不再保留该Annotation。
@Target:指定Annotation用于修饰哪些程序元素;
ElementType.TYPE:能修饰类、接口或枚举类型;
ElementType.FIELD:能修饰成员变量;
ElementType.METHOD:能修饰方法;
ElementType.PARAMETER:能修饰参数;
ElementType.CONSTRUCTOR:能修饰构造器;
ElementType.ANNOTATION_TYPE:能修饰注解;
ElementType.LOCAL_VARIABLE:可用于局部变量上
ElementType.PACKAGE:用于记录java文件的package
@Documented:用于被修饰的Annotation类将被javadoc工具提取成文档,默认情况下,javadoc不包括注解。
@Inherited:指定Annotation具有继承性。
反射取得注解:
Annotation getAnnotation(Class
annotationClass)
返回该程序元素上存在的指定类型的注解,如
果该类型的注解不存在,则返回null;
Annotation[] getAnnotations() 返回该程序元素上存在的所有注解;
Annotation[] getDeclaredAnnotations() 返回直接存在于此元素上的所有注解;
boolean isAnnotation() 判断元素是否表示一个注解;
boolean isAnnotationPresent(Class<?extends Annotation> annotationClass)判断该程序元素上是否存在指定类型的注解,如果存在则返回true,否则返回false;
网络协议
IP:网络之间互连的协议(IP)是Internet Protocol
TCP:(TranSMission Control Protocol 传输控制协议)
UDP:User Datagram Protocol的简称, 中文名是用户数据报协议
http/https:超文本传输协议(HTTP,HyperText Transfer Protocol)
FTP:File Transfer Protocol(文件传输协议)
SMTP:(Simple Mail Transfer Protocol)即简单邮件传输协议
OSI模型和TCP/IP模型
区别:1、层数不同。2、复杂度、完整性、全面性不同。3、OSI先建模后协议使用,TCP/IP相反
TCP/IP
1、TCP(TranSMission Control Protocol 传输控制协议)是一种面向连
接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
2、在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,
用户数据报协议(UDP)是同一层内[1] 另一个重要的传输协议。
3、在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之
上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管
道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换
特点
1、面向连接:
通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到
端的通讯。
2、 基于字节流
3、高可靠性:
TCP采用发送应答机制。TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文
段传输成功超时重传。发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收
到应答就重新发送这个报文段。
三次握手
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
第一次握手:主机A发送位码为syn=1,随机产生seq number=200的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq number=500的包;
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1, 以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功完成三次握手,主机A与主机B开始传送数
四次挥手:
第一次挥手:客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
第二次挥手:服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。
和SYN一样,一个FIN将占用一个序号。
第三次挥手:服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
第四次挥手:客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
IP协议
网络层协议,IP协议负责将数据包切割成一小块一小块的,然后每个数据包都加上一个目的地地址,并且通过选择一定的路径发送出去,最后到达目的地以后又重新把一个个的小数据包合并成一个完整的数据。
TCP协议与UDP协议比较
UDP user datagram protocol,同样会在物理线路上创建一条“虚拟信道”,
否则UDP协议无法传输数据!但是,当UDP协议传完数据后,这条“虚拟信道”
就被立即注销了!因此,称UDP是不面向连接的协议!
1、可靠与不可靠
2、快与慢
3、应用场景不同
HTTP
1、C/S Client Server
维护成本高
移植性差
升级安装麻烦
安全性比较强
客户端具有处理能力
2、B/S Browser Server 特殊的C/S
维护成本低
移植性好
简单易用
标准:HTTP hypertext transfer protoc
URL统一资源定位符 ( Uniform Resource Locator)
https:// - 协议类型
www.baidu.com - 主机名
443- 端口号
index.php- 项目资源路径附加信息-
特点
简单、快速、灵活、无连接、无状态、明文传输(https加密)
Cookie和Session
保持用户状态的一种机制。
本质一样,区别是:
Cookie保存在客户端
Session保存在服务器端
1. 打开首页,服务器生成一个session文件a,并且将文件名字符串放到响应头的set-cookie中。
2. 浏览器收到此响应后,将此set-cookie进行保存,以后的请求都用此值作为校验。
3. 进行登录,服务器验证登录成功后,将登录信息保存到该session文件中。
4. 此后每个请求发过来,服务器都根据请求头中的cookie字段的值去找到session文件,对其身份进行验
JDBC
Hibernatehibernate为应用程序提供了高效的O/R关系映射和查询服务,为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。
JPAJPA(Java Persistense API)是EJB3.0的一部分,为其提供了一套O/R关系映射的API,但不仅限于EJB中使用,它也可以在web应用或者应用程序客户端中被使用,甚至在Java桌面程序中被使用。
JDBCJDBC API是一个Java API,可以访问任何类型的数据库的数据,尤其是存储在关系数据库中的数据
JDBC代表Java数据库连接(Java Database Connectivity),它是用于
Java编程语言和数据库之间的数据库无关连接的标准Java API,换句
话说:JDBC是用于在Java语言编程中与数据库连接的API
JDBC API支持用于数据库访问的两层和三层处理模型,但通常,JDBC体系结构由两层组成:JDBC API:提供应用程序到JDBC管理器连接。
JDBC驱动程序API:支持JDBC管理器到驱动程序连接。JDBC驱动程序管理器确保使用正确的驱动程序来访问每个数据源。驱动程序管理器能够支持连接到多个异构数据库的多个并发驱动程
DriverManager:此类管理数据库驱动程序列表。 使用通信子协议将来自java应用程序的连接请求与适当的数据库驱动程序进行匹配。在JDBC下识别某个子协议的第一个驱动程序将用于建立数据库连接。
Driver:此接口处理与数据库服务器的通信。我们很少会直接与Driver对象进行交互。 但会使用DriverManager对象来管理这种类型的对象。 它还提取与使用Driver对象相关的信息。
Connection:此接口具有用于联系数据库的所有方法。 连接(Connection)对象表示通信上下文,即,与数据库的所有通信仅通过连接对象。Statement:使用从此接口创建的对象将SQL语句提交到数据库。 除了执行存储过程之外,一些派生接口还接受参数。
ResultSet:在使用Statement对象执行SQL查询后,这些对象保存从数据库检索的数据。 它作为一个迭代器并可移动ResultSet对象查询的数据。
SQLException:此类处理数据库应用程序中发生的任何错
构建JDBC应用程序涉及以下步骤
1、加载驱动 Class.forName("com.mysql.jdbc.Driver");
2、获取数据库连接 Connection con=DriverManager.getConnection(URL,USERNAME,PASS)
3、准备sql语句 String sql = "select * from class"
4、执行sql语句 Resultset set = state.executeQuery(sql);
5、处理结果集 set.next(),set.getxxx();
6、关闭数据库连接 xxx.close;
7、异常处理
JDBC链接数据库
加载数据库驱动:注册驱动程序最常见的方法是使用Java的Class.forName()方法,将驱动程序的类文件动态加载到内存中,并将其自动注册。这个方法是推荐使用的方法,因为它使驱动程序注册可配置和
Class.forName("com.mysql.jdbc.Driver"
获取数据库链接:加载驱动程序后,可以使用DriverManager.getConnection()方法建立连接, 为了
方便参考,这里列出三个重载的DriverManager.getConnection()方法
getConnection(String url)
getConnection(String url, Properties prop)
getConnection(String url, String user, String password)
Statement:当获得了与数据库的连接后,就可以与数据库进行交互了。 JDBCStatement,CallableStatement和PreparedStatement接口定义了可用于发送SQL或PL/SQL命令,并从数据库接收数据的方法和属性。它们还定义了有助于在Java和SQL数据类型的数据类型差异转换的方
使用statement对象操作数据库:
创建statement对象:Statement stmt = conn.createStatement();
在创建Statement对象后,可以使用它来执行一个SQL语句,它有三
个执行方法可以执行。它们分别是
boolean execute (String SQL) : 如果可以检索到ResultSet对象,则返回一个布
尔值true; 否则返回false。使用此方法执行SQLDDL语句或需要使用真正的动态SQL,
可使用于执行创建数据库,创建表的SQL语句等等。
int executeUpdate (String SQL): 返回受SQL语句执行影响的行数。使用此方法执
行预期会影响多行的SQL语句,例如:INSERT,UPDATE或DELETE语句。
ResultSet executeQuery(String SQL):返回一个ResultSet对象。 当您希望获得
结果集时,请使用此方法,就像使用SELECT语句一样。
关闭Statement:stmt.close();
PreparedStatement对象:
PreparedStatement接口扩展了Statement接口,它添加了比Statement对象更好一些优点的功能。此语句可以动态地提供/接受参数。
String SQL = "Update Employees SET age = ? WHERE id = ?";
PreparedStatement pstmt = conn.prepareStatement(SQL);
JDBC中的所有参数都由 ? 符号作为占位符,这被称为参数标记。 在执行SQL语句之前,必须为每个参数(占位符)提供值。通过setXXX()方法将值绑定到参数,其中XXX表示要绑定到输入参数的值的Java数据类型。 如果忘记提供绑定值,则将会抛出一个SQLException。每个参数标记是它其顺序位置引用。第一个标记表示位置1,下一个位置2等等。 该方法与Java数组索引不同(它不从0开始)。
CallableStatement对象:
类似Connection对象创建Statement和PreparedStatement对象一样,它还可以使用同样的方式创建CallableStatement对象,该对象将用于执行对数据库存储过程的调用。
存在三种类型的参数:IN,OUT和INOUT。 PreparedStatement对象只使用IN参CallableStatement对象可以使用上面三个参数类型。
CallableStatement对象:
String strSQL = "{call getEmpName (?, ?)}";
CallableStatement cstmt = conn.prepareCall (SQL);
String变量strSQL表示存储过程,带有两个参数占位符。
使用CallableStatement对象就像使用PreparedStatement对象一样。 在执行语句之前,必须将值绑定到所有参数,否则将抛出一个SQLException异常。
如果有IN参数,只需遵循适用于PreparedStatement对象的相同规则和技术; 使用与绑定的Java数据类型相对应的setXXX()方法。
使用OUT和INOUT参数时,必须使用一个额外的CallableStatement对象方法registerOutParameter()。 registerOutParameter()方法将JDBC数据类型绑定到存储过程并返回预期数据类型。
当调用存储过程,可以使用适当的getXXX()方法从OUT参数中检索该值。 此方法将检索到的SQL类型的值转换为对应的Java数据类
事务控制:
关闭事务自动提交功能:调用Connection中的setAutoCommit(boolean)方法,并将false作为实参。
提交或者回滚数据:
数据提交:调用Connection中的commit()方法
数据回滚:调用Connection中的rollback()方法
Javaweb概述
Java Web,是用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端(浏览器)两部分。
Web资源可以分为两类:
静态资源,如:HTML
动态资源,如:JSP/Servlet
Web服务器及Web容器
一.Web服务器
1. Web服务器的主要功能是存储,处理和传递网页给客户。客户端和服务器之间的通
信使用超文本传输协议(HTTP)进行。主要是为提供静态内容而设计的,交付的页
面最常见的是HTML文档,除了文本内容之外,还可能包含图像,样式表和脚本。
二.Web容器
1. 是一个Web程序开发框架(含运行环境,比如解释执行JSP,Web API),这个框架
解决鲁棒性,可靠性问题,提供快速开发接口。
三.应用服务器
1. 在大多数时候,Web服务器和应用服务器这两个术语是可以互换使用的。
2. Web服务器的设计目的是提供HTTP内容,应用服务器也可以提供HTTP内容,但不
限于HTTP,它还可以提供其他协议支持,如RMI / RPC。
3. Web应用服务器包含Web容器。
Javaweb常用服务器
tomcat:免费、开源、轻量级的servlet容器、中小型
Weblogic(Oracle):大型
JBOSS(Redhat红帽):是一个管理EJB的容器和服务器。但JBoss核心服务不包括支
持servlet/JSP的Web容器,但是能够很好的与Tomcat绑定使用。
Jetty(Webtide):Jetty 是一个开源的servlet容器,它为基于Java的web容器,
例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组
JAR包的形式发布。
Web工程
Servlet
Servlet 是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
创建servlet:
* 1、继承servlet类
* 2、重写service方法
* 3、对servlet进行声明配置
* --资源注册声明
* ServletDemo--servlet名称
* com.class35.servlet.ServletDemo.java--servlet源文件路径
*
*
* --访问映射配置
* ServletDemo--servlet名字
* /aa--访问的url
*
*
* 注解配置:
* @WebServlet("/aa")
Servlet的生命周期:
* 类加载:加载servlet类,当目标Servlet被第一次请求时,Servlet 容器进行类加载。
* servlet对象创建:第一次请求时,服务器创建servlet对象
* 初始化:第一次请求时,服务器条用init方法
* 请求处理:服务器调用service方法进行请求处理
* 销毁:在服务器关闭时调用destroy方法,并进行释放
请求方式:
GET:
a、目的:向服务器发索取数据的一种请求
b、传参方式:以URL进行传参
c、大小:各个版本的浏览器对URL长度是有限制的,这就决定参数长度也有限制,IE对URL长度的限
制是2083字节。
d、安全性:较POST而言更低。
POST:
a、目的:Post是向服务器提交数据的一种请求
b、传参方式:将参数作为请求的正文部分
c、大小:跟服务器的处理程序的处理能力有关系,IIS6.0默认是100KB
d、安全性:较GET而言更高。
Servlet工作流程:
Servlet继承关系:
servlet页面跳转
方式一:
重定向:response.sendRedirect(URL)
特点:
a、URL会改变
b、两次请求
c、可以跳转到本工程的页面也可以跳转到其他web工程的页面
方式二:
请求转发:request.getRequestDispatcher(URL).forward(request, response)
特点:
a、URL不会改变
b、一次请求
c、只可以跳转到本工程的页面
servlet三大作用域:
一.HttpServletRequest
1. 级别:请求级别(存活时间最短)
2. 创建:服务器接收到一个客户端请求时,服务器会为该请求创建一个HttpServletRequest对象
3. 获取:直接在service()、doGet()或doPost()等方法中使用
4. 死亡:该请求完成时
二.HttpSession
1. 级别:会话级别
2. 创建:当客户端与服务器建立一个会话时,服务器会为该客户端创建一个HttpSession对象
3. 获取:request.getSession(true);--true表示如果当前会话没有HttpSession对象则自动创建
4. 死亡:
A. 超时:一般默认为30分钟(可以通过调用session的setMaxInactiveInterval(int time)方法设置,单位为秒)
B. 调用invalidate()方法
三. ServletContext
1. 级别:应用级别(存活时间最长)
2. 创建:服务器服务器启动时,会为每个应用程序创建一个HttpServletContext对象
3. 获取:getServletContext()
4. 死亡:服务器关
JSP全名为Java Server Pages,其根本是一个简化的Servlet设计,他实现了Html语法
中的java扩张(以 形式)。JSP与Servlet一样,是在服务器端执行的。通常将执行
结果以一个HTML文本的形式响应给客户端,因此客户端只要有浏览器就能浏览。
JSP的六大页面元素:
指令:格式“
jsp指令用来设置整个jsp页面的相关属性,如网页的编码方式和脚本语言。
1、page指令:通过设置内部多个属性定义整个页面的属性。
language:指定页面使用的脚本语言。
import:通过该属性来引用脚本语言中使用到的类文件。
contentType:指定页面所采用的的编码方式
2、include指令:静态包含
(在JSP中插入一个或多个包含文件或代码的文件(jsp,html,inc,txt),把文件插入后与原来的JSP文件合并成一个新的JSP页面)
注:1)该指令只有一个属性:file,指定被包含的文件地址,一般使用相对路径,并且不支
持任何表达式(小脚本、EL表达式)
2)当从页面的内容发生变化时,主页面和从页面(所有页面)都会被重新编译,即他们
是一个整体
3、taglib指令
静态元素:页面中所有的HTML+CSS部分。
表达式:格式,用于输出展示数据。
声明:格式:,用于方法或变量的声明。
小脚本:格式:用于java语句的嵌入。
注释:格式,程序解析执行jsp时会自动忽略的内容。
指令:
JSP的生命周期
1、翻译jsp文件为java文件
2、编译java文件为class文件
3、执行
4、第一次请求之后,Web容器可以重用已经编译好的字节码文件
jsp的九大内置元素
1、out out对象是JspWriter类的实例,是向客户端输出内容常用的对象
2、request 客户端的请求信息被封装在request对象中
3、response response对象包含了响应客户请求的有关信息
4、session 指的是客户端与服务器的一次会话,从客户连到服务器开始,直到客户端与服务器断开连接为止。
5、application application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭
6、page page对象就是指向当前JSP页面本身,有点象类中的this指针
7、pageContext pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,他相当于页面中所有功能的集大成者
8、exception exception对象是一个例外对象
9、config JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(以及服务器的有关信息)
七大动作:
1、 将另外一个文件的内容包含到当前页面(动态包含)
2、 请求转发
3、
4、 用于在JSP中创建一个JavaBean实例
5、 对JavaBean中的属性赋值,但前提是该JavaBean中必须有相应的set方法。
6、 获取JavaBean中的属性值,但前提是该JavaBean中必须有相应的get方法。
7、 用于指定插件
过滤器(Filter)
过滤器是一个驻留在服务器端的Web组件,可以截取用户端和资源之间的请求和响
应信息,并对信息进行过滤
作用:
一.在HttpServletRequest 到达Servlet 之前,拦截客户的HttpServletRequest 。
二.根据需要检查HttpServletRequest ,也可以修改HttpServletRequest 头和
数据。
三.在HttpServletResponse 到达客户端之前,拦截HttpServletResponse 。
四.根据需要检查HttpServletResponse ,可以修改HttpServletResponse 头和
数据。
部署
* 1、实现filter接口
* 2、对filter进行声明配置
web.xml 配置
*
* DemoFilter
* com.class35.filter.DemoFilter
*
*
*
* DemoFilter
* /*过滤源
*
*或 注解配置:@WebFilter("/*")
生命周期
Web容器启动,产生filter实例
调用init方法,初始化filter
当发送请求时,调用dofilterWeb
容器关闭时,调用destroy方法释放
设置多个过滤器
在一个web应用中,可以部署多个过滤器,组成一个过滤器链。过滤
器链中的每个过滤器负责特定的操作和任务,客户端的请求在这些过
滤器之间传递,直到目标资源。
Listener
Listener 用于监听 java web程序中的事件,例如创建、修改、删除 Session、request、context等,并触发响应的事件。
Listener 对应观察者模式,事件发生的时候会自动触发该事件对应的Listener。 Listener 主要用于对 Session、request、context 进行监控。servlet2.5 规范中共有 8 种Listener 。
8种监听器可以分为三类:
监听 Session、request、context 的创建与销毁,分别为 HttpSessionLister、ServletContextListener、ServletRequestListener
监听对象属性变化,分别为: HttpSessionAttributeLister、ServletContextAttributeListener、ServletRequestAttributeListener
监听Session 内的对象,分别为HttpSessionBindingListener 和HttpSessionActivationListener。与上面六类不同,这两类 Listener 监听的是Session 内的对象,而非 Session 本身,不需要在 web.xml中配置。
EL
1. Expression Language(表达式语言)
1. 替代JSP页面中的复杂代码
对数组的操作:
${paramValues.language[0] }
${paramValues.language[1] }
${paramValues.language[2] }
${paramValues.language[3] }
JSTL
1. JSP标准标签库(JavaServerPages Standard Tag Library)
2. JSTL通常会与EL表达式合作实现JSP页面的编码
一.使用步骤
1. 在工程中引用JSTL的两个jar包和标签库描述符文件
2. 在JSP页面中添加taglib指令
3. 使用JSTL标签