学习笔记
1.启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param>
2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文.
3.容器将<context-param></context-param>转化为键值对,并交给ServletContext.
4.容器创建<listener></listener>中的类实例,即创建监听.
5.在监听中会有contextInitialized(ServletContextEvent args)初始化方法,在这个方法中获得
ServletContext = ServletContextEvent.getServletContext();
context-param的值 = ServletContext.getInitParameter("context-param的键");
6.得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早.
换句话说,这个时候,你对<context-param>中的键值做的操作,将在你的WEB项目完全启动之前被执行.
7.举例.你可能想在项目启动之前就打开数据库.
那么这里就可以在<context-param>中设置数据库的连接方式,在监听类中初始化数据库的连接.
8.这个监听是自己写的一个类,除了初始化方法,它还有销毁方法.用于关闭应用前释放资源.比如说数据库连接的关闭.
9.... 以上资料来自<<Head First Servlet&JSP>>
web.xml中servlet的配置
<servlet>元素是配置Servlet所用的元素。
<servlet-mapping>元素在Servlet和URL样式之间定义一个映射,即servlet类提供一个url,在地址栏输入对应的映射路径就可以访问你的servlet。
下面给出一段配置代码:
<servlet>
<servlet-name>ServletName</servlet-name>
<servlet-class>xxxpackage.xxxServlet</servlet-class> <!--Servlet的类-->
<init-param>
<!--初始化一个变量,可看成全局变量,可省略-->
<param-name>参数名称</param-name>
<!--变量名称-->
<param-value>参数值</param-value>
<!--变量值-->
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletName</servlet-name>
<url-pattern>/aaa/xxx</url-pattern>
<!--映射的url路径
-->
</servlet-mapping>
在地址栏中输入http://localhost:8080/web-App/aaa/xxx就可以访问了。
缺省Servlet
1.如果某个Servlet的映射路径仅仅为一个正斜杠(/),那么这个Servlet就成为当前Web应用程序的缺省Servlet。
2.凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,它们的访问请求都将交给缺省Servlet处理,也就是说,缺省Servlet用于处理所有其他Servlet都不处理的访问请求。
3.在<tomcat的安装目录>\conf\web.xml文件中,注册了一个名称为org.apache.catalina.servlets.DefaultServlet的Servlet,并将这个Servlet设置为了缺省Servlet。
当访问Tomcat服务器中的某个静态HTML文件和图片时,实际上是在访问这个缺省Servlet。
今天调试的时候开始映射路径写错了,后来改过来后重新访问还是不行。最后发现是IE缓存的问题,清楚缓存之后就OK了~~这个问题以后要注意。