javaee笔记3.docx

上传人:b****9 文档编号:25710938 上传时间:2023-06-11 格式:DOCX 页数:28 大小:28.21KB
下载 相关 举报
javaee笔记3.docx_第1页
第1页 / 共28页
javaee笔记3.docx_第2页
第2页 / 共28页
javaee笔记3.docx_第3页
第3页 / 共28页
javaee笔记3.docx_第4页
第4页 / 共28页
javaee笔记3.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

javaee笔记3.docx

《javaee笔记3.docx》由会员分享,可在线阅读,更多相关《javaee笔记3.docx(28页珍藏版)》请在冰豆网上搜索。

javaee笔记3.docx

javaee笔记3

1映射Filter的细节

1)在传统方式下,有以下几种方式过虑

>>在地址拦上直接输入URL

>>通过超链接

>>重定向

2)Filter过虑的几种方式:

>>REQUEST方式----默认

>>FORWARD方式----只处理转发情况下的Filter

>>INCLUDE方式----只处理包含情况下的Filter

*>>ERROR方式------只处理出错情况下的Filter,如果不出错,不会执行Filter

直接访问某个jsp页面,如果该jsp页面出错,同时又在web.xml文件中声明了全局出错处理

(java.lang.NumberFormatException<------->Integer.parse("abc"))

如果使用exception-code:

3次经过Filter

如果使用exception-type:

2次经过Filter

*2装饰设计模式

1)当一个类的某个方法不能满足业务需求情况下,你会怎么办呢?

解决方案:

写一个类,继承父类(前提父类是非final类型),重写不满足需求的方法

2)装饰设计模式能解决什么问题?

以上解决方案,叫做装饰设计模式。

3)装饰设计模式开发步骤?

>>写一个类继承被装饰类

>>写一个实例变量,记录被装饰类

>>通过构造方法,为被装饰类设置值

*>>重写不能满足需求的方法

[可选]>>对于已满足需求的方法,直接调用被装饰类对应的方法

4)什么情况,会使用装饰设计模式?

当一个类的某个方法不能满足业务需求情况下,该类又是一个非final类型,可以使用装饰设计模式。

*3Filter+装饰设计模式案例

>>GET和POST中文编码统一处理

如果对于post请求来讲,request.setCharacerEncoding("UTF-8"),一定要位于

request.getParameter("username")之前,否则一律都是取得乱码

例如:

Stringusername=request.getParameter("username")

request.setCharacerEncoding("UTF-8")

username=request.getParameter("username")

username=request.getParameter("username")

username=request.getParameter("username")

这时username是乱码

>>字节压缩流(最难)

ServletOutputStream不具有缓存功能

将中英文进行压缩后,输出到浏览器

*>>字符压缩流(较难,常用)

PrintWriter具有缓存功能

将文字和图像进行字符压缩

>>缓存数据

使用字符+Map容器

注意:

》通常数据不变,或很少变化,

》缓存的数据较小

4总结Servlet和Filter[比较适合]的用法:

>>Servlet用于完成核心的业务控制,例如:

收集表单参数,转发或重定向到指定的页面,

Filter用于完成预处理和后处理操作,例如:

压缩游和编码统一处理

>>在分层结构中,Servlet位于控制层

>>在分层结构中,Filter位于控制层

>>Servlet和Filter是一个互补的技术,

不是相互替换的技术

Filter细节:

在默认情况下通过地址栏进行提交,或者使用超链接则会过滤,如果通过转发的话

在默认情况下是不会过滤的。

这种方法叫做request方式,这种方式是默认的。

改变默认做法:

1、在下的标签中写上方式的名字就可以改变过滤的方式。

REQUEST:

默认方式。

FORWORD:

只能过滤转发情况下的资源

INCLUDE:

只能过滤在包含情况下的资源

ERROR:

错误方式下过滤,需要在web.xml配置全局出错处理,如果全局配置是使用exception-type

的话,那么只能访问当前的错误页面,才能够进行过滤,但是如果使用code进行过滤,那么

可以通过include,forword都可以过滤,因此,提倡使用code方式进行配置.

2web监听器详解

1)什么是监听器

一个对象可以监听另一个对象的一切活动,例如:

对象显示,隐藏,关闭等等操作

2)什么是web监听器

一个普通类,实现了SUN公司规定的一个特定接口XxxListener,以监听【域对象】的属性变化/创建销毁情况。

那么该类叫做web监听器。

----------------------------------------------------------------------------------------------

>>ServletContextListener

监听ServletContext域对象的初始化和销毁

在部署该Web应用时,创建并初始化Servlet

在重新部署该Web应用时或停止Web服务器后重新启动,先销毁原ServletContext域对象,

再创建并初始化新的ServletContext域对象

>>ServletContextAttributeListener

监听ServletContext域对象的属性增加、更新、移除

事件源:

ServletContext/application/域对象

事件:

setAttribute或removeAttribute,注意:

setAttribute()具有二种含义:

属性增加、属性更新(当key一样时)

事件监听器:

Web服务器---Tomcat6/7

事件处理程序:

attributeAdded()

attributeReplaced()

attributeRemoved()

>>ServletRequestListener:

域对象的初始化和销毁

每次请求开始时,创建并初始化,页面结束后,ServletRequest销毁

第二次请求会产生新的数据,二次ServletRequest中的数据不能共享

>>ServletRequestAttributeListener:

域对象的属性增加、更新、移除

>>HttpSessionListener:

HttpSession域对象的创建和销毁

1)访问jsp页面,在默认情况下,Web服务器自动产生HttpSession对象,存于服务器

2)关闭浏览器,原HttpSession[不能]立即销毁

3)在默认情况下,HttpSession有30分钟的生命时间,最终由Web服务器负责销毁其中的第一个HttpSession

4)Web服务器删除HttpSession的时间不精确

5)在HttpSession的生命周期内,不断在同一个浏览器中刷新,不会产生新的HttpSession

6)打开一个新的浏览器,再次访问jsp页面,会产生新的HttpSession

注意:

IE6开一个新浏览器,访问jsp,会产生新的HttpSession

其它高版浏览器,开选项卡,是和原来,共享同一个HttpSession

其它浏览器,开选项卡或新的浏览器窗口,也是和原来,共享同一个HttpSession

7)对于高版本浏览器的解决方式:

文件-->新建会话--->会打开一个新窗口,该窗口再访问jsp,会产生新的HttpSession,

不会共享原HttpSession。

8)销毁HttpSession的几种方式:

>>web.xml配置session的有效时间

>>session.invalidate()

>>重新部署web应用

>>web服务器停止,再启动

>>HttpSessionAttributeListener:

HttpSession域对象的属性的变化情况

session.removeAttribute()

session.invalidate()

这二个方法的触发,都会执行attributeRemoved()属性删除

*3web监听器案例

1)系统初始化

2)系统定时器

3)角色踢人

4总结Servlet/Filter/Listener的比较适用场景

>>Servlet比较适合做核心业务控制,位于控制层/MVC层

>>Filter比较适合做预处理和后处理,位于控制层/MVC层

>>Listener比较适合做域对象的监听,例如:

域对象的创建初始化和销毁,和域对象属性的变化,位于控制层/MVC层

反射注解的步骤,以下面的方法为例

/**

*数据库连接的注解

*@authorxiejunjie

*

*/

public@interfaceDbConnection

{

Stringdriver()default"com.mysql.jdbc.Driver";

Stringurl()default"jdbc:

mysql:

//127.0.0.1:

3306/mydb1";

Stringusername()default"root";

Stringpassword()default"123";

}

@DataBaseAnnotation

publicConectiongetConnection()

{

//第一步,取得字节码对象

Classclazz=Demo.class;

//第二步,取得注解所在的方法

Methodmethod=clazz.getMethod("getConnection",null);//方法参数的字节码为空,所以写null

//第三步,取得方法上的注解

DataBaseAnnotationdba=method.getAnnotation(DataBaseAnnotation.class);//参数为注解的字节码

//第四步、取得注解里面的所有参数

Stringdriver=dba.driver();

Sringurl=dba.url();

Stringusername=dba.username();

Stringpassword=dba.password();

}

1、自定义实体绑定到与对象进行监听

1.1实现它的HttpSessionBingingListener,实现它绑定我解除绑定接口

1.2实现它的HttpSessionAttributeListener,实现它的xxxadd,xxxremove,xxxreplace方法

1.3可以不用在web.xml中注册

2、javaBean和HttpSession有四种状态

2、1绑定

2、2移除

2、3钝化,将内存中的HttpSession,移除到外存的过程

2、4激活,将外存中的HttpSession文件,转移到内存的过程

目的:

激活和钝化的目的是为了让出有限的内存空间

钝化和激活做法:

实体实现HttpSessionActivationListener接口里面的方法,激活要实现序列化接口

web.xml是针对当前web项目的配置

config.xml是针对Tomcat服务器的配置,为了只是配置当前web项目的config.xml

可以把config.xml文件拷贝到当前web项目的META-INF目录

两个线程要传递对象的时候也要序列化

注解:

里面只能写8种基本数据类型

1JavaBean和HttpSession的四种状态

>>绑定

当JavaBean绑定到HttpSession中

>>移除

从HttpSession中移除JavaBean

事件源:

JavaBean对象(一样)

事件:

HttpSession.setAttribute()和HttpSession.removeAttribute(),只针对HttpSession而言

事件监听器类:

JavaBean对象(一样)

事件监听器:

HttpSessionBindingListener

如果是一个JavaBean绑定到HttpSession中,HttpSessionAttributeListener和HttpSessionBindingListener都会

被监听到;如果只是一个普通变量,那么只能用HttpSessionAttributeListener监听。

>>钝化

将内存中的HttpSession,转移到外存的过程

>>激活

将外存中的HttpSession文件,转移到内存的过程

目的:

让暂时没有销毁,暂时无用的Session,让出有限的内存空间,给其它HttpSession应用的机会

针对钝化和激活监听,使用HttpSessionActivationListener

*2泛型设计和反射反型

>>泛型可以运用在集合上,目的约束存储到集合中的类型。

>>ArrayList

叫泛型类型

ArrayList

叫泛型具体类型

>>Type是Java中所有类型的公共父接口,它可以表示:

基本类型,引用类型,参数化类型

其中ParameterizedType是Type接口的子接口,它只能表示参数化类型,例如:

ArrayList,BaseDao

>>当二个类,有相类似的方式时,可以将类似的方式提出来,放入父类中,形成泛型方法,当泛型方法过多,可以将父类

做成一个泛型类,让具体的子类去继承。

>>在泛型父类中,通过反射反型技术去获取子类的具体字节码类型。

3Annotation(注解@)

>>JDK中内置注解

@Override(重定某个方法)

@Deprecated(标识某个方法过式)

@SuppressWarnings(value={"unchecked"})

>>注解的作用

通知编译器检测,而不是通知程序员

>>注释的作用

通知程序员

>>如何创建注解

public@interfaceDataBaseAnnotation{

属性

String[]value();

Stringusername()default"jack";

intage()default22;

}

>>如何反射注解

DataBaseAnnotationdba=method.getAnnotation(DataBaseAnnotation.class);

通过方法查询该方法上的注解,找不到返回null。

4自定义注解和反射注解

>>用一个注解去修饰另一个注解,那么该注解叫【元注解】

例如:

@Target(ElementType.METHOD)----------------------元注解

@Retention(RetentionPolicy.SOURCE)---------------元注解

public@interfaceOverride{---------------------普通注解

}

>>注解的策略,(生命周期)

@Retention(RetentionPolicy.RUNTIME)

@Retention(RetentionPolicy.CLASS)

@Retention(RetentionPolicy.SOURCE)

参见<<注解的策略.JPG>>

>>注解的位置

@Target({FIELD,METHOD,TYPE,CONSTRUCTOR})

默认方法上

将来大部的xml文件,会被注解所替换,但是一些核心配置文件,就然存在。

*5代理

>>静态代理(编译时,代理类实现接口)

参见<<静态代理.JPG>>

>>动态代理(运行时,代理类独立)[一定要学会,后面的框架,内部很多都采用动态代理]

参见<动态代理.JPG>>

调用目标对象的任务业务方法,最终都会执行invoke();

1)什么是代理对象?

当某个对象是为了防止其它对象的直接访问,这个对象叫代理对象。

例如:

春哥----目标对象

经济人--代理对象

2)代理谁?

代理对象通常代理目标对象

3)代理开发步骤?

NO1)写一个普通类,无需继续任何其它类

NO2)写一个实例变量,实例变量就是目标对象

NO3)通过构造器为目标对象设置值

*NO4)写一个普通方法,用于返回动态产生的目标对象,该目标对象也实现了接口

需要使用Proxy.newProxyInstance()

4)代理能解决什么问题?

1)能够阻止其它对象对目标对象的直接访问,类似于Filter,在Web应用时,提倡使用Filter。

2)装饰能完成的业务,动态代理也能完成

1、产生MD5对象

MessageDigestmd2=MessageDigest.getInstance("MD5");

byte[]data=md5.digest("asfasf".getBytes());

1、smtp:

邮件发送协议,向邮件服务器发送邮件要遵循的协议,端口为25

客户端向邮件服务器发送邮件

邮件服务器之间发送邮件

pop2/IMAP:

邮件接收协议,向邮件服务器要邮件的时候要遵循的协议,端口为110

2、邮件发送的两种编码格式

Base64/Quoted-printable

3、因为不能上网,所以在本机安装一台邮件服务器---易邮邮件服务器

服务器设置:

1、点击服务器设置----选择作为局域网---勾选支持ESMTP---单选单域名

2、点击新账号---填写信息(联系邮件地址xiejunjie@)

4、RFC822不能使用音频进行传递

MIME是RFC822的升级和补充,能够用来描述有文本+图片+附件的邮件

1、textarea有个特点就是一旦加载的时候,里面应经有了值,它的值是6个空格

2、javascript的类,本质上是一个函数。

3、options,IE支持,火狐不支持

4、写Js的时候把标签看做一个个节点

//创建AJAX对象,即XMLHttpRequest对象

functioncreateXHR(){

varxhr=null;

try{

//IE浏览器(ActiveXObject是IE特有的对象,早在IE5中就有)

xhr=newActiveXObject("microsoft.xmlhttp");

}catch(e){

try{

//非IE浏览器,IE7以上直接使用以下代码创建AJAX对象

xhr=newXMLHttpRequest();

}catch(e){

alert("你的浏览器不支持AJAX技术,更换浏览器");

}

}

returnxhr;

}

functiongetDateTime(){

varxhr=createXHR();

//AJAX监听服务端的响应,由服务端触发,不是由程序员触发

xhr.onreadystatechange=function(){

//判断AJAX引擎已完全接收到服务端的响应

if(xhr.readyState==4){

//判断响应是好或不好

if(xhr.status==200){

//获取AJAX引擎接收到的服务端响应数据

varmsg=xhr.responseText;

//显示

alert(msg);

}

}

}

//准备发送请求

varmethod="GET";

varurl="/day28/DateTimeServlet?

time="+newDate().getTime();//如是IE版本就加个时间毫秒数,这样就可以避免ajax的缓存

//火狐可以不需要,但是为了保险起见,最好都加上去。

xhr.open(method,url);

//真正发送请求体中的数据

xhr.send(null);

}

准备发送:

xhr.open(参数1,参数2);

参数1:

请求的方式POST/GET,

参数2:

请求的路径

发送:

xhr.send(null);

因为是GET请求,请求内容在请求行中,不在请求体中,所以参数为null,如果是POST请求,请求内容在

请求体中传给服务器,则参数就是要发送给服务器的内容

post方式下,手工编码不起作用,如果传递的是中文,那么后台就会拿不到值。

并且下面这句话必须在指明open函数之后,因为需要知道open函数的请求方式,

如果是post才起作用。

存放位置必须在open和send函数之间

//强行让AJAX引擎对象将中文编码后,再发送

xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");

1传统Web应用的特点?

>>浏览器会出现进度条的刷新,表示浏览器将请求,发送到服务器

>>服务端会将响应结果转换成html文件,响应到浏览器

>>浏览器加载并解析html文件,最终显示给用户看

>>浏览器一旦刷新,就是将原来浏览器加载的数据,放弃,不论数据多少

2什么是AJAX?

为什么要使用AJAX?

>>同步:

浏览器发送请求->等待服务端的响应->浏览器再发送请求->等待服务端的再响应->....叫同步,(规律)

是传统Web应用的特点。

Web1.0时代(主)

>>异步:

浏览器发送请求->浏览器发送请求->服务端的响应->浏览器发送请求->服务端的响应->服务端的响应....(无规律)

叫异步。

Web2.0时代(辅)

浏览器无明显的刷新过程

>>公式:

AJAX效果=看上去是C/S结构+本质上是B/S结构

3AJAX的特点

>>AJAX=异步JavaScript和XML

>>AJAX是浏览器和服务端的一个中间桥梁,负责沟通浏览器和服务端的异步请求

>>AJAX是XMLHttpRequest对象的一个核心代表,

>>XMLHttpRequest是目前每个浏览器内置JavaScript对象,在默认情况下,不会产生,得到JavaScript代码创建出来。

>>AJAX是每个浏览器内置,所以和浏览器特性有关,有些浏览器对系每个url都不同,有的则不限

>>体会特点

浏览器无刷新提交

浏览器只发送一部份数据到服务端,减轻服务端的负担,相对响应速度会快

用户的体验效果,有所改变

只有整个页面刷新,旧

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1