??xml version="1.0" encoding="utf-8" standalone="yes"?> web.xml里面可以定义两种参数Q?br />
(1)application范围内的参数Q存攑֜servletcontext中,在web.xml中配|如下:(x) <context-param> <param-name>name1</param-name> <servlet> package com.wes.controller; import javax.servlet.ServletException; public class MainServlet extends HttpServlet ...{ public MainServlet() ...{ W?
一U参数在servlet里面可以通过getServletContext().getInitParameter("context/param")?
?(在servlet的init()Ҏ(gu)中通过this.getInitParameter("param1")取得) --------------------------------------------------------------------- 配置参数一般存攑֜context-param元素中,每一个context-param元素代表了一个键值对?/span> ?
们可以通过实现ServletContextListener接口d该键值对中的|在web应用E序初始化的时候,调用
ServletContextListener的contextInitialized()Ҏ(gu)Q所以我们我们可以重写该Ҏ(gu)Q实现读取操作。可以这样实
玎ͼ(x) public class AppListener implements ServletContextListener { //相应的键值对存到map?br />
config.addKeyValue(parameter, sc.getInitParameter(parameter)); public void contextDestroyed(ServletContextEvent arg0) { } MyConfigc:(x)(Singleton Config) import java.util.Collection; /** public class MyConfig{ public static HashMap getConfig() { public HashMap addKeyTValue(String name,String value){ 接着Q必dweb.xml中配|相应的监听c,才能在初始化的时候,自动调用该方法。如Q?/span> <listener> q样可以在M一个JSP面Q通过EL表达式或JSTLdcontext-param中的内容?/span> 有的|友说在web.xml内定?lt;listener>元素时得注意下列两点Q?br />
<listener>元素必须出现在Q何Context起始参数Q由<context-param>元素所定义Q之后?br />
<listener>元素必须出现在Q何Servlet实体Q由<servlet>元素所定义Q之前?/span> 但是我在TOMCAT5.5 + J2EE 5下配|web.xmlq没有按照上q的严格限制也能成功d信息?/span> N是版本的问题吗?/span> 在Struts 1.X下,通过一个自定义的Singleton Configc,可以让web.xml中的配置参数在整个应用程序里都能被共享?/span> 首先可以肯定的是Q加载顺序与它们?web.xml 文g中的先后序无关。即不会(x)因ؓ(f) filter 写在 listener 的前面而会(x)先加?filter。最l得出的l论是:(x)listener -> filter -> servlet 同时q存在着q样一U配|节Qcontext-paramQ它用于?ServletContext
提供键值对Q即应用E序上下文信息。我们的 listener, filter {在初始化时?x)用到这些上下文中的信息Q那?
context-param 配置节是不是应该写在 listener 配置节前呢?实际?context-param 配置节可写在L位置Q因?strong>真正的加载顺序ؓ(f)Qcontext-param -> listener -> filter -> servlet 对于某类配置节而言Q与它们出现的顺序是有关的。以 filter ZQweb.xml 中当然可以定义多?filterQ与
filter 相关的一个配|节?filter-mappingQ这里一定要注意Q对于拥有相?filter-name ?filter ?
filter-mapping 配置节而言Qfilter-mapping 必须出现?filter 之后Q否则当解析?
filter-mapping Ӟ它所对应?filter-name q未定义。web 容器启动时初始化每个 filter Ӟ是按?
filter 配置节出现的序来初始化的,当请求资源匹配多?filter-mapping Ӟfilter 拦截资源是按?filter-mapping 配置节出现的序来依ơ调?/strong> doFilter() Ҏ(gu)的? servlet ?filter cMQ此处不再赘q? 由此Q可以看出,web.xml 的加载顺序是Q?strong>context-param -> listener -> filter -> servlet Q而同个类型之间的实际E序调用的时候的序是根据对应的 mapping 的顺序进行调用的?/p>
web.xml文g详解
<param-name>context/param</param-name>
<param-value>avalible during application</param-value>
<param-value>value1</param-value>
</context-param>
(2)servlet范围内的参数Q只能在servlet的init()Ҏ(gu)中取得,在web.xml中配|如下:(x)
<servlet-name>MainServlet</servlet-name>
<servlet-class>com.wes.controller.MainServlet</servlet-class>
<init-param>
<param-name>param1</param-name>
<param-value>avalible in servlet init()</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
在servlet中可以通过代码分别取用Q?/span>
import javax.servlet.http.HttpServlet;
super();
}
public void init() throws ServletException ...{
System.out.println("下面的两个参数param1是在servlet中存攄");
System.out.println(this.getInitParameter("param1"));
System.out.println("下面的参数是存放在servletcontext中的");
System.out.println(getServletContext().getInitParameter("context/param"));
}
}
W二U参数只能在servlet的init()Ҏ(gu)中通过this.getInitParameter("param1")取得
ServletContextListener实现dweb.xml中context-param信息 2009q?3?7?星期?22:37
用部|文件来存储配置参数在Java中是一U很行的做法?/span>
public void contextInitialized(ServletContextEvent sce) {
try {
MyConfig config = new MyConfig();//存放配置信息Q用Map实现
Enumeration parameters = sce.getServletContext().getInitParameterNames();
while(parameters.hasMoreElements()){
String name = (String) parameters.nextElement();
config.addKeyTValue(name, sce.getServletContext().getInitParameter(name));
}
}
} catch(Exception e) {
System.out.println("com.shou error:" + e.getMessage());
}
}
}
package com.myapp;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
*
* @author Administrator
*/
public static MyConfig myconfig;
public static HashMap config = new HashMap();
return config;
}
public static MyConfig getInstance(){
if(myconfig==null){
myconfig = new MyConfig();
}
return myconfig;
}
public static void setConfig(HashMap config) {
MyConfig.config = config;
}
this.config.put(name, value);
return this.config;
}
}
<listener-class>com.myapp.MyListener</listener-class>
</listener>
]]>
]]>
<?xml version="1.0" encoding="GB2312"?> <!--
Web.xml依次定议了如下元素:(x)
<web-app>
<display-name></display-name> 定义了WEB应用的名?
<description></description> 声明WEB应用的描qC?
<filter></filter>
<filter-mapping></filter-mapping>
<servlet></servlet>
<servlet-mapping></servlet-mapping>
<session-config></session-config>
<welcome-file-list></welcome-file-list>
<taglib></taglib>
<resource-ref></resource-ref>
<security-constraint></security-constraint>
<login-config></login-config>
</web-app>
在web.xml中元素定义的先后序不能颠倒,否则Tomcat服务器可能会(x)抛出SAXParseException.
-->
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN" "
<web-app>
<display-name>Sample Application</display-name>
<description>
This is a Sample Application
</description>
<!--
filter 配置Servletqo(h)?
filter-name 定义qo(h)器的名字。当有多个过滤器Ӟ不能同名
filter-class 指定实现q一qo(h)的类Q这个类负责具体的过滤事?
-->
<filter>
<filter-name>SampleFilter</filter-name>
<filter-class>mypack.SampleFilter</filter-class>
</filter>
<!--
filter-mapping 讑֮qo(h)器负责过滤的URL
filter-name qo(h)器名。这里的名字一定要和filter中的qo(h)器名匚w
url-pattern 指定qo(h)器负责过滤的URL
-->
<filter-mapping>
<filter-name>SampleFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<!--
servlet 配置Servlet.
servlet-name 定义Servlet的名?
servlet-class 指定实现q个servlet的类
init-param 定义Servlet的初始化参数和参数|可有多个init-param。在servletcM通过getInitParamenter(String name)Ҏ(gu)讉K初始化参?
load-on-startup 指定当Web应用启动Ӟ装蝲Servlet的次序?
当gؓ(f)正数或零Ӟ(x)Servlet容器先加载数值小的servletQ再依次加蝲其他数值大的servlet.
当gؓ(f)负或未定义:(x)Servlet容器在Web客户首次讉Kq个servlet时加载它
-->
<servlet>
<servlet-name>SampleServlet</servlet-name>
<servlet-class>mypack.SampleServlet</servlet-class>
<init-param>
<param-name>initParam1</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--
配置servlet映射Q下面代码ؓ(f)SampleServlet指定的相对URL?/sample":
servlet-name 指定servlet的名字,q里的名字应该和<Servlet>元素中定义的名字匚w?
url-pattern 指定讉Kq个servlet的URL。只需l出相对路径?
-->
<servlet-mapping>
<servlet-name>SampleServlet</servlet-name>
<url-pattern>/sample</url-pattern>
</servlet-mapping>
<!--配置session session用来讑֮HttpSession的生命周期。单位(U)-->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<!--配置Wel0come0文g清单-->
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
<!--
配置Tag Library
taglib-uri 讑֮Tag Library的唯一标识W,在Web应用中将Ҏ(gu)q一标识W来引用Tag Library
taglib-location 指定和Tag Library对应的TLD文g的位|?
-->
<taglib>
<taglib-uri>/mytaglib</taglib-uri>
<taglib-location>/WEB-INF/mytaglib.tld</taglib-location>
</taglib>
<!--
配置资源引用
description Ҏ(gu)引用的资源的说明
res-ref-name 指定所引用资源的JNDI名字
res-type 指定所引用资源的类名字
res-auth 指定理所引用资源的Manager,它有两个可选|(x)
ContainerQ由容器来创建和理resource
Application:同W(xu)EB应用来创建和理Resource
-->
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/sampleDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<!--
配置安全U束Q以下代码指定当用户讉K该WEB应用下的所有资源时Q必d备guest角色Q?
web-resource-collection 声明受保护的WEB资源
auth-constraint 声明可以讉K受保护资源的角色Q可以包含多?lt;role-name>子元?
web-resource-name 标识受保护的WEB资源
url-pattern 指定受保护的URL路径
-->
<Security-constraint>
<web-resource-collection>
<web-resource-name>sample appliction</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>guest</role-name>
</auth-constraint>
</Security-constraint>
<!--
配置安全验证d界面Q指定当WEB客户讉K受保护的WEB资源Ӟpȝ弹出的登录对话框的类型?
auth-method 指定验证Ҏ(gu)Q它有三个可选|(x)BASIC(基本验证)、DIGEST(摘要验证)、FORM(表单验证)
realm-name 讑֮安全域的名称
form-login-config 当验证方法ؓ(f)FORMӞ配置验证|页和出错网?
form-login-page 当验证方法ؓ(f)FORMӞ讑֮验证|页
form-error-page 当验证方法ؓ(f)FORMӞ讑֮出错|页
-->
<login-config>
<auth-method>FORM</auth-method>
<realm-name>
Tomcat Server Configuration form-Based Authentication Area
</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
<!--配置对安全验证角色的引用-->
<security-role>
<description>
The role that is required to log into the sample application
</description>
<role-name>guest</role-name>
</security-role>
</web-app>