web.xml作用

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(ServletContextEventargs)初始化方法,在这个方法中获得ServletContext =ServletContextEvent.getServletContext();
context-param的值 =ServletContext.getInitParameter("context-param的键");
6.得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早.
换句话说,这个时候,你对<context-param>中的键值做的操作,将在你的WEB项目完全启动之前被执行.
7.举例.你可能想在项目启动之前就打开数据库.
那么这里就可以在<context-param>中设置数据库的连接方式,在监听类中初始化数据库的连接.
8.这个监听是自己写的一个类,除了初始化方法,它还有销毁方法.用于关闭应用前释放资源.比如说数据库连接的关闭.
如:
<!-- 加载spring的配置文件 -->
<context-param>
 
  <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml,/WEB-
INF/jason-servlet.xml</param-value>
</context-param>
<listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
又如: --->自定义context-param,且自定义listener来获取这些信息
<context-param>
   <param-name>urlrewrite</param-name>
   <param-value>false</param-value>
</context-param>
<context-param>
   <param-name>cluster</param-name>
   <param-value>false</param-value>
</context-param>
<context-param>
   <param-name>servletmapping</param-name>
   <param-value>*.bbscs</param-value>
</context-param>
<context-param>
   <param-name>poststoragemode</param-name>
   <param-value>1</param-value>
</context-param>
<listener>
   <listener-class>com.laoer.bbscs.web.servlet.SysListener</listener-class>
</listener>
public class SysListener extends HttpServlet implementsServletContextListener {
private static final Log logger =LogFactory.getLog(SysListener.class);
public void contextDestroyed(ServletContextEvent sce) {
   //用于在容器关闭时,操作
}
//用于在容器开启时,操作
public void contextInitialized(ServletContextEvent sce) {
   String rootpath =sce.getServletContext().getRealPath("/");
  System.out.println("-------------rootPath:"+rootpath);
   if (rootpath != null) {
    rootpath =rootpath.replaceAll("\\\\", "/");
   } else {
    rootpath ="/";
   }
   if (!rootpath.endsWith("/")){
    rootpath =rootpath + "/";
   }
   Constant.ROOTPATH =rootpath;
   logger.info("Application RunPath:" + rootpath);
   String urlrewrtie =sce.getServletContext().getInitParameter("urlrewrite");
   boolean burlrewrtie =false;
   if (urlrewrtie != null){
    burlrewrtie= Boolean.parseBoolean(urlrewrtie);
   }
   Constant.USE_URL_REWRITE =burlrewrtie;
   logger.info("Use Urlrewrite:"+ burlrewrtie);
   其它略之....
   }
}
  
context-param和init-param区别
web.xml里面可以定义两种参数:
(1)application范围内的参数,存放在servletcontext中,在web.xml中配置如下:
<context-param>
          <param-name>context/param</param-name>
          <param-value>avalible duringapplication</param-value>
</context-param>
(2)servlet范围内的参数,只能在servlet的init()方法中取得,在web.xml中配置如下:
<servlet>
   <servlet-name>MainServlet</servlet-name>
   <servlet-class>com.wes.controller.MainServlet</servlet-class>
   <init-param>
      <param-name>param1</param-name>
      <param-value>avalible in servletinit()</param-value>
   </init-param>
   <load-on-startup>0</load-on-startup>
</servlet>
在servlet中可以通过代码分别取用:
package com.wes.controller;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
public class MainServlet extends HttpServlet ...{
    publicMainServlet() ...{
       super();
    }
    public voidinit() throws ServletException ...{
        System.out.println("下面的两个参数param1是在servlet中存放的");
        System.out.println(this.getInitParameter("param1"));
        System.out.println("下面的参数是存放在servletcontext中的");
       System.out.println(getServletContext().getInitParameter("context/param"));
     }
}
第一种参数在servlet里面可以通过getServletContext().getInitParameter("context/param")得到
第二种参数只能在servlet的init()方法中通过this.getInitParameter("param1")取得.


常用标签介绍:
1、指定欢迎页面,例如:
<welcome-file-list>
 <welcome-file-list>
   <welcome-file>index.jsp</welcome-file>
   <welcome-file>index1.jsp</welcome-file>
 </welcome-file-list>
上面的例子指定了2个欢迎页面,显示时按顺序从第一个找起,如果第一个存在,就显示第一个,后面的不起作用。如果第一个不存在,就找第二个,以此类推。

关于欢迎页面:

   访问一个网站时,默认看到的第一个页面就叫欢迎页,一般情况下是由首页来充当欢迎页的。一般情况下,我们会在web.xml中指定欢迎页。但web.xml并不是一个Web的必要文件,没有web.xml,网站仍然是可以正常工作的。只不过网站的功能复杂起来后,web.xml的确有非常大用处,所以,默认创建的动态web工程在WEB-INF文件夹下面都有一个web.xml文件。
      对于tomcat来说,当你只指定一个web的根名,没有指定具体页面,去访问时一个web时,如果web.xml文件中配置了欢迎页,那么就返回指定的那个页面作为欢迎页,而在文中没有web.xml文件,或虽然有web.xml,但web.xml也没指定欢迎页的情况下,它默认先查找index.html文件,如果找到了,就把index.html作为欢迎页还回给浏览器。如果没找到index.html,tomcat就去找index.jsp。找到index.jsp就把它作为欢迎页面返回。而如果index.html和index.jsp都没找到,又没有用web.xml文件指定欢迎页面,那此时tomcat就不知道该返回哪个文件了,它就显示Therequested resource (/XXX) is notavailable的页面。其中XXX表示web的根名。但如果你指定了具体页面,是可以正常访问的。

2、命名与定制URL。我们可以为Servlet和JSP文件命名并定制URL,其中定制URL是依赖一命名的,命名必须在定制URL前。下面拿serlet来举例:
(1)、为Servlet命名:
<servlet>
   <servlet-name>servlet1</servlet-name>
   <servlet-class>net.test.TestServlet</servlet-class>
</servlet>

(2)、为Servlet定制URL、
<servlet-mapping>
   <servlet-name>servlet1</servlet-name>
   <url-pattern>*.do</url-pattern>
</servlet-mapping>


3、定制初始化参数:可以定制servlet、JSP、Context的初始化参数,然后可以再servlet、JSP、Context中获取这些参数值。下面哪servlet来举例:
<servlet>
   <servlet-name>servlet1</servlet-name>
   <servlet-class>net.test.TestServlet</servlet-class>
   <init-param>
         <param-name>userName</param-name>
         <param-value>Tommy</param-value>
   </init-param>
   <init-param>
         <param-name>E-mail</param-name>
         <param-value>Tommy@163.com</param-value>
   </init-param>
</servlet>
经过上面的配置,在servlet中能够调用getServletConfig().getInitParameter("param1")获得参数名对应的值。

4、指定错误处理页面,可以通过“异常类型”或“错误码”来指定错误处理页面。
<error-page>
   <error-code>404</error-code>
   <location>/error404.jsp</location>
</error-page>
-----------------------------
<error-page>
   <exception-type>java.lang.Exception<exception-type>
   <location>/exception.jsp<location>
</error-page>

5、设置过滤器:比如设置一个编码过滤器,过滤所有资源
<filter>
   <filter-name>XXXCharaSetFilter</filter-name>
   <filter-class>net.test.CharSetFilter</filter-class>
</filter>
<filter-mapping>
   <filter-name>XXXCharaSetFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

6、设置监听器:
<listener>
<listener-class>net.test.XXXLisenet</listener-class>
</listener>

7、设置会话(Session)过期时间,其中时间以分钟为单位,假如设置60分钟超时:
<session-config>
<session-timeout>60</session-timeout>
</session-config>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kzbpp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值