
一、简单的servlet配置
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>xxx.xxx.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
分为两部分,
1. <servlet></servlet>指定处理请求的servlet的name,class
2. <servlet-mapping></servlet-mapping>指定此servlet接收请求的路径
对于部署在tomcat容器里的应用,可以配置tomcat的server.xml,有两种方式:
1. <Context path=”" do
cBase=”D:\\work\\eclipse\\workspace\\HelloServlet\\WebRoot” />
访问路径是:http://localhost:8080/hello
2. <Context path=”helloservlet” docBase=”D:\\work\\eclipse\\workspace\\HelloServlet\\WebRoot” />
访问路径是:http://localhost:8080/helloservlet/hello
要注意的是,最后一个“/”后的字符串必须和servlet-mapping里的url-pattern对应。
web.xml里可以有多个servlet配置,用于处理不同的请求。
二、servlet初始化参数和整个应用公用的参数配置
1. servlet初始化参数配置
由于某些原因需要在servlet初始化的时候传入一些参数,以免硬编码,如:
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>xxx.xxx.HelloServlet</servlet-class>
<init-param>
<param-name>email</param-name>
<param-value>xxx@163.com</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
上面的<init-param></init-param>用来配置servlet初始化参数,可以有多个,后台获取这些参数的代码:
getInitParameter(“email”);或者getServletConfig().getInitParameter(“email”);
原理:
每一个servlet都对应一个ServletConfig实例,在容器建立此servlet时,会读取web.xml里关于此servlet的配置,并将所有的<init-param></init-param>创建名/值对放在ServletConfig实例中,当servlet处理请求时,就可以得到servletConfig实例中的初始化参数了。
注:容器只在servlet初始化时读这些参数,如果以后更改了,需要重新部署此servlet。
2. 整个应用公用的参数配置,又叫上下文初始化参数
相当于公共常量,应用中的每个servlet都可能用到,示例:
<context-param>
<param-name>adminemail</param-name>
<param-value>xxxx@126.com</param-value>
</context-param>
<context-param>
<param-name>breed</param-name>
<param-value>chinese</param-value>
</context-param>
(1) 和servlet初始化参数不一样的地方是,servlet初始化参数放在<servlet></servlet>中,而上下文 参数是和<servlet></servlet>平级的,均放在<web-app></web- app>中。
(2) 后台获取这些参数的代码:
getServletContext().getInitParameter(“adminemail”);
原理和servlet初始化参数类似。
(3) 这种配置只能设定字符串,而对于希望参数是一个数据库DataSource这种对象的设定,上下文参数是无能为力的,有个办法是实现 ServletContextListener接口,上下文参数依然是字符串,但是在listener里根据这些参数构造一个对象出来,然后放在 ServletContext里,这样每个servlet就可以共用这个对象了。
配置:
<listener>
<listener-class>net.flymouse.listener.MyServletContextListener</listener-class>
</listener>
ServletContextListener接口就2个方法:
public void contextDestroyed(ServletContextEvent event) {
}
public void contextInitialized(ServletContextEvent event) {
}
分别是应用起来是做一些事情,在应用关闭时做一些事情,实例:
public class MyServletContextListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent event) {
}
public void contextInitialized(ServletContextEvent event) {
ServletContext context = event.getServletContext();
String dogBreed = context.getInitParameter("breed");
Dog dog = new Dog();
dog.setBreed(dogBreed);
context.setAttribute("dog", dog);
}
}