A. 什么时候用filter,什么时候用interceptor
Filter:
配置filter以及filtermapping在web.xml中,在程序里判断URL来筛选白名单。
Interceptor:
使用Struts零配置时需要在Action中加入@ParentPackage的注解使其生效。
比较一,filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于java本身的反射机制,这是两者最本质的区别。
比较二,filter是依赖于servlet容器的,即只能在servlet容器中执行,很显然没有servlet容器就无法来回调doFilter方法。而interceptor与servlet容器无关。
比较三,Filter的过滤范围比Interceptor大,Filter除了过滤请求外通过通配符可以保护页面,图片,文件等等,而Interceptor只能过滤请求。
比较四,Filter的过滤例外一般是在加载的时候在init方法声明,而Interceptor可以通过在xml声明是guest请求还是user请求来辨别是否过滤。
B. servlet中filter有什么用
首先介绍一下Filter到底是个什么东西:
根据这个单词就能猜到Filter的中文意思是过滤器,事实当然也是这样的;Filter是Servlet中的一个重 要组件。
接下来简单说说Filter这个接口中的常用方法吧。
①.init():类似于Servlet生命周期中的init()方法,用于初始化一些关于Filter接口的参数;只在Servlet 启动时调用一次。
②.doFilter():类似于Servlete生命周期中的service()方法,该方法用于存放逻辑代码。
③.destory():同理类似于Servlet生命周期中的destroy()方法,当Servlet容器销毁前调用该方法。
然后说说如何创建一个Filter的HelloWorld。
①.创一个抽象的Java类,该类实现了Filter接口,同时实现了Filter接口的部分方法,例如
init(),destroy()方法。具体实现代码如下:
public abstract class HttpFilter implements Filter {
private HttpServletRequest request;
private HttpServletResponse response;
//重写Filter接口的destory方法
public void destroy() {}
//重写doFilter方法,这个方法在这里主要作用是将ServletRequest,ServletResponse对象转为对 //应的HttpServletRequest,HttpServletResponse对象
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
this.request = (HttpServletRequest) arg0;
this.response = (HttpServletResponse) arg1;
doFilter(request, response, arg2);
}
//该方法交由继承该抽象类的实现类来实现
public abstract void doFilter(HttpServletRequest request,HttpServletResponse response,
FilterChain chain);
private FilterConfig config;
//这个方法是为了方便子类获取ServletContext对象
public FilterConfig getFilterConfig(){
return config;
}
//该方法一般不建议重写,因为重写该方法会出现某些错,基于此提供了下面的无参数的init()方法
public void init(FilterConfig arg0) throws ServletException {
this.config = arg0;
init();
}
public void init(){}
}
②.一个继承了HttpFilter抽象类的实现类,代码如下,只要功能是为了实现禁用浏览器缓存
public class NoCacheFilter extends HttpFilter{
@Override
public void doFilter(HttpServletRequest request,
HttpServletResponse response, FilterChain chain) {
//通过过滤器实现页面禁用浏览器缓存
response.setDateHeader("Expires", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
}
}
③.将该实现类配置到web.xml文件中,配置方式和配置普通的Servlet一样,具体代码
<filter>
<filter-name>NoCacheFilter</filter-name>
<filter-class>com.xingyun.servlet.filter.NoCacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>NoCacheFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
至此,就实现了一个简单的用于禁用浏览器缓存的过滤器了。
上面说了这么多,在开发中哪些地方中能用到Filter才是最终目的,好了,我大概说一下我在开发中用到的地方。
①.上面提到的禁用浏览器的缓存。这个真的很重要,有时候修改了前端页面,就是因为缓存的原因,导致页面不 能及时刷新过来,真的很蛋疼。
②.解决中文乱码的问题。在开发中,页面可能达到几十个甚至上百个,在每个页面处理中文乱码的问题很烦,但 是通过过滤器,那么问题就变得很简单了。
③.通过检查用户是否登录来管理用户是否可以访问某些页面,比如个人隐私等页面。这个用的也是蛮多的。
C. js filter滤波器 为什么不能使用
一般我的方法是判断uri的是不是这三个如果是这三个,不做处理,直接直接下一步=================唉,直接给你看源码吧在doFilter方法里写上StringcontextPath=InitObjects.getContextPath();=(HttpServletRequest)request;//获得用户请求的uriStringuri=httpServletRequest.getRequestURI();//eccludedPages是个List,存放着比如index.jsp,error.jsp等不需要过滤的页面if(!excludedPages.contains(uri)){}}filterChain.doFilter(request,response);
用设置ISA及其即插即用设备断及其差数
D. angular前端.map和.filter的区别
我们说的map()和filter()其实是Array.prototype.map()创建一个新的数组,其结果是该数组中每个元素都调用一个提供的函数后返回的结果。
语法:var newArray = arr.map(function callback(currentValue, index, array){undefined//对每个元素的处理})
具体操作可去相关网站进行了解。
E. 为什么php很少用 filter
Filter是过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入。验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。
函数和过滤器
如需过滤变量,请使用下面的过滤器函数之一:
filter_var() - 通过一个指定的过滤器来过滤单一的变量
filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
filter_input - 获取一个输入变量,并对它进行过滤
filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
在下面的例子中,我们用 filter_var() 函数验证了一个整数:
<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>
F. jquery filter为啥这样不行
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
</head>
<body>
<div>
<span id="a">
<div>
<span id="b">
<div>
<span id="c"> 测试 <strong>taget1</strong> </span>
<span class="span"> 测试 <strong> taget2 </strong> </span>
<span class="span">测试taget2</span>
<ul>
<li>测试 <strong>filter配合函数</strong></li> <!- 这有一个 strong标签-->
<li><strong>测试</strong> <strong>filter配合函数</strong></li> <!- 这有两个个 strong标签-->
<li><strong>测试</strong> <strong>filter</strong><strong>配合函数<strong></li><!- 这有三个 strong标签-->
</ul>
</div>
</span>
</div>
</span>
</div>
<div class="text">
<p class="text3">测试3</p>
</div>
<div class="text3">
<p>测试3</p>
</div>
<script type="text/javascript"> /*检验时把注释去掉*/
$('document').ready(function(){
//$('div #a>div #b>div #c').css('background','red'); //这是你的第一种方法(通过)
var _obj = $('div #a>div');
//_obj.find('#b>div #c').css('background','red'); //第二种方法,要使用find 或者是bind 。(根据你自己的需要)
//-------------------------filter的用法------------------------------------
//_obj.find('#b>div>span').filter(':even').css('background','red'); // filter 配合 选择器来筛选元素
_obj.find('#b>div>ul>li').filter(function(index) { // filter 配合 函数来筛选元素
return $('strong', this).length == 1;
}).css('background-color', 'red');
//-----------------------filter与find的区别--------------------------------------
//使用find
var find = $("div").find(".text3");
//alert( find.html() ) ;
//使用filter
var filter = $("div").filter(".text3");
alert( filter.html() );
//基本是find子元素找,filter是平级找
//-----------------------filter与find的总结--------------------------------------
//find 子查询选择器,可更深入的查询选择;
//filter 函数是对当前对象集合进行过滤, 利用过滤条件缩小范围;
//find 函数的参数是 jQuery 选择器表达式;
//filter 的参数也是选择器表达式, 但可以有多个条件, 用逗号分隔(逻辑或关系);
//filter 的参数也可以是个函数, 调用函数时会自动传入 index 参数, 函数需返回 true或false 以选中或排除元素.
});
</script>
</body>
</html>
G. 火狐为什么不支持css中的filter属性
filter:filtername(parameters)即filter:滤镜名(参数)
其中,filter是滤镜选择符;filtername是滤镜的属性名,这里包括alpha、blur、chroma等
多种属性;parameters是属性参数值。属性名及参数值请看下面的《filter属性及属性值》。
具体的应用有两种方法:
1、先定义好CSS,再在页面中需要的对象上使用预先定义好的CSS,实际上CSS的设置对话框里已经预先将这些滤镜的语法设置好了,我们只需填上适合的具体参数即可。
2、直接在支持CSS滤镜效果的HTML控件元素上编写CSSfilter代码。
但是filter存在兼容问题。filter是IE专用的,所以IE以外的浏览器将无法正常显示。
下面是代码:仅供参考:
IE中兼容CSS的filter,火狐下不兼容。
.aa{
position:absolute;
padding:4px;
filter:
Dropshadow(offx=1,offy=0,color=#ffffff)
Dropshadow(offx=0,offy=1,color=#ffffff)
Dropshadow(offx=0,offy=-1,color=#ffffff)
Dropshadow(offx=-1,offy=0,color=#ffffff);
}
兼容IE和火狐
.aa{
position:absolute;
padding:4px;
filter:
Dropshadow(offx=1,offy=0,color=#ffffff)
Dropshadow(offx=0,offy=1,color=#ffffff)
Dropshadow(offx=0,offy=-1,color=#ffffff)
Dropshadow(offx=-1,offy=0,color=#ffffff);
text-shadow:1px1px1px#ffffff;
}
H. 在JAVA中filter有什么作用
Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源。
例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。例如对Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。
它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
(8)前端为啥不建议使用filter扩展阅读
Filter的生命周期
和我们编写的Servlet程序一样,Filter的创建和销毁由WEB服务器负责。 web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作
filter对象只会创建一次,init方法也只会执行一次。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
这个方法完成实际的过滤操作。当客户请求访问与过滤器关联的URL的时候,Servlet过滤器将先执行doFilter方法。FilterChain参数用于访问后续过滤器。
Filter对象创建后会驻留在内存,当web应用移除或服务器停止时才销毁。在Web容器卸载 Filter 对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。
I. 关于Div使用filter的一点点问题
使用CSS你一定要有盒子模型的概念。盒子模型不单单是指边框高度什么的。
DOM的子元素被包含在父元素中,就像是被装在了盒子里。如果你对父元素应用模糊滤镜,那么你看到的整个盒子都将模糊。而如果你对盒子里的子元素设置了模糊,则它会叠加父元素的模糊变得更模糊。
如果你需要子元素不出现模糊。可以讲子元素提升到和父元素平级,这样相当于2个独立的盒子。对你要模糊的盒子进行模糊即可。如何重叠到一起?使用定位就能方便的解决了。
J. 在CSS样式表中为什么filter属性不能用
filter类似的滤镜火狐是不支持的,
只有IE支持他。
想实现类似的功能,需要使用其他手段~~