这段时间在培训jsp,上午老师讲了web.xml的一些常用的标签,现在总结一下笔记,晒晒,网各位网友们指教一二。
web.xml是Web应用程序的部署描述文件,是用来给Web服务器解析并获取Web应用程序相关描述的
<servlet>:用来在Web应用中定义一个Servlet
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>javaweb.LoginServlet</servlet-class>
<init-param>
<param-name>driver</param-name>
<param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<init-param>:是给servlet的init()方法传递需要的信息的,这些值会被封装成ServletConfig对象。如:连接数据库需要的driver,url,user,password等数据,就可以写在<init-param>标签里,然后重载init()方法,new 一个ServletConfig对象,就可以取到这些值了。
如:public void init() throws ServletException{
ServletConfigconfig=getServletConfigString ;
driver = config.getParameter(“driver”);
}
由于<init-param>是在<servlet>里面,属于<servlet>内部的标签,因此里面的值也只能是这一个servlet能取到,并且也只能在该servlet的init()方法里取到。其他的servlet是不能取到这个servlet里的值的,因此如果遇到,大一点的一些项目,里面有很多servlet,这些servlet都需要访问数据库,那么这样写就很麻烦了。
<context-param>:为了解决<init-param>的局限性,我们有了<context-param>,它就相当于全局变量似的,整个工程中任何的servlet都可以用里面的值,并且也不仅限于在init()方法中取值,哪个方法里都可以取到值。
<context-param>
<param-name>configLocation</param-name>
<param-value>/WEB-INF/myAppCofig.xml</param-value>
</context-param>
整个参数表明了一个配置文件的所在路径,在任一Servlet代码中可以使用如下方式获取其值
String configLocation=getServletContext().getInitParameter(“configLocation”);
不过它的缺点是:耗费资源。当访问量大的时候,用数据库连接池会比较好。
因此我们在这里总结:
小型项目:<init-param> ,中型项目:<context-param>,大型项目:连接池。
<load-on-startup>:设置服务器装载的顺序,如果你的级别高(也就是数字小),那么你就会被首先装载。
<servlet-mapping>:提供了能够使用某一Servlet处理请求的映射地址
当客户端发送请求:http://www.yourserver.com/youwebapp/login,路径中含有“/login”,所以Web服务器将会把此请求交给匹配此路径的LoginServlet处理
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<error-page>:可以通过定义特定的错误页面,当服务器产生错误时会选择相应的页面展示给用户。可以通过web.xml中的<error-page>元素来定义产生异常时需要返回的页面
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/exception.html</location>
</error-page>
<welcome-file-list>:默认页面,在这里可以设置工程默认页
<filter>:标签和<servlet>标签功能类似,这里是向容器定义并注册一个filter对象的
<filter>
<filter-name>Filter1</filter-name>
<filter-class>com.neu.filter.filter1</filter-class>
</filter>
<filter>中的<init-param>:和<servlet>中的功能一样,不过这个是封装成filterConfig
<filter-mapping>
<filter-name>Filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>:标签和<servlet-mapping>功能类似,来匹配客户端请求路径的,如上面的<filter-mapping>就是对所有的请求都要经过过滤器的。
<filter-mapping>中有个<servlet-name>:这个标签的功能是指定该filter只对这个servlet有效,而对其他的无效。