javaee笔记3.docx
- 文档编号:25710938
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:28
- 大小:28.21KB
javaee笔记3.docx
《javaee笔记3.docx》由会员分享,可在线阅读,更多相关《javaee笔记3.docx(28页珍藏版)》请在冰豆网上搜索。
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
>>当二个类,有相类似的方式时,可以将类似的方式提出来,放入父类中,形成泛型方法,当泛型方法过多,可以将父类
做成一个泛型类,让具体的子类去继承。
>>在泛型父类中,通过反射反型技术去获取子类的具体字节码类型。
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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- javaee 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)