web.xml
是部署配置文件,告诉web容器如何部署web应用程序。
例如,web容器在部署servlet时必须做好网址映射,我们才能通过网址访问该servlet。
Servlet配置与网址映射
在web.xml文件中配置servlet:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<web-app>
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.qikegu.demo.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
上面代码中,首先在<servlet>
元素中配置servlet的名称,类名。
然后,在<servlet-mapping>
元素中配置servlet的网址映射,这里的配置表明所有以.html
结尾的URL都将被映射到myServlet
。
网址映射还可以使用通配符(*),匹配任意文本:
/myServlet*
Servlet 初始化参数
可以从web.xml
文件中给servlet设置初始化参数,参数只限该servlet访问,如下面所示:
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.qikegu.demo.MyServlet</servlet-class>
<init-param>
<param-name>myParam</param-name>
<param-value>paramValue</param-value>
</init-param>
</servlet>
下面是从servlet的init()
方法中读取初始化参数:
public class MyServlet extends GenericServlet {
protected String myParam = null;
public void init(ServletConfig servletConfig) throws ServletException{
this.myParam = servletConfig.getInitParameter("myParam");
}
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
response.getWriter().write("<html><body>myParam = " + this.myParam + "</body></html>");
}
}
web容器首次加载servlet时会调用init()
方法,在servlet成功初始化之前不能访问servlet。
Servlet Load-on-Startup
<servlet>
有一个<load-on-startup>
配置项,可以用来控制web容器何时加载servlet。如果没有设置<load-on-startup>
,web容器通常会在首个请求到达时加载servlet,反之如果设置了<load-on-startup>
,web容器启动时会立即加载servlet。请记住,servlet加载时会调用init()
方法。
<load-on-startup>
配置示例:
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.qikegu.demo.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<load-on-startup>1</load-on-startup>
中的数字指明servlet加载顺序,数字小的先加载。如果值为负或未指定,web容器可以在任何时候加载servlet。
Context 参数
context参数的作用范围是整个web应用,web应用内的所有servlet都可以访问,关于ServletContext
可参考使用ServletContext存取全局信息
示例:
<context-param>
<description>管理员邮件地址</description>
<param-name>webmaster</param-name>
<param-value>admin@qikegu.com</param-value>
</context-param>
下面所示是在HttpServlet
子类中访问Context参数:
String myContextParam =
request.getSession()
.getServletContext()
.getInitParameter("webmaster");