一、过滤器简介
二、编码步骤
1、 实现接口javax.servlet.Filter
2、在web.xml中配置需要过滤的资源
三、过滤器的执行过程
//目标资源执行前执行
chain.doFilter(request,response)
//目标资源执行后执行
四、串联过滤器
五、4个简单案例
1、解决POST和响应输出的中文编码过滤器
2、控制动态资源不要缓存
3、控制静态资源的缓存时间
4、自动登入
六、过滤器配置细节
FORWARD INCLUDE ERROR REQUEST
七、巩固装饰设计模式
八、4个案例
1、解决get请求方式的中文编码
2、脏话过滤器
3、html标记过滤器
4、gzip过滤器
一、文件上传原理分析
1、文件上传的前提:(记住)
a、表单的method必须是post
b、表单的enctype属性必须是multipart/form-data
c、表单中提供
2、form表单的enctype属性
该属性的作用是用来告知服务器,请求正文内容的MIME类型的。相当于请求消息头Content-Type。
该属性的作用是用来告知服务器,请求正文内容的MIME类型的。相当于请求消息头Content-Type。
enctype=application/x-www-form-urlencoded(Content-Type=application/x-www-form-urlencoded)默认值。
username=abc&password=123
服务器端:String vlaue = request.getParameter(String name)只能读取请求正文是application/x-www-form-urlencoded类型的数据。
enctype=multipart/form-data(Content-Type=multipart/form-data)
二、利用第三方组件实现文件上传
1、apache的:commons-fileupload组件。
依赖:commons-io组件
2、开发主要的步骤
三、文件上传中需要考虑的几个问题
1、保证服务器的安全
解决:把上传的文件放到用户访问不到的地方(放到WEB-INF目录下)
2、重名文件被覆盖的问题
解决办法:把文件名弄成唯一即可。
a.txt----------------------->UUID_a.txt
GUID也就是UUID。都能生成唯一的标识符。
3、避免一个文件夹中的文件过多
方案一:按照日期分目录存储
方案二:按照文件名的hashCode随机生成目录。
1010 1011 1111 1011 1010 1011 1111 1011
0000 0000 0000 0000 0000 0000 0000 1111 &
0000 0000 0000 0000 0000 0000 0000 1011------------------>00001111--->015
1010 1011 1111 1011 1010 1011 1111 1011
0000 0000 0000 0000 0000 0000 1111 0000 &
0000 0000 0000 0000 0000 0000 1111 0000 >>
0000 0000 0000 0000 0000 0000 0000 1111------------------>00001111--->015
4、限制文件的类型:并不能严格做到
a、文件的扩展名
b、文件的MIME类型(text/html.image/*)
5、上传文件大小限制
web方式上传的文件不易过大。
a、限制单个文件的大小:
b、限制总文件的大小:
6、中文乱码
a、普通字段
FileItem.getString(String charset);
b、上传的中文文件
request.setCharacterEncoding("UTF-8");
7、手工处理文件上传时的临时文件问题
1、文件上传时需要用缓存。默认10Kb。
2、默认的临时文件的存放目录,系统的临时目录。
DiskFileItemFactory(int size,File tempDirecotry);
FileItem.delete():清理临时文件。
四、文件的下载
五、观察者设计模式(监听器)
Frame:触发事件的对象。事件源
WindowListener:监听器。定义了一些方法,对应触发的事件。
WindowEvent:事件对象。封装事件源。
六、Servlet规范中的8个监听器
1、监听ServleContxt、HttpSession、ServletRequest对象的创建和销毁的监听器
ServletContextListener:
HttpSessionListener:
SerlvetRequestListener:
2、监听ServletContext、HttpSession、ServletRequest属性(attributes)变化的监听器
ServletContextAttributeListener:
HttpSessionAttributeListener:
SerlvetRequestAttributeListener:
3、感知型监听器:不需要注册。
HttpSessionBindingListener:实现该接口的类的实例,能够感知自己何时被放到了HttpSession域范围中,和何时从HttpSession域范围中删除。
HttpSessionActivationListener:实现该接口的类的实例,能够感知自己何时随着HttpSession钝化和激活。
注意:监听器要注册到事件对象上。web.xml中注册
七、监听器案例:踢人