javaservlet过滤
⑴ java中servlet,filter,listener为什么优先级listener>filter>servlet,面试时候怎么回答
个人感觉哈,我也是新手一枚。
listener是监听本servlet的,那么既然是监听,那么应该是可以第一时间响专应servlet,所属以它第一个。
而filter是过滤,这个过滤楼主应该也学过怎么用,那么就是在跳转servlet之前他需要过滤一遍,servlet返回的时候还是得从它的类走一遍,所以它优先级比servlet也是要高的。
而上面两个都排除了,就只剩下servlet了,SO,不用我讲了吧?
以上内容纯属个人瞎掰,恳请了解的大大给予更精准的正确的回答。
⑵ java对单个servlet使用过滤器,那<url-pattern>怎么填,直接填servlet名称吗
<url-pattern>里面表示抄的袭是你的url调用名称,比如localhost:8080/[项目名]/get,此时的/get与<url-pattern>/get</url-pattern>的/get相匹配,于是该请求就会调用与<url-pattern>相关联的<servlet-class>,而<servlet-class>是通过<serlvet-name>进行关联。
⑶ java servlet 过滤器里 为什么这样写过滤路径不能拦截 /*/page/*
把第一个/去掉试下
⑷ Java Servlet程序的过滤器,如下选项,哪些数据不在过滤器拦截范围内 A. reques
这几个选来项都可以在过滤器的自拦截范围内,
过滤器要拦截什么完全取决你自己如何实现Filter接口的如下方法
doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
在该方法中你可以根据request获取上面4个数据进行拦截。
推荐你看下”轻量级java ee企 业应用实战“这本书,你会知道Filter怎么实现,怎么用。
然后你就会发现你这个题目有多么荒诞了。
⑸ Java中Filter与Servlet的区别和联系
filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。
最近使用插装的时候,改用cookie对计算机进行识别,加入了过滤,仔细研究了一下servlet和filter,区别主要是:
过滤器的生命周期一般都要经过下面三个阶段:
servlet的特点是:
初始化
当容器第一次加载该过滤器时,init() 方法将被调用。该类在这个方法中包含了一个指向 Filter Config 对象的引用。我们的过滤器实际上并不需要这样做,因为其中没有使用初始化信息,这里只是出于演示的目的。
过滤
过滤器的大多数时间都消耗在这里。doFilter方法被容器调用, 同时传入分别指向这个请求/响应链中的 Servlet Request、Servlet Response 和 Filter Chain 对象的引用。然后过滤器就有机会处理请求,将处理任务传递给链中的下一个资源(通过调用 Filter Chain 对象引用上的 doFilter方法),之后在处理控制权返回该过滤器时处理响应。
析构
容器紧跟在垃圾收集之前调用 destroy()方法,以便能够执行任何必需的清理代码。
关于chain.doFilter(request,response)他的作用是将请求转发给过滤器链上下一个对象。这里的下一个指的是下一个filter,如果没有filter那就是你请求的资源。 一般filter都是一个链,web.xml 里面配置了几个就有几个。一个一个的连在一起
request -> filter1 -> filter2 ->filter3 -> .... -> request resource.
filter是链式操作,那么在处理单个filter时必须最后跳转到servlet对请求进行响应。
如果走chain的话,通过chain.doFilter(request,response)这个方法会立即跳转到被拦截的servlet并且执行完还要再返回filter.chain相当于一扇门,从这扇门出去再从这扇门回来.调用filter的方法就是在web.xml中配置,需要配置一个与你需要拦截的servlet相同的url-pattern.
⑹ java servlet为什么过滤器只执行了一次
正常情况是两次,在web.xml中看你的过滤器配置是否有误,应过滤请求“/”即所有请求。
再看你的dofilter()中是否是HttpRequest和HttpResponse两个对象都有。
⑺ java过滤器filter能过滤某个包下的所有servlet吗
j2ee自带的filter好像不可以根据包来过滤,不过struts和sprint合起来就可以控制了。
⑻ java过滤器filter能过滤某个包下的所有servlet吗
不能直接过滤。过滤器是根据URL路径来过滤的,不是根据包名来拦截的。但是你可以按照这样的规则配置你的web.xml文件,间接实现你的需求。
① 你的servlet的访问路径,根据包名来命名。设计二级路径。比如你有一个user.servlet包。你可以把里面的所有Servlet路径全部设置为/user/xxxServlet。你的filter拦截路径就改为
/user/*
//1AServlet代码
packageuser.servlet;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
{
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
doPost(request,response);
}
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
System.out.println(456);
}
}
//2BServlet代码
packageuser.servlet;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
{
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
doPost(request,response);
}
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
System.out.println(123);
}
}
//3filter代码
packagefilter;
importjava.io.IOException;
importjavax.servlet.Filter;
importjavax.servlet.FilterChain;
importjavax.servlet.FilterConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletRequest;
importjavax.servlet.ServletResponse;
{
@Override
publicvoiddestroy(){}
@Override
publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1,
FilterChainarg2)throwsIOException,ServletException{
System.out.println("执行了"+arg0.getParameter("name"));
arg2.doFilter(arg0,arg1);
}
@Override
publicvoidinit(FilterConfigarg0)throwsServletException{}
}
//4web.xml配置
<servlet>
<servlet-name>AServlet</servlet-name>
<servlet-class>user.servlet.AServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AServlet</servlet-name>
<url-pattern>/user/AServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Bservlet</servlet-name>
<servlet-class>user.servlet.BServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Bservlet</servlet-name>
<url-pattern>/user/BServlet</url-pattern>
</servlet-mapping>
<filter>
<filter-name>Myfilter</filter-name>
<filter-class>filter.Myfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Myfilter</filter-name>
<url-pattern>/user/*</url-pattern>
</filter-mapping>
//5测试我的工程应用名是HelloWorld
http://localhost/HelloWorld/user/AServlet?name=aaa
http://localhost/HelloWorld/user/BServlet?name=bbb
会发现控制台分别打印出取出的参数aaa和bbb证明。拦截成功。
⑼ javaweb怎样过滤权限但不过滤servlet
过滤器配置正确,但却没有起到过滤作用,原因可能是排放位置的问题。如下:
⑽ java编程中,过滤器可以完全替代servlet吗
看你的问题,本以为你是了解了Filter之后提出的。但是看了你的补充,才发现原来你根版本不知道什么权是Filter。Servlet用doGET或doPOST方法处理请求、响应浏览器的,这些功能在Filter的doFilter方法里都能实现。但是,java提供Filter不是让人这么用的。既然你还不知道什么是Filter,那详细解释Servlet和Filter的区别是没有意义的,做个简单的比喻吧:访问Servlet是去高级音乐会,Filter的功能就是看看你有没有门票,有门票的要穿戴整齐、录音摄影设备放外边,然后再进场。举个最简单、常用的Filter,就是解决字符集问题的,如果在每个Servlet里都写request.setCharacterEncoding("UTF-8")太麻烦了,所以用个Filter,在Filter里写request.setCharacterEncoding("UTF-8"),让request “穿戴整齐”了进Servlet。