ke12Servlet规范有三个高级特性,,文件上传下载

1Servlet规范有三个高级特性

分别是FilterListener文件的上传下载Filter用于修改requestresponse对象,Listener用于监听contextsessionrequest事件。 

熟悉Filter的生命周期

了解Filter及其相关API

掌握Filter的实现

掌握Filter的映射与过滤器链的使用

熟悉Listener及相关API

    熟悉Servlet 3.0新特性

掌握文件上传和下载

怎么才能一个接一个跳转过滤器呢,Filter及其相关API

右击创建Filter,

这个名字就是Filtername

拦截的是什么,myserlet

在外面myserlet内容执行前就执行我们的Filter里面的内容

首先@WebFilter(filterName = "MyFilter01",urlPatterns = "/MyServlet")

//@WebFilter(filterName = "MyFilter",urlPatterns = "/*")//拦截用户所以请求

Filter接口:就可以用,init,doFilter,destroy,

FilterConfig接口:放在doFilter作为参数.doFilter()方法用于调用过滤器链中的下一个过滤器,如果这个过滤器是链上的最后一个过滤器,则将请求提交给处理程序或将响应发给客户端。

FilterChain接口:放在doFilter作为参数

有了上面就可以第一个过滤器调用 了doFilter()第二个过滤器,第二个过滤器调用 了doFilter()第三个过滤器ke12Servlet规范有三个高级特性,,文件上传下载_第1张图片

有什么用---不同的Web资源中的过滤操作可以放在同一个Filter中完成,这样可以不用多次编写重复代码,从而提高了程序的性能

Filter过滤器]拦截,,,,客户端与处理程序servlet之间的可以有n个过滤器

创建阶段

,在一次完整的请求当中,Filter对象只会创建一次init()方法也只会执行一次

doFilter()方法可以执行多次

服务器关闭时,Web服务器调用destroy()方法销毁Filter对象

拦截不同方式的请求,例如jsp界面

为什么还要这种方式呢因为一般都是拦截一个servlet的开始例如

dispatcherTypes = DispatcherType.FORWARD

@WebFilter注解有一个特殊的属性dispatcherTypes,它可以指定过滤器的转发模式dispatcherTypes属性有4个常用值REQUESTINCLUDEFORWARDERROR

那么与有什么不同呢 

这个forward是在转发的时候才拦截REQUEST、INCLUDE,ERROR都一样

ke12Servlet规范有三个高级特性,,文件上传下载_第2张图片

这个是拦截我进入first.jsp的ke12Servlet规范有三个高级特性,,文件上传下载_第3张图片

过滤链使用(doFilter)

使用Filechain对象第一个过滤器调用 了doFilter()第二个过滤器,第二个过滤器调用 了doFilter()第三个过滤器

访问MyServlet后哎,就是按照MyFilter01MyFilter02MyFilter03MyFilter04MyFilter05MyFilter01MyFilter06执行

不存在MyFilter00

----

chain.doFilter(request, response);这个是到哪里去的到我们真实的MyServlet然后
 这句话结束

ke12Servlet规范有三个高级特性,,文件上传下载_第4张图片

ke12Servlet规范有三个高级特性,,文件上传下载_第5张图片

ke12Servlet规范有三个高级特性,,文件上传下载_第6张图片

你看

ke12Servlet规范有三个高级特性,,文件上传下载_第7张图片

ke12Servlet规范有三个高级特性,,文件上传下载_第8张图片

对cookie拦截注册案例:

需要:AutoLoginFilter,LoginServlet,login.jsp,index.jsp

先login.jsp的action跳转到LoginServlet进行校验用户名密码和几月份,

response.sendRedirect(request.getContextPath()+"/index.jsp");为什么要加getContextPath呢,我们要跳转到我们的项目目录下面,不是服务器 的根目录所以要加这个,如

对cookie拦截:可以对所有请求进行拦截 那我们就可以获取用户名密码

action到我们的第一个servlet判断,用户名等正确创建User对象封装起来,用session设置属性,不是空加到cookie里面,跳转index.jsp

跳转到auto如果里面不为空

注销servlet

为什么要

request.getSession().setAttribute("user", user);发给用户看?

问题1getContextPath直接跳到我们的项目目录 ,不是服务器 的根目录所以要加这个

监听器

事件,对象,监听器,处理器(成员方法)

绑定到我们的源,

监听器有8个接口,分为3类

监听域对象创建和销毁ServletContextListener接口、HttpSessionListener接口和ServletRequestListener接口

监听域对象属性增加和删除的ServletContextAttributeListener接口、HttpSessionAttributeListener接口和ServletRequestAttributeListener接口

监听绑定到HttpSession域中某个对象状态的事件HttpSessionBindingListener接口和HttpSessionActivationListener接口。

4案例:

创建了一个请求就有多少个会话

如何让我们的session销毁呢,在lib里面设置session销毁时间

ke12Servlet规范有三个高级特性,,文件上传下载_第9张图片

ke12Servlet规范有三个高级特性,,文件上传下载_第10张图片

servlet3.0新特性以前都是没写一个html都要在web.xml配置

以前收到请求,处理,提交响应结束servlet线程

那么现在我们3.0可以异步请求,交给另外一个线程处理自己的逻辑,自己就可以直接释放出来了

两个方法

1.web.xml

    MyServlet

    cn.itcast.chapter09.filter.MyServlet

    true

2.

@WebFilter(filterName = "MyFilter",urlPatterns = "/MyServlet"

            asyncSupported = true)

案例5

添加文件的按钮,2在servlet读取文件保存在目标路劲

使用标签前提:

1 必须要设置 input 输入项的 name属性,            否则浏览器将不会发送上传文件的数据。
2 必须把将表单页面的 method 属性设置为 post 方式, enctype 属性设置为“ multipart/form-data ”类型。
例子:

<%--指定表单数据的enctype属性以及提交方式--%>

  <%--指定标记的类型和文件域的名称--%>

  选择上传文件:

用request的getInputstream提取交过来数据

Apache组织提供了一个开源组件Commons- FileUpload,该组件可以方便地将multipart/form-data”类型请求中的各种表单域解析出来,

ke12Servlet规范有三个高级特性,,文件上传下载_第11张图片

对于每一个表单都会封装在fileitem里面

工厂类,用于每一个文件都封装成fileitem

DiskFileItemFactory的构造方法

ServletFileUpload类     

你可能感兴趣的:(javaWeb,hive,hadoop,数据仓库)