2.filter:filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。
3.listener:监听器,从字面上可以看出listener主要用来监听只用。通过listener可以监听web服务器中某一个执行动作,并根据其要求作出相应的响应。
通俗的语言说就是在application,session,request三个对象创建消亡或者往其中添加修改删除属性时自动执行代码的功能组件。
4.interceptor:是在面向切面编程的,就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法。
比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的 *** 作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的 *** 作。
5.servlet、filter、listener是配置到web.xml中,interceptor不配置到web.xml中,struts的拦截器配置到struts.xml中。spring的拦截器配置到spring.xml中。
二、加载顺序
web.xml 的加载顺序是:context- param ->listener ->filter ->servlet
三、职责
1.servlet:
(1)创建并返回一个包含基于客户请求性质的动态内容的完整的html页面
(2)创建可嵌入到现有的html页面中的一部分html页面(html片段)
(3)读取客户端发来的隐藏数据
(4)读取客户端发来的显示数据
(5)与其他服务器资源(包括数据库和java的应用程序)进行通信
(6)通过状态代码和响应头向客户端发送隐藏数据。
2.filter:
(1)filter能够在一个请求到达servlet之前预处理用户请求,也可以在离开servlet时处理http响应
(2)在执行servlet之前,首先执行filter程序,并为之做一些预处理工作
(3)根据程序需要修改请求和响应
(4)在servlet被调用之后截获servlet的执行。
3.listener:
servlet2.4规范中提供了8个 listener 接口,可以将其分为三类,分别如下:
(1)与 servletContext 有关的 listne r接口。包括:ServletContextListener、ServletContextAttributeListener
(2)与 HttpSession 有关的 Listner
接口。包括:HttpSessionListner、HttpSessionAttributeListener、HttpSessionBindingListener、
HttpSessionActivationListener
(3)与 ServletRequest 有关的 Listener 接口,包括:ServletRequestListner、ServletRequestAttributeListener
四、区别
1.servlet:servlet 流程是短的,url传来之后,就对其进行处理,之后返回或转向到某一自己指定的页面。它主要用来在业务处理之前进行控制。
2.filter:流程是线程性的,url传来之后,检查之后,可保持原来的流程继续向下执行,被下一个filter, servlet接收等,而 servlet 处理之后,不会继续向下传递。
filter 功能可用来保持流程继续按照原来的方式进行下去,或者主导流程,而servlet的功能主要用来主导流程。可以将 Filter 看成是 servlet 的一个补充(擦屁股的)。
Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。
它与Servlet的区别在于:它不能直接向用户生成响应。
完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
3.匹配规则
当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test/aaa.html(我的应用上下文是test),
容器会将http://localhost/tes去掉,将剩下的/aaa.html部分拿来做servlet的映射匹配,也就是拿这剩下的部分与web.xml中配置的servlet的url-pattern进行匹配。
注意:这个映射匹配过程是有一定的规则的,而且每次匹配最终都只匹配一个 servlet。(这一点和filter不同)
servlet 匹配规则:当一个servlet匹配成功后就不会在往下去匹配了
精确路径的匹配:
例子:比如servletA 的url-pattern为 /test,servletB的url- pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,
这个时候容器就会先 进行精确 路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的servlet了。
最长路径的匹配:
例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此时访问http://localhost/test/a时,
容器会选择路径最长的servlet来匹配,也就是这里的servletB。
扩展匹配:如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。
例子:servletA的url-pattern:*.action
4.servlet,filter 都是针对 url 之类的,而 listener 是针对对象的 *** 作的,如 session 的创建,session.setAttribute 的发生,在这样的事件发生时做一些事情。
可用来进行:Spring整合Struts,为Struts的action注入属性,web应用定时任务的实现,在线人数的统计等
5.interceptor 拦截器,类似于filter,不过在struts.xml中配置,不是在web.xml,并且不是针对URL的,而是针对action,当页面提交action时,
进行过滤 *** 作,相当于struts1.x提供的plug-in机制,可以看作,前者是struts1.x自带的filter,而interceptor 是struts2 提供的filter。
与filter不同点:
(1)不在web.xml中配置,而是在struts.xml中完成配置,与action在一起
(2)可由action自己指定用哪个interceptor 来在接收之前做事
6.struts2中的过滤器和拦截器的区别与联系:
(1)拦截器是 Struts2 提供的,而过滤器是由 Servlet 标准提供的
(2)拦截器拦截目标 Action 的目标方法,而过滤器针对各种 web 资源
(3)拦截器在 struts.xml 中配置,而过滤器在 web.xml文件中配置
(4)拦截器使用拦截器栈组织在一起,而过滤器是根据被拦截的资源联系在一起,由他们在配置文件中的位置决定了先后执行顺序
(5)拦截器是基于java反射机制的,而过滤器是基于函数回调的。
(6)过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。
(7)拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
(8)拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
(9)在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准,本文简单介绍JSP及其优点。JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。 JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。
在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页(*.jsp)。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给客户。程序片段可以 *** 作数据库、重新定向网页以及发送 email 等等,这就是建立动态网站所需要的功能。所有程序 *** 作都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求最低,可以实现无Plugin,无ActiveX,无Java Applet,甚至无Frame。
JSP的优点:
·对于用户界面的更新,其实就是由 Web Server进行的,所以给人的感觉更新很快。
·所有的应用都是基于服务器的,所以它们可以时刻保持最新版本。
·客户端的接口不是很繁琐,对于各种应用易于部署、维护和修改。
-------------------
Servlet是使用Java Servlet 应用程序设计接口(API)及相关类和方法的 Java 程序。除了 Java Servlet API,Servlet 还可以使用用以扩展和添加到 API 的 Java 类软件包。Servlet 在启用 Java 的 Web 服务器上或应用服务器上运行并扩展了该服务器的能力。Java servlet对于Web服务器就好象Java applet对于Web浏览器。Servlet装入Web服务器并在Web服务器内执行,而applet装入Web浏览器并在Web浏览器内执行。Java Servlet API 定义了一个servlet 和Java使能的服务器之间的一个标准接口,这使得Servlets具有跨服务器平台的特性。
Servlet 通过创建一个框架来扩展服务器的能力,以提供在 Web 上进行请求和响应服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给 Servlet,并让 Servlet 建立起服务器返回给客户机的响应。 当启动 Web 服务器或客户机第一次请求服务时,可以自动装入 Servlet。装入后, Servlet 继续运行直到其它客户机发出请求。Servlet 的功能涉及范围很广。例如,Servlet 可完成如下功能:
(1) 创建并返回一个包含基于客户请求性质的动态内容的完整的 HTML页面。
(2) 创建可嵌入到现有 HTML 页面中的一部分 HTML 页面(HTML 片段)。
(3) 与其它服务器资源(包括数据库和基于 Java 的应用程序)进行通信。
(4) 用多个客户机处理连接,接收多个客户机的输入,并将结果广播到多个客户机上。例如,Servlet 可
以是多参与者的游戏服务器。
(5) 当允许在单连接方式下传送数据的情况下,在浏览器上打开服务器至applet的新连接,并将该连
接保持在打开状态。当允许客户机和服务器简单、高效地执行会话的情况下,applet也可以启动客户浏览器和服务器之间的连接。可以通过定制协议或标准(如 IIOP)进行通信。
(6) 对特殊的处理采用 MIME 类型过滤数据,例如图像转换和服务器端包括(SSI)。
(7) 将定制的处理提供给所有服务器的标准例行程序。例如,Servlet 可以修改如何认证用户。
----------------------
EJB,即Enterprise JavaBeans,是SUN推出的运行在容器中的服务器端组件,用于实现业务逻辑。EJB组件类似JavaBean组件,开发人员仍以单线程模型编写EJB,不必了解低层次的事务和状态管理的细节、多线程、资源共享和其他复杂的低级API,这些功能都将由EJB容器实现,大大简化了分布式对象的开发、部署和访问。并且,EJB应用程序也遵循Java语言的“一次编写,随处运行”的原则。EJB组件可以只开发一次,然后在多个平台上部署。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)