javaee笔记3

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 映射Filter的细节

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

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

>>通过超链接

>>重定向

2)Filter过虑的几种方式:

>>REQUEST方式----默认

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

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

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

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

(ng.NumberFormatException<------->Integer.parse("abc"))

如果使用exception-code:3次经过Filter

如果使用exception-type:2次经过Filter

*2 装饰设计模式

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

解决方案:写一个类,继承父类(前提父类是非final类型),重写不满足需求的方法2)装饰设计模式能解决什么问题?

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

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

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

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

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

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

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

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

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

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

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

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

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

例如:

String username = 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方式进行配置.

2 web监听器详解

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应用

相关文档
最新文档