腾讯伏龙记破解版第三个人物怎么解锁

11521人阅读
Servlet API的2.3版本中最重要的一个新功能就是能够为servlet和JSP页面定义过滤器。过滤器提供了某些早期服务器所支持的非标准“servlet链接”的一种功能强大且标准的替代品。
&& 过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:
以常规的方式调用资源(即,调用servlet或JSP页面)。利用修改过的请求信息调用资源。调用资源,但在发送响应到客户机前对其进行修改。阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。
&& 过滤器只在与servlet规范2.3版兼容的服务器上有作用。如果你的Web应用需要支持旧版服务器,就不能使用过滤器。
1. 建立基本过滤器
建立一个过滤器涉及下列五个步骤:
1)建立一个实现Filter接口的类。这个类需要三个方法,分别是:doFilter、init和destroy。doFilter方法包含主要的过滤代码(见第2步),init方法建立设置操作,而destroy方法进行清楚。
2)在doFilter方法中放入过滤行为。doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,如下一步所述,此参数用来调用servlet或JSP页。
3)调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
4)对相应的servlet和JSP页面注册过滤器。在部署描述符文件(web.xml)中使用filter和filter-mapping元素。
5)禁用激活器servlet。防止用户利用缺省servlet URL绕过过滤器设置。
1.1 建立一个实现Filter接口的类
所有过滤器都必须实现javax.servlet.Filter。这个接口包含三个方法,分别为doFilter、init和destroy。
1、public void doFilter(ServletRequset request,&
ServletResponse response,
FilterChain chain)
thows ServletException, IOException
每当调用一个过滤器(即,每次请求与此过滤器相关的servlet或JSP页面)时,就执行其doFilter方法。正是这个方法包含了大部分过滤逻辑。
第一个参数为与传入请求有关的ServletRequest。对于简单的过滤器,大多数过滤逻辑是基于这个对象的。如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法,就要把此对象构造成HttpServletRequest。
第二个参数为ServletResponse。除了在两个情形下要使用它以外,通常忽略这个参数。首先,如果希望完全阻塞对相关servlet或JSP页面的访问。可调用response.getWriter并直接发送一个响应到客户机。第7节给出详细内容,第8节给出一个例子。其次,如果希望修改相关的servlet或JSP页面的输出,可把响应包含在一个收集所有发送到它的输出的对象中。然后,在调用serlvet或JSP页面后,过滤器可检查输出,如果合适就修改它,之后发送到客户机。详情请参阅第9节。
DoFilter的最后一个参数为FilterChain对象。对此对象调用doFilter以激活与servlet或JSP页面相关的下一个过滤器。如果没有另一个相关的过滤器,则对doFilter的调用激活servlet或JSP本身。
2、public void init(FilterConfig config)
thows ServletException
init方法只在此过滤器第一次初始化时执行,不是每次调用过滤器都执行它。对于简单的过滤器,可提供此方法的一个空体,但有两个原因需要使用init。首先,FilterConfig对象提供对servlet环境及web.xml文件中指派的过滤器名的访问。因此,普遍的办法是利用init将FilterConfig对象存放在一个字段中,以便doFilter方法能够访问servlet环境或过滤器名。这种处理在第3节描述。其次,FilterConfig对象具有一个getInitParameter方法,它能够访问部署描述符文件(web.xml)中分配的过滤器初始化参数。初始化参数的使用在第5节中描述。
3、public void destroy( )
此方法在利用一个给定的过滤器对象永久地终止服务器(如关闭服务器)时调用。大多数过滤器简单地为此方法提供一个空体,不过,可利用它来完成诸如关闭过滤器使用的文件或数据库连接池等清除任务。
1.2 将过滤行为放入doFilter方法
doFilter方法为大多数过滤器地关键部分。每当调用一个过滤器时,都要执行doFilter。对于大多数过滤器来说,doFilter执行的步骤是基于传入的信息的。因此,可能要利用作为doFilter的第一个参数提供的ServletRequest。这个对象常常构造为HttpServletRequest类型,以提供对该类的更特殊方法的访问。
1.3 调用FilterChain对象的doFilter方法
Filter接口的doFilter方法以一个FilterChain对象作为它的第三个参数。在调用该对象的doFilter方法时,激活下一个相关的过滤器。这个过程一般持续到链中最后一个过滤器为止。在最后一个过滤器调用其FilterChain对象的doFilter方法时,激活servlet或页面自身。
但是,链中的任意过滤器都可以通过不调用其FilterChain的doFilter方法中断这个过程。在这样的情况下,不再调用JSP页面的serlvet,并且中断此调用过程的过滤器负责将输出提供给客户机。详情请参阅第7节。
1.4 对适当的servlet和JSP页面注册过滤器
部署描述符文件的2.3版本引入了两个用于过滤器的元素,分别是:filter和filter-mapping。filter元素向系统注册一个过滤对象,filter-mapping元素指定该过滤对象所应用的URL。
1.filter元素
filter元素位于部署描述符文件(web.xml)的前部,所有filter-mapping、servlet或servlet-mapping元素之前。filter元素具有如下六个可能的子元素:
icon 这是一个可选的元素,它声明IDE能够使用的一个图象文件。
filter-name 这是一个必需的元素,它给过滤器分配一个选定的名字。
display-name 这是一个可选的元素,它给出IDE使用的短名称。
description 这也是一个可选的元素,它给出IDE的信息,提供文本文档。
filter-class 这是一个必需的元素,它指定过滤器实现类的完全限定名。
init-param 这是一个可选的元素,它定义可利用FilterConfig的getInitParameter方法读取的初始化参数。单个过滤器元素可包含多个init-param元素。
filter-mapping元素
filter-mapping元素位于web.xml文件中filter元素之后serlvet元素之前。它包含如下三个可能的子元素::
l filter-name 这个必需的元素必须与用filter元素声明时给予过滤器的名称相匹配。
l url-pattern 此元素声明一个以斜杠(/)开始的模式,它指定过滤器应用的URL。所有filter-mapping元素中必须提供url-pattern或servlet-name。但不能对单个filter-mapping元素提供多个url-pattern元素项。如果希望过滤器适用于多个模式,可重复整个filter-mapping元素。
l servlet-name 此元素给出一个名称,此名称必须与利用servlet元素给予servlet或JSP页面的名称相匹配。不能给单个filter-mapping元素提供多个servlet-name元素项。如果希望过滤器适合于多个servlet名,可重复这个filter-mapping元素。
基于以上的原理,在项目中遇到这样一个问题,用户只有登陆之后才能浏览resource目录下的资源,而这些resource的地址都是静态地址,这时候就用到了过滤器,
public void doFilter(ServletRequest req, ServletResponse res,
&&&FilterChain chain) throws IOException, ServletException {
&& HttpServletRequest request = (HttpServletRequest)
&& HttpServletResponse response = (HttpServletResponse)
&& HttpSession session=request.getSession();
&& ServletContext application=session.getServletContext();
&&&&& if(session.getAttribute(&userSession&)==null)
&&&&&& response.sendRedirect(&error/priv_error.jsp&);
&&&&& else
&&&& & chain.doFilter(request, response);
web.xml中如下配置:
&&&&& &filter-name&PrivFilter&/filter-name&
&&&&& &filter-class&com.myPriv.filter.PrivFilter&/filter-class&
&& &/filter&
&filter-mapping&
&&& &filter-name&PrivFilter&/filter-name&
&&& &url-pattern&/resource/*&/url-pattern&
&/filter-mapping&
在过滤器程序中判断到resource目录下的请求的用户session是否为空,如果空的话就跳转出去;
=================filter下一些url-pattern,dispatche的用法==============
在研究liferay框架中看到Web.xml中加入了过滤器的标签,可以根据页面提交的URL地址进行过滤,发现有几个新标签没用过,下面就介绍以下几个过滤器的标签用法:
&!-- 定义Filter --&&filter&
&!-- Filter的名字 --&&filter-name&log&/filter-name&
&!-- Filter的实现类 --&&filter-class&lee.LogFilter&/filter-class&&
&!-- 定义Filter拦截的URL地址 --&&filter-mapping&
&!-- Filter的名字 --&&filter-name&log&/filter-name&
&!-- Filter负责拦截的URL 全部以/的请求,如果&url-pattern&/*.action
&/&,将会以拦截*.action的请求--&&url-pattern&/*&/url-pattern&
&/filter-mapping&
在Servlet2.4中filter-mapping中加入了新的标签&dispatcher& ,里面有4个值即REQUEST, FORWARD,INCLUDE和ERROR,默认不写这个标签的时候是REQUEST,该标签是根据客户端传过来的地址进行过滤,FORWARD方法传过来的request方法可以拦截,&ERROR-PAGE&错误页面传过来的拦截,INCLUDE包含过来的过滤,一般REQUEST传过来的拦截.该标签可以加入多个.
下面例子是引用网上的:
&filter-mapping&&filter-name&Logging Filter&/filter-name&&url-pattern&/products/*&/url-pattern&&/filter-mapping&
这种情况下,过滤器将会作用于直接从客户端发过来的以/products/…开始的请求。因为这里没有制定任何的& dispatcher &元素,默认值是REQUEST。
&filter-mapping&&filter-name&Logging Filter&/filter-name&&servlet-name&ProductServlet&/servlet-name&&dispatcher&INCLUDE&/dispatcher&&/filter-mapping&
这种情况下,如果请求是通过request dispatcher的include方法传递过来的对ProductServlet的请求,则要经过这个过滤器的过滤。其它的诸如从客户端直接过来的对ProductServlet的请求等都不需要经过这个过滤器。
指定filter的匹配方式有两种方法:直接指定url-pattern和指定servlet,后者相当于把指定的servlet对应的url-pattern作为filter的匹配模式
filter的路径匹配和servlet是一样的,都遵循servlet规范中《SRV.11.2 Specification of Mappings》一节的说明
&filter-mapping&&filter-name&Logging Filter&/filter-name&&url-pattern&/products/*&/url-pattern&&dispatcher&FORWARD&/dispatcher&&dispatcher&REQUEST&/dispatcher&&/filter-mapping&
在这种情况下,如果请求是以/products/…开头的,并且是通过request dispatcher的forward方法传递过来或者直接从客户端传递过来的,则必须经过这个过滤器。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:50499次
排名:千里之外
原创:16篇
转载:21篇
(1)(1)(1)(1)(1)(1)(3)(3)(1)(1)(2)(2)(1)(2)(5)(2)(3)(2)(2)(2)web.xml中关于Servlet、Filter、Listener的配置 - 博客频道 - CSDN.NET
点滴记录 不断进步
为了梦想加油
分类:Java
(一)web.xml不同元素的加载顺序
加载顺序与它们在 web.xml 文件中的先后顺序无关。即不会因为 filter 写在 listener 的前面而会先加载 filter。
web.xml 的加载顺序是:ServletContext -&&context-param -& listener -& filter -& servlet ,而同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺序进行调用的
(二)web.xml文件详解
首先是schema
&web-app xmlns=&/xml/ns/j2ee&
xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xsi:schemaLocation=&/xml/ns/j2ee/web-app_2_4.xsd&
version=&2.4&&
&/web-app&其他元素都放在&web-app&&/web-app&中
&discription&&/discription&是对站点的描述
&display-name&&/display-name&定义站点名称
&distributable&&/distributable&是指定该站台是否可分布式处理
如下方式设置web站点的环境参数
&context-param&
&param-name&my_param&/param-name&
&param-value&hello&/param-value&
&/context-param&
另外有如下方式设置环境变量
&env-entry&
&env-entry-name&minExemptions&/env-entry-name&
&env-entry-value&1&/env-entry-value&
&env-entry-type&java.lang.Integer&/env-entry-type&
&/env-entry&
在设置该参数my_param后,在servlet中可以用getServletContext().getInitParameter(&my_param&)来获得
(2.3)Filter过滤器
如下方式设置Filter,有元素&filter-name&、&filter-class&、&init-param&
&filter-name&setCharacterEncoding&/filter-name&
&filter-class&com.myTest.setCharacterEncodingFilter&/filter-class&
&init-param&
&param-name&encoding&/param-name&
&param-value&GB2312&/param-value&
&/init-param&
&filter-mapping&要和&filter&配套使用设置如下出现在&filter&之后
&filter-mapping&
&filter-name&setCharacterEncoding&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
(2.4)Listener监听器
如下方式设置设定Listener接口(主要有子元素&listener-class&&/listener-class&定义Listener的类名称
&listener&
&listener-class&com.myTest.ContextListener&/listener-class&
&/listener&
(2.5)Servlet
如下方式定义servlet和servlet-mapping
&servlet-name&ShoppingServlet&/servlet-name&
&!--指定servlet名称--&
&servlet-class&com.myTest.ShoppingServlet&/servlet-class&
&!--指定servlet的类名(实现)--&
&/servlet&
&servlet-mapping&
&servlet-name&ShoppingServlet&/servlet-name&
&url-pattern&/shop/ShoppingServlet&/url-pattern& &!--指定servlet所对应的url--&
&/servlet-mapping&
(2.6)定义session参数
&session-config&&/session-config& 用来定义web站台中的session参数,包含一个子元素:
&&session-timeout&&/session-timeout& 用来定义这个web站台所有session的有效期限,单位为( 分钟)
(2.7)定义某一个扩展名和某一个MIME Type做对映
&mime-mapping&
&extension&doc&/extension&
&!--扩展的名称--&
&mime-type&application/vnd.ms-word&/mime-type&
&!--MIME格式--&
&/mime-mapping&
&mime-mapping&
&extension&xls&/extension&
&mime-type&application/vnd.ms-excel&/mime-type&
&/mime-mapping&
(2.8)定义首页列表(定义首页的文件名称(可有多个))
&welcome-file-list&
&welcome-file&index.jsp&/welcome-file&
&welcome-file&index.html&/welcome-file&
&/welcom-file-list&
(2.9)用来处理错误代码或异常的页面
3个子元素:&error-code&&/error-code& 指定错误代码
& & & & & & & & && && &exception-type&&/exception-type& 指定一个JAVA异常类型
& & & & & & & & && && &location&&/location& 指定在web站台内的相关资源路径
&error-page&
&error-code&404&/error-code&
&location&/error404.jsp&/location&
&/error-page&
&error-page&
&exception-type&java.lang.Exception&/exception-type&
&location&/exception.jsp&/location&
&/error-page&
(2.10)设定JSP网页所用到的Tag Library路径
2个子元素:&taglib-uri&&/taglib-uri& 定义TLD文件的URI,在JSP网页中用taglib指令便可取得该URI的TLD文件
& & & & & & & & && && &taglib-location&&/taglib-location& 指定TLD文件相对于web站台的存放位置
&taglib-uri&myTaglib&/taglib-uri&
&taglib-location&/WEB-INF/tlds/MyTaglib.tld&/taglib-location&
(2.11)定义利用JNDI取得站台可利用的资源
五个子元素:
&&& &description&&/description& 资源说明
&&& &rec-ref-name&&/rec-ref-name& 资源名称
&&& &res-type&&/res-type& 资源种类
&&& &res-auth&&/res-auth& 资源经由Application或Container来许可
&&& &res-sharing-scope&&/res-sharing-scope& 资源是否可以共享,有Shareable和Unshareable两个值,默认为Shareable
可在此配置数据库连接
&resource-ref&
&description&JNDI JDBC DataSource of shop&/description&
&res-ref-name&jdbc/sample_db&/res-ref-name&
&res-type&javax.sql.DataSource&/res-type&
&res-auth&Container&/res-auth&
&/resource-ref&
(2.12)&jsp-config&配置
包括&taglib& 和&jsp-property-group& 两个子元素。
&&& 其中&taglib&元素在JSP 1.2时就已经存在;而&jsp-property-group&是JSP 2.0 新增的元素。
&&& &jsp-property-group&元素主要有八个子元素,它们分别为:
&&& 1.&description&:设定的说明;
&&& 2.&display-name&:设定名称;
&&& 3.&url-pattern&:设定值所影响的范围,如:/CH2 或 /*.jsp;
&&& 4.&el-ignored&:若为true,表示不支持EL 语法;
&&& 5.&scripting-invalid&:若为true,表示不支持&% scripting %&语法;
&&& 6.&page-encoding&:设定JSP 网页的编码;
&&& 7.&include-prelude&:设置JSP 网页的抬头,扩展名为.jspf;
&&& 8.&include-coda&:设置JSP 网页的结尾,扩展名为.jspf。
&jsp-config&
&taglib-uri&Taglib&/taglib-uri&
&taglib-location&/WEB-INF/tlds/MyTaglib.tld&/taglib-location&
&jsp-property-group&
&description&Special property group for JSP Configuration JSP example.&/description&
&display-name&JSPConfiguration&/display-name&
&url-pattern&/jsp/* &/url-pattern&
&el-ignored&true&/el-ignored&
&page-encoding&GB2312&/page-encoding&
&scripting-invalid&true&/scripting-invalid&
&include-prelude&/include/prelude.jspf&/include-prelude&
&include-coda&/include/coda.jspf&/include-coda&
&/jsp-property-group&
&/jsp-config&
(三)配置web.xml来限制对某些servlet的请求
只希望通过认证的用户才能请求某些servlet的话,就可以在web.xml中来进行相应的配置,来达到此目的。
步骤一:修改tomcat服务器的/conf/tomcat-users.xml,设置用户名和密码
以下是tomcat-users.xml的片段
&?xml version='1.0' encoding='utf-8'?&
&tomcat-users&
&role rolename=&tomcat&/&
&role rolename=&manager&/&
&role rolename=&admin&/&
&user username=&tomcat& password=&tomcat& roles=&tomcat&/&
&user username=&both& password=&tomcat& roles=&tomcat,manager&/&
&user username=&admin& password=&admin& roles=&admin&/&
&/tomcat-users&
步骤二:修改web应用的web.xml,创建security-constraint、login-config和security-role元素
&security-constraint&
&web-resource-collection&
&web-resource-name&HelloServlet&/web-resource-name&
&url-pattern&/HelloServlet&/url-pattern&
&http-method&GET&/http-method&
&http-method&POST&/http-method&
&/web-resource-collection&
&auth-constraint&
&description&This applies only to the &tomcat& security role&/description&
&role-name&admin&/role-name&
&/auth-constraint&
&user-data-constraint&
&transport-guarantee&NONE&/transport-guarantee&
&/user-data-constraint&
&/security-constraint&
&login-config&
&auth-method&BASIC&/auth-method&
&/login-config&
&security-role&
&role-name&admin&/role-name&
&/security-role&
其中:security-constraint元素包含一个或多个web-resource-collection元素,它是描述Web应用程序中的哪些web资源受到指定安全限制的保护。http-method元素指定安全限制覆盖的HTTP方法。上面的例子中,当我们对/HelloServlet的GET或POST请求时将触发配置的安全机制。
auth-constraint元素用于描述允许访问Web组件的安全角色。此例中安全角色的例子有tomcat、manager、admin。而只有当作为admin角色的用户才可以访问HelloServlet。
Web应用程序通过login-config元素来认证用户,并确认该用户是否为正确的角色。
longin-config包含的transport-guarantee子元素用来指定认证方法,BASIC是一种常见的Web认证方式,浏览器给用户提示一个对话框,要求输入用户名和密码,随后Tomcat将给出的用户名和密码与tomcat-users.xml中的用户名和密码进行比较,然后使用前面的security-constraint配置来确定用户是否可访问受保护的servlet。
(除BASIC外,还可以是FORM、CLIENT-CERT、DIGEST等)
步骤三:在访问步骤二中的应用时,浏览器会要求输入用户名和密码,输入tomcat配置文件中设置的用户名、密码即可
验证总的步骤
1、检查提供的用户名和密码是否正确。
2、判断用户是否映射到特定的安全角色。例如,用户可能提供了正确的用户名和密码,但没有映射到特定的安全角色,也将被禁止访问特定的Web资源。
3、访问,输入用户名和密码
(四)配置EJB
&description&Example EJB reference&/decription&
&ejb-ref-name&ejb/Account&/ejb-ref-name&
&ejb-ref-type&Entity&/ejb-ref-type&
&home&com.mycompany.mypackage.AccountHome&/home&
&remote&com.mycompany.mypackage.Account&/remote&
&/ejb-ref&
本地EJB声明
&ejb-local-ref&
&description&Example Loacal EJB reference&/decription&
&ejb-ref-name&ejb/ProcessOrder&/ejb-ref-name&
&ejb-ref-type&Session&/ejb-ref-type&
&local-home&com.mycompany.mypackage.ProcessOrderHome&/local-home&
&local&com.mycompany.mypackage.ProcessOrder&/local&
&/ejb-local-ref&
(五)配置DWR
&servlet-name&dwr-invoker&/servlet-name&
&servlet-class&uk.ltd.getahead.dwr.DWRServlet&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&dwr-invoker&/servlet-name&
&url-pattern&/dwr/*&/url-pattern&
&/servlet-mapping&
(六)配置Struts
&display-name&Struts Blank Application&/display-name&
&servlet-name&action&/servlet-name&
&servlet-class&
org.apache.struts.action.ActionServlet
&/servlet-class&
&init-param&
&param-name&detail&/param-name&
&param-value&2&/param-value&
&/init-param&
&init-param&
&param-name&debug&/param-name&
&param-value&2&/param-value&
&/init-param&
&init-param&
&param-name&config&/param-name&
&param-value&/WEB-INF/struts-config.xml&/param-value&
&/init-param&
&init-param&
&param-name&application&/param-name&
&param-value&ApplicationResources&/param-value&
&/init-param&
&load-on-startup&2&/load-on-startup&
&/servlet&
&servlet-mapping&
&servlet-name&action&/servlet-name&
&url-pattern&*.do&/url-pattern&
&/servlet-mapping&
&welcome-file-list&
&welcome-file&index.jsp&/welcome-file&
&/welcome-file-list&
&!-- Struts Tag Library Descriptors --&
&taglib-uri&struts-bean&/taglib-uri&
&taglib-location&/WEB-INF/tld/struts-bean.tld&/taglib-location&
&taglib-uri&struts-html&/taglib-uri&
&taglib-location&/WEB-INF/tld/struts-html.tld&/taglib-location&
&taglib-uri&struts-nested&/taglib-uri&
&taglib-location&/WEB-INF/tld/struts-nested.tld&/taglib-location&
&taglib-uri&struts-logic&/taglib-uri&
&taglib-location&/WEB-INF/tld/struts-logic.tld&/taglib-location&
&taglib-uri&struts-tiles&/taglib-uri&
&taglib-location&/WEB-INF/tld/struts-tiles.tld&/taglib-location&
(七)配置Spring(基本上都包含在Struts配置汇中)
&!-- 指定spring配置文件位置 --&
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&
&!--加载多个spring配置文件 --&
/WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml
&/param-value&
&/context-param&
&!-- 定义SPRING监听器,加载spring --&
&listener&
&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&
&/listener&
&listener&
&listener-class&
org.springframework.web.context.request.RequestContextListener
&/listener-class&
&/listener&
doupei2006
排名:第2129名
(26)(44)(13)(25)(33)(17)(16)(25)(3)(4)(7)(12)(6)(10)在项目中总会遇到一些关于加载的优先级问题,刚刚就遇到了一个问题,由于项目中使用了quartz任务调度,quartz在web.xml中是使用listener进行监听的,使得在tomcat启动的时候能马上检查数据库查看那些任务未被按时执行,而数据库的配置信息在是在web.xml中使用servlet配置的,导致tomcat启动后在执行quartz任务时报空指针,原因就是servlet中的数据库连接信息未被加载。网上查询了下web.xml中配置的加载优先级:
&&&&&&& 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关。即不会因为 filter 写在 listener 的前面而会先加载 filter。最终得出的结论是:listener -& filter -& servlet
&&&&&&& 同时还存在着这样一种配置节:context-param,它用于向 ServletContext 提供键值对,即应用程序上下文信息。我们的 listener, filter 等在初始化时会用到这些上下文中的信息,那么 context-param 配置节是不是应该写在 listener 配置节前呢?实际上 context-param 配置节可写在任意位置,因此真正的加载顺序为:context-param -& listener -& filter -& servlet
&&&&&&& 对于某类配置节而言,与它们出现的顺序是有关的。以 filter 为例,web.xml 中当然可以定义多个 filter,与 filter 相关的一个配置节是 filter-mapping,这里一定要注意,对于拥有相同 filter-name 的 filter 和 filter-mapping 配置节而言,filter-mapping 必须出现在 filter 之后,否则当解析到 filter-mapping 时,它所对应的 filter-name 还未定义。web 容器启动时初始化每个 filter 时,是按照 filter 配置节出现的顺序来初始化的,当请求资源匹配多个 filter-mapping 时,filter 拦截资源是按照 filter-mapping 配置节出现的顺序来依次调用&doFilter() 方法的。
&&&&&&&&servlet 同 filter 类似&,此处不再赘述。
&&&&&& 由此,可以看出,web.xml 的加载顺序是:context-param -& listener -& filter -& servlet&,而同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺序进行调用的。web.xml文件详解========================================================================Web.xml常用元素&&&&&web-app&&&&&&display-name&&/display-name&定义了WEB应用的名字&&&&&description&&/description& 声明WEB应用的描述信息&&&&&context-param&&/context-param& context-param元素声明应用范围内的初始化参数。&&&&&filter&&/filter& 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。&&&&&filter-mapping&&/filter-mapping& 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。&&&&&listener&&/listener&servlet API的版本2.3增加了对事件监听程序的支持,事件监听程序在建立、修改和删除会话或servlet环境时得到通知。&&&&&&&&&&&&&&&&&&&&&&&& Listener元素指出事件监听程序类。&&&&&servlet&&/servlet& 在向servlet或JSP页面制定初始化参数或定制URL时,必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。&&&&&servlet-mapping&&/servlet-mapping& 服务器一般为servlet提供一个缺省的URL:。&&&&&&&&&&&&&&&&& 但是,常常会更改这个URL,以便servlet可以访问初始化参数或更容易地处理相对URL。在更改缺省URL时,使用servlet-mapping元素。&&&&&session-config&&/session-config& 如果某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。&&&&&&&&&&&&& 可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值,或者可利用session-config元素制定缺省超时值。&&&&&mime-mapping&&/mime-mapping&如果Web应用具有想到特殊的文件,希望能保证给他们分配特定的MIME类型,则mime-mapping元素提供这种保证。&&&&&welcome-file-list&&/welcome-file-list& 指示服务器在收到引用一个目录名而不是文件名的URL时,使用哪个文件。&&&&&error-page&&/error-page& 在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。&&&&&taglib&&/taglib& 对标记库描述符文件(Tag Libraryu Descriptor file)指定别名。此功能使你能够更改TLD文件的位置,&&&&&&&&&&&&&&&&&&&&& 而不用编辑使用这些文件的JSP页面。&&&&&resource-env-ref&&/resource-env-ref&声明与资源相关的一个管理对象。&&&&&resource-ref&&/resource-ref& 声明一个资源工厂使用的外部资源。&&&&&security-constraint&&/security-constraint& 制定应该保护的URL。它与login-config元素联合使用&&&&&login-config&&/login-config& 指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。&&&&&security-role&&/security-role&给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素&&&&&&&&&&&&&&&&&&&&&& 的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。&&&&&env-entry&&/env-entry&声明Web应用的环境项。&&&&&ejb-ref&&/ejb-ref&声明一个EJB的主目录的引用。&&&&& ejb-local-ref&&/ ejb-local-ref&声明一个EJB的本地主目录的应用。&&&&&/web-app&&&&&相应元素配置&&&&1、Web应用图标:指出IDE和GUI工具用来表示Web应用的大图标和小图标&&&&&icon&&&&&&small-icon&/images/app_small.gif&/small-icon&&&&&&large-icon&/images/app_large.gif&/large-icon&&&&&&/icon&&&&&2、Web 应用名称:提供GUI工具可能会用来标记这个特定的Web应用的一个名称&&&&&display-name&Tomcat Example&/display-name&&&&&3、Web 应用描述: 给出于此相关的说明性文本&&&&&disciption&Tomcat Example servlets and JSP pages.&/disciption&&&&&4、上下文参数:声明应用范围内的初始化参数。&&&&&context-param&&&&&&&& &param-name&ContextParameter&/para-name&&&&&&&& &param-value&test&/param-value&&&&&&&& &description&It is a test parameter.&/description&&&&&&/context-param&&&&&在servlet里面可以通过getServletContext().getInitParameter("context/param")得到&&&&5、过滤器配置:将一个名字与一个实现javaxs.servlet.Filter接口的类相关联。&&&&&filter&&&&&&&&&&&& &filter-name&setCharacterEncoding&/filter-name&&&&&&&&&&&& &filter-class&com.myTest.setCharacterEncodingFilter&/filter-class&&&&&&&&&&&& &init-param&&&&&&&&&&&&&&&& &param-name&encoding&/param-name&&&&&&&&&&&&&&&& &param-value&GB2312&/param-value&&&&&&&&&&&& &/init-param&&&&&&/filter&&&&&&filter-mapping&&&&&&&&&&&& &filter-name&setCharacterEncoding&/filter-name&&&&&&&&&&&& &url-pattern&/*&/url-pattern&&&&&&/filter-mapping&&&&&6、监听器配置&&&&&listener&&&&&&&&&& &listerner-class&listener.SessionListener&/listener-class&&&&&&/listener&&&&&7、Servlet配置&&&&&& 基本配置&&&&&& &servlet&&&&&&&&&& &servlet-name&snoop&/servlet-name&&&&&&&&&& &servlet-class&SnoopServlet&/servlet-class&&&&&&& &/servlet&&&&&&& &servlet-mapping&&&&&&&&&& &servlet-name&snoop&/servlet-name&&&&&&&&&& &url-pattern&/snoop&/url-pattern&&&&&&& &/servlet-mapping&&&&&&& 高级配置&&&&&& &servlet&&&&&&&&&& &servlet-name&snoop&/servlet-name&&&&&&&&&& &servlet-class&SnoopServlet&/servlet-class&&&&&&&&&& &init-param&&&&&&&&&&&&& &param-name&foo&/param-name&&&&&&&&&&&&& &param-value&bar&/param-value&&&&&&&&&& &/init-param&&&&&&&&&& &run-as&&&&&&&&&&&&& &description&Security role for anonymous access&/description&&&&&&&&&&&&& &role-name&tomcat&/role-name&&&&&&&&&& &/run-as&&&&&&& &/servlet&&&&&&& &servlet-mapping&&&&&&&&&& &servlet-name&snoop&/servlet-name&&&&&&&&&& &url-pattern&/snoop&/url-pattern&&&&&&& &/servlet-mapping&&&&&&& 元素说明&&&&&&&& &servlet&&/servlet& 用来声明一个servlet的数据,主要有以下子元素:&&&&&&&& &servlet-name&&/servlet-name& 指定servlet的名称&&&&&&&& &servlet-class&&/servlet-class& 指定servlet的类名称&&&&&&&& &jsp-file&&/jsp-file& 指定web站台中的某个JSP网页的完整路径&&&&&&&& &init-param&&/init-param& 用来定义参数,可有多个init-param。在servlet类中通过getInitParamenter(String name)方法访问初始化参数&&&&&&&& &load-on-startup&&/load-on-startup&指定当Web应用启动时,装载Servlet的次序。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它&&&&&&&& &servlet-mapping&&/servlet-mapping& 用来定义servlet所对应的URL,包含两个子元素&&&&&&&&&& &servlet-name&&/servlet-name& 指定servlet的名称&&&&&&&&&& &url-pattern&&/url-pattern& 指定servlet所对应的URL&&&&8、会话超时配置(单位为分钟)&&&&&& &session-config&&&&&&&&&& &session-timeout&120&/session-timeout&&&&&&& &/session-config&&&&&9、MIME类型配置&&&&&& &mime-mapping&&&&&&&&&& &extension&htm&/extension&&&&&&&&&& &mime-type&text/html&/mime-type&&&&&&& &/mime-mapping&&&&&10、指定欢迎文件页配置&&&&&& &welcome-file-list&&&&&&&&&& &welcome-file&index.jsp&/welcome-file&&&&&&&&&& &welcome-file&index.html&/welcome-file&&&&&&&&&& &welcome-file&index.htm&/welcome-file&&&&&&& &/welcome-file-list&&&&&11、配置错误页面&&&&一、 通过错误码来配置error-page&&&&&& &error-page&&&&&&&&&& &error-code&404&/error-code&&&&&&&&&& &location&/NotFound.jsp&/location&&&&&&& &/error-page&&&&&上面配置了当系统发生404错误时,跳转到错误处理页面NotFound.jsp。&&&&二、通过异常的类型配置error-page&&&&&& &error-page&&&&&&&&&&& &exception-type&java.lang.NullException&/exception-type&&&&&&&&&&& &location&/error.jsp&/location&&&&&&& &/error-page&&&&&上面配置了当系统发生java.lang.NullException(即空指针异常)时,跳转到错误处理页面error.jsp&&&&12、TLD配置&&&&&& &taglib&&&&&&&&&&& &taglib-uri&http://jakarta.apache.org/tomcat/debug-taglib&/taglib-uri&&&&&&&&&&& &taglib-location&/WEB-INF/jsp/debug-taglib.tld&/taglib-location&&&&&&& &/taglib&&&&&&& 如果MyEclipse一直在报错,应该把&taglib& 放到 &jsp-config&中&&&&&& &jsp-config&&&&&&&&&& &taglib&&&&&&&&&&&&&& &taglib-uri&http://jakarta.apache.org/tomcat/debug-taglib&/taglib-uri&&&&&&&&&&&&&& &taglib-location&/WEB-INF/pager-taglib.tld&/taglib-location&&&&&&&&&& &/taglib&&&&&&& &/jsp-config&&&&&13、资源管理对象配置&&&&&& &resource-env-ref&&&&&&&&&&& &resource-env-ref-name&jms/StockQueue&/resource-env-ref-name&&&&&&& &/resource-env-ref&&&&&14、资源工厂配置&&&&&& &resource-ref&&&&&&&&&&& &res-ref-name&mail/Session&/res-ref-name&&&&&&&&&&& &res-type&javax.mail.Session&/res-type&&&&&&&&&&& &res-auth&Container&/res-auth&&&&&&& &/resource-ref&&&&&&& 配置数据库连接池就可在此配置:&&&&&& &resource-ref&&&&&&&&&&& &description&JNDI JDBC DataSource of shop&/description&&&&&&&&&&& &res-ref-name&jdbc/sample_db&/res-ref-name&&&&&&&&&&& &res-type&javax.sql.DataSource&/res-type&&&&&&&&&&& &res-auth&Container&/res-auth&&&&&&& &/resource-ref&&&&&15、安全限制配置&&&&&& &security-constraint&&&&&&&&&& &display-name&Example Security Constraint&/display-name&&&&&&&&&& &web-resource-collection&&&&&&&&&&&&& &web-resource-name&Protected Area&/web-resource-name&&&&&&&&&&&&& &url-pattern&/jsp/security/protected/*&/url-pattern&&&&&&&&&&&&& &http-method&DELETE&/http-method&&&&&&&&&&&&& &http-method&GET&/http-method&&&&&&&&&&&&& &http-method&POST&/http-method&&&&&&&&&&&&& &http-method&PUT&/http-method&&&&&&&&&& &/web-resource-collection&&&&&&&&&& &auth-constraint&&&&&&&&&&&& &role-name&tomcat&/role-name&&&&&&&&&&&& &role-name&role1&/role-name&&&&&&&&&& &/auth-constraint&&&&&&& &/security-constraint&&&&&16、登陆验证配置&&&&&& &login-config&&&&&&&&& &auth-method&FORM&/auth-method&&&&&&&&& &realm-name&Example-Based Authentiation Area&/realm-name&&&&&&&&& &form-login-config&&&&&&&&&&&& &form-login-page&/jsp/security/protected/login.jsp&/form-login-page&&&&&&&&&&&& &form-error-page&/jsp/security/protected/error.jsp&/form-error-page&&&&&&&&& &/form-login-config&&&&&&& &/login-config&&&&&17、安全角色:security-role元素给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。&&&&&&& 分别地声明角色可使高级IDE处理安全信息更为容易。&&&&&security-role&&&&&&&&& &role-name&tomcat&/role-name&&&&&&/security-role&&&&&18、Web环境参数:env-entry元素声明Web应用的环境项&&&&&env-entry&&&&&&&&& &env-entry-name&minExemptions&/env-entry-name&&&&&&&&& &env-entry-value&1&/env-entry-value&&&&&&&&& &env-entry-type&java.lang.Integer&/env-entry-type&&&&&&/env-entry&&&&&19、EJB 声明&&&&&ejb-ref&&&&&&&&& &description&Example EJB reference&/decription&&&&&&&&& &ejb-ref-name&ejb/Account&/ejb-ref-name&&&&&&&&& &ejb-ref-type&Entity&/ejb-ref-type&&&&&&&&& &home&com.mycompany.mypackage.AccountHome&/home&&&&&&&&& &remote&com.mycompany.mypackage.Account&/remote&&&&&&/ejb-ref&&&&&20、本地EJB声明&&&&&ejb-local-ref&&&&&&&&& &description&Example Loacal EJB reference&/decription&&&&&&&&& &ejb-ref-name&ejb/ProcessOrder&/ejb-ref-name&&&&&&&&& &ejb-ref-type&Session&/ejb-ref-type&&&&&&&&& &local-home&com.mycompany.mypackage.ProcessOrderHome&/local-home&&&&&&&&& &local&com.mycompany.mypackage.ProcessOrder&/local&&&&&&/ejb-local-ref&&&&&21、配置DWR&&&&&servlet&&&&&&&&&& &servlet-name&dwr-invoker&/servlet-name&&&&&&&&&& &servlet-class&uk.ltd.getahead.dwr.DWRServlet&/servlet-class&&&&&&/servlet&&&&&&servlet-mapping&&&&&&&&&& &servlet-name&dwr-invoker&/servlet-name&&&&&&&&&& &url-pattern&/dwr/*&/url-pattern&&&&&&/servlet-mapping&&&&&22、配置Struts&&&&&&& &display-name&Struts Blank Application&/display-name&&&&&&&& &servlet&&&&&&&&&&&& &servlet-name&action&/servlet-name&&&&&&&&&&&& &servlet-class&&&&&&&&&&&&&&&& org.apache.struts.action.ActionServlet&&&&&&&&&&& &/servlet-class&&&&&&&&&&&& &init-param&&&&&&&&&&&&&&&& &param-name&detail&/param-name&&&&&&&&&&&&&&&& &param-value&2&/param-value&&&&&&&&&&&& &/init-param&&&&&&&&&&&& &init-param&&&&&&&&&&&&&&&& &param-name&debug&/param-name&&&&&&&&&&&&&&&& &param-value&2&/param-value&&&&&&&&&&&& &/init-param&&&&&&&&&&&& &init-param&&&&&&&&&&&&&&&& &param-name&config&/param-name&&&&&&&&&&&&&&&& &param-value&/WEB-INF/struts-config.xml&/param-value&&&&&&&&&&&& &/init-param&&&&&&&&&&&& &init-param&&&&&&&&&&&&&&&& &param-name&application&/param-name&&&&&&&&&&&&&&&& &param-value&ApplicationResources&/param-value&&&&&&&&&&&& &/init-param&&&&&&&&&&&& &load-on-startup&2&/load-on-startup&&&&&&&& &/servlet&&&&&&&& &servlet-mapping&&&&&&&&&&&& &servlet-name&action&/servlet-name&&&&&&&&&&&& &url-pattern&*.do&/url-pattern&&&&&&&& &/servlet-mapping&&&&&&&& &welcome-file-list&&&&&&&&&&&& &welcome-file&index.jsp&/welcome-file&&&&&&&& &/welcome-file-list&&&&&&&& &!-- Struts Tag Library Descriptors --&&&&&&&& &taglib&&&&&&&&&&&& &taglib-uri&struts-bean&/taglib-uri&&&&&&&&&&&& &taglib-location&/WEB-INF/tld/struts-bean.tld&/taglib-location&&&&&&&& &/taglib&&&&&&&& &taglib&&&&&&&&&&&& &taglib-uri&struts-html&/taglib-uri&&&&&&&&&&&& &taglib-location&/WEB-INF/tld/struts-html.tld&/taglib-location&&&&&&&& &/taglib&&&&&&&& &taglib&&&&&&&& &taglib-uri&struts-nested&/taglib-uri&&&&&&&& &taglib-location&/WEB-INF/tld/struts-nested.tld&/taglib-location&&&&&&&& &/taglib&&&&&&&& &taglib&&&&&&&&&&&& &taglib-uri&struts-logic&/taglib-uri&&&&&&&&&&&& &taglib-location&/WEB-INF/tld/struts-logic.tld&/taglib-location&&&&&&&& &/taglib&&&&&&&& &taglib&&&&&&&&&&&& &taglib-uri&struts-tiles&/taglib-uri&&&&&&&&&&&& &taglib-location&/WEB-INF/tld/struts-tiles.tld&/taglib-location&&&&&&&& &/taglib&&&&&23、配置Spring(基本上都是在Struts中配置的)&&&&&& &!-- 指定spring配置文件位置 --&&&&&&& &context-param&&&&&&&&&& &param-name&contextConfigLocation&/param-name&&&&&&&&&& &param-value&&&&&&&&&&& &!--加载多个spring配置文件 --&&&&&&&&&&&& /WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml&&&&&&&&& &/param-value&&&&&&& &/context-param&&&&&&& &!-- 定义SPRING监听器,加载spring --&&&&&&listener&&&&&&&&& &listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&&&&&&/listener&&&&&&listener&&&&&&&&& &listener-class&&&&&&&&&&& org.springframework.web.context.request.RequestContextListener&&&&&&&& &/listener-class&&&&&&/listener&
阅读(...) 评论()

我要回帖

更多关于 山海经 伏龙记 steam 的文章

 

随机推荐