-
@web.xml <servlet> <servlet-name>AsyncServlet</servlet-name> <servlet-class>com.imooc.servlet.AsyncServlet</servlet-class> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>AsyncServlet</servlet-name> <url-pattern>/servlet/AsyncServlet</url-pattern> </servlet-mapping> @AsyncFlter.java @WebFilter(filterName="AsyncFilter",asyncSupported=true,value={"/servlet/AsyncServlet"},dispatcherTypes={DispatcherType.REQUEST,DispatcherType.ASYNC}) public class AsyncFilter implements Filter { public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain) throws IOException, ServletException { System.out.println("Start——AsyncFilter"); filterchain.doFilter(servletrequest, servletresponse); System.out.println("End——AsyncFilter"); } } Ps1:web.xml——AsyncServlet——Async supported:True。 Ps2:记得至少选择JavaEE 6.0版本查看全部
-
@WebFilter的常用属性 value和urlPatterns同时设置的话,优先使用value。查看全部
-
@WebFilter用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。查看全部
-
Dispatcher:ASYNC(异步)在JavaEE 6 - Web3.0开始有此功能。目测servlet3.0比servlet2.5某些情况下还要强一些,当doFilter中过滤器处理耗时过长,2.5会一直等待,而3.0由于增加了AsyncContext的异步处理,因此则会异步进行,直接先输出结果,用户体验要好。查看全部
-
<error-page>如果【没有】设置且ERROR过滤器【有】设置,则输出错误地址检测不到且ERROR过滤器也失效;<error-page>如果【有】设置且ERROR过滤器【有】设置,则输出错误地址可检测到且ERROR过滤器生效;<error-page>如果【有】设置且ERROR过滤器【没有】设置,则输出错误地址可检测到但ERROR过滤器不会生效(注意:<location>/error.jsp</location>和<url-pattern>/error.jsp</url-pattern>文件一致,否则也会失效);所以无论如何,<error-page>一定要设置,否则一切都扯淡。 @web.xml <error-page> <error-code>404</error-code>//500 <location>/error.jsp</location> </error-page> <filter> <filter-name>ErrorFilter</filter-name> <filter-class>com.imooc.filter.ErrorFilter</filter-class> </filter> <filter-mapping> <filter-name>ErrorFilter</filter-name> <url-pattern>/error.jsp</url-pattern> <dispatcher>ERROR</dispatcher> </filter-mapping> @error.jsp 您输入的路径有误! @ErrorFilter.java public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain) throws IOException, ServletException { System.out.println("检测到有错误的信息!"); filterchain.doFilter(servletrequest, servletresponse);//注意:放行 }查看全部
-
@web.xml <filter> <filter-name>FirstFilter</filter-name> <filter-class>com.imooc.filter.FirstFilter</filter-class> </filter> <filter-mapping> <filter-name>FirstFilter</filter-name> <url-pattern>/index.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>FirstFilter</filter-name> <url-pattern>/main.jsp</url-pattern> <dispatcher>FORWARD</dispatcher> </filter-mapping> @FirstFilter.java public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException{ HttpServletRequest hsreq = (HSReq) req; HttpServletResponse hsres = (HSRes) res; // 重定向:Dispatcher走REQUEST // hsres.sendRedirect(hsreq.getContextPath()+"/main.jsp"); hsres.sendRedirect(hsreq.getContextPath() + "/middle.jsp"); // 转发:Dispatcher走FORWARD // hsreq.getRequestDispatcher("main.jsp").forward(hsreq, hsres); // hsreq.getRequestDispatcher("main.jsp").include(hsreq, hsres);//同理 }查看全部
-
请求转发:浏览器的地址栏不会变化,性能相对更好一些,因为获取的资源是没有二次讲过浏览器的<br><br> 重定向:浏览器的地址栏是会变化的,获取资源的时候经过了二次通过浏览器发送请求的过程。 以下内容源自其他同学,当然,自己百度搜索一下也是一样的 这个也是一个参考:http://jingyan.baidu.com/article/37bce2be71adad1002f3a2c7.html 1.请求转发 请求转发是指将请求再转发到另一资源(一般为JSP或Servlet)。此过程依然在同一个请求范围内,转发后浏览器地址栏内容不变 请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发到另外一个资源,并让该资源对浏览器的请求进行响应 RequestDispatcher rd = request.getRequestDispatcher(path); rd.forward(request,response); 或request.getRequestDispatcher(path) .forward(request,response); 2.重定向 重定向是指页面重新定位到某个新地址,之前的请求失效,进入一个新的请求,且跳转后浏览器地址栏内容将变为新的指定地址 重定向是通过HttpServletResponse对象的sendRedirect()来实现,该方法相当于浏览器重新发送一个请求 response.sendRedirect(path); forward转发 :一次请求一次回应 服务器跳转 sendredirect重定向: 两次请求两次回应 客户端跳转 由于sendredirect是request,会激活REQUEST类型的过滤器,因此要注意,是否会形成重定向循环 request 过滤request请求 forward 过滤重定向请求 include 过滤include请求查看全部
-
过滤器的执行过程 @FirstFilter.java //同下 @SecondFilter.java public class SecondFilter implements Filter { public void init(FilterConfig filterconfig) throws ServletException { System.out.println("2——init"); } public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain) throws IOException, ServletException { System.out.println("2——Start——doFilter"); filterchain.doFilter(servletrequest, servletresponse); System.out.println("2——End——doFilter"); } public void destroy() { System.out.println("2——destroy"); } }查看全部
-
按照web.xml中的先后顺序组装成一条链<br> 过滤器链--针对用户的一个请求,找到多个对应的过滤器与之对应,形成过滤器链 Web项目中多个过滤器是如何实现的?多个过滤器对应同一个用户路径执行顺序如何? @输出顺序: //启动服务器 1——init 2——init //浏览页面 1——Start——doFilter 2——Start——doFilter index.jsp 2——End——doFilter 1——End——doFilter //关闭服务器 1——destroy 2——destroy @web.xml <filter> <filter-name>FirstFilter</filter-name> <filter-class>com.imooc.filter.FirstFilter</filter-class> </filter> <filter-mapping> <filter-name>FirstFilter</filter-name> <url-pattern>/index.jsp</url-pattern> </filter-mapping> <filter> <filter-name>SecondFilter</filter-name> <filter-class>com.imooc.filter.SecondFilter</filter-class> </filter> <filter-mapping> <filter-name>SecondFilter</filter-name> <url-pattern>/index.jsp</url-pattern> </filter-mapping>查看全部
-
过滤器可以改变用户请求的web资源<br> 过滤器不可以直接返回数据,不能直接处理用户请求。查看全部
-
Web.xml配置查看全部
-
实现fillter接口 ** init()方法 -- 这是过滤器的初始化方法,web容器创建过滤器实例后将调用这个方法。这个方法中可以读取web.xml文件中过滤器的参数。 ** doFilter() -- 这个方法完成实际的过滤操作。这个地方是过滤器的核心方法。当用户请求访问与过滤器关联的URL时,web容器将先调用过滤器的doFilter方法。FilterChain参数可以调用chain.doFilter方法,将请求传给下一个过滤器(或目标资源),或利用转发,重定向将请求转发到其他资源。 ** destroy() -- web容器在销毁过滤器实例前调用该方法,在这个方法中可以释放过滤器占用的资源。(大多数情况用不到)查看全部
-
实例化 web.xml、初始化 init()、过滤 doFilter()、销毁 destroy()查看全部
-
在没有过滤器的情况下,用户可以直接访问Web资源 存在过滤器的情况下,用户不能访问Web资源 1、用户发送请求到过滤器 2、过滤器将请求发送给服务器 3、服务器把响应返还给过滤器 4、过滤器将服务器的响应发给用户 过滤器的生命周期 1.在web容器启动时依据web.xml实例化:一次 2.初始化 init():一次 3.过滤 doFilter():多次 4.销毁 destroy():一次,web容器关闭查看全部
-
过滤器 定义:过滤器是一个【服务器端】的组件,它可以【截取用户端的请求和响应信息】,并对这些信息过滤查看全部
举报
0/150
提交
取消