web.xml文件的作用及基本配置

Java的web工程中的web.xml文件有什么作用呢?它是每个web工程都必须的吗?

一个web中完全可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的。


那什么时候需要,什么时候可以不需要呢?

要想回答上面的问题,得先了解web.xml文件是用来干什么的。web.xml文件是用来配置:欢迎页、servlet、filter等的。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的web工程。

 

那么web.xml能做的所有事情都有那些?

其实,web.xml的模式(Schema)文件中定义了多少种标签元素,web.xml中就可以出现它的模式文件所定义的标签元素,它就能拥有定义出来的那些功能。web.xml的模式文件是由Sun公司定义的,每个web.xml文件的根元素中,都必须标明这个web.xml使用的是哪个模式文件。如:

 xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    而且web.xml的模式文件中定义的标签并不是定死的,模式文件也是可以改变的,一般来说,随着web.mxl模式文件的版本升级,里面定义的功能会越来越复杂,也即标签元素的种类会越来越多,但有些是不常用的,我们只需记住一些常用的就可以了。


    下面列出web.xml常用的标签元素及这些标签元素的功能:

1、指定欢迎页面,例如:

 
    index.jsp
    index1.jsp
 

上面的例子指定了2个欢迎页面,显示时按顺序从第一个找起,如果第一个存在,就显示第一个,后面的不起作用。如果第一个不存在,就找第二个,以此类推。

 

关于欢迎页面:

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

 

 

2、命名与定制URL。我们可以为Servlet和JSP文件命名并定制URL,其中定制URL是依赖一命名的,命名必须在定制URL前。下面拿serlet来举例:
(1)、为Servlet命名:

    servlet1
    net.test.TestServlet

(2)、为Servlet定制URL、

    servlet1
    *.do


3、定制初始化参数:可以定制servlet、JSP、Context的初始化参数,然后可以再servlet、JSP、Context中获取这些参数值。下面拿servlet来举例:

    servlet1
    net.test.TestServlet
   
          userName
          Tommy
   

   
          E-mail
          [email protected]
   


经过上面的配置,在servlet中能够调用getServletConfig().getInitParameter("param1")获得参数名对应的值。

 

4、指定错误处理页面,可以通过“异常类型”或“错误码”来指定错误处理页面。

    404
    /error404.jsp

-----------------------------

    java.lang.Exception
    /exception.jsp

 

5、设置过滤器:比如设置一个编码过滤器,过滤所有资源

    XXXCharaSetFilter
    net.test.CharSetFilter


    XXXCharaSetFilter
    /*

 

6、设置监听器:

net.test.XXXListener

 

7、设置会话(Session)过期时间,其中时间以分钟为单位,假如设置60分钟超时:

60

除了这些标签元素之外,还可以往web.xml中添加那些标签元素呢,那些标签元素都能起什么作用呢?我们只要去查看web.xml的模式文件就能知道。直接看模式文件看不懂,可以找一些中文教程来看看。


下面再列出一些网友总结的web.xml常用配置元素:


1、Web应用图标:指出IDE和GUI工具用来表示Web应用的大图标和小图标    
   
/images/app_small.gif    
/images/app_large.gif    

    
2、Web 应用名称:提供GUI工具可能会用来标记这个特定的Web应用的一个名称    
Tomcat Example  
  
3、Web 应用描述: 给出于此相关的说明性文本    
Tomcat Example servlets and JSP pages.  
  
4、上下文参数:声明应用范围内的初始化参数。    
   
    ContextParameter    
    test    
    It is a test parameter.    
   
在servlet里面可以通过getServletContext().getInitParameter("context/param")得到    


5、过滤器配置:将一个名字与一个实现javaxs.servlet.Filter接口的类相关联。    
   
        setCharacterEncoding    
        com.myTest.setCharacterEncodingFilter    
           
            encoding    
            GB2312    
       
   
   
   
        setCharacterEncoding    
        /*    
   


6、监听器配置    
   
      listener.SessionListener    
   


7、Servlet配置    
   基本配置    
       
      snoop    
      SnoopServlet    
   
   
       
      snoop    
      /snoop    
   
   
   高级配置    
       
      snoop    
      SnoopServlet    
         
         foo    
         bar    
     
   
         
         Security role for anonymous access    
         tomcat    
     
   
   
   
       
      snoop    
      /snoop    
   
   
   元素说明    
      用来声明一个servlet的数据,主要有以下子元素:    
      指定servlet的名称    
      指定servlet的类名称    
      指定web站台中的某个JSP网页的完整路径    
      用来定义参数,可有多个init-param。在servlet类中通过getInitParamenter(String name)方法访问初始化参数    
     指定当Web应用启动时,装载Servlet的次序。    
                                 当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet.    
                                 当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它    
      用来定义servlet所对应的URL,包含两个子元素    
        指定servlet的名称    
        指定servlet所对应的URL 
  
8、会话超时配置(单位为分钟)    
       
      120    
   
 
   
9、MIME类型配置    
       
      htm    
      text/html    
   
   
   
10、指定欢迎文件页配置    
       
      index.jsp    
      index.html    
      index.htm    
   

   
11、配置错误页面    
一、 通过错误码来配置error-page    
       
      404    
      /NotFound.jsp    
   
   
上面配置了当系统发生404错误时,跳转到错误处理页面NotFound.jsp。    
二、通过异常的类型配置error-page    
       
       java.lang.NullException    
       /error.jsp    
   
   
上面配置了当系统发生java.lang.NullException(即空指针异常)时,跳转到错误处理页面error.jsp  
  
12、TLD配置    
       
       http://jakarta.apache.org/tomcat/debug-taglib    
       /WEB-INF/jsp/debug-taglib.tld    
   
   
   如果MyEclipse一直在报错,应该把 放到 中    
       
         
          http://jakarta.apache.org/tomcat/debug-taglib    
          /WEB-INF/pager-taglib.tld    
     
   
   
   
13、资源管理对象配置
    
       
       jms/StockQueue    
   
 
   
14、资源工厂配置    
       
       mail/Session    
       javax.mail.Session    
       Container    
   
   
   配置数据库连接池就可在此配置:    
       
       JNDI JDBC DataSource of shop    
       jdbc/sample_db    
       javax.sql.DataSource    
       Container    
   
 
   
15、安全限制配置    
       
      Example Security Constraint    
         
         Protected Area    
         /jsp/security/protected/*    
         DELETE    
         GET    
         POST    
         PUT    
     
   
         
        tomcat    
        role1    
     
   
   
 
   
16、登陆验证配置    
       
     FORM    
     Example-Based Authentiation Area    
         
        /jsp/security/protected/login.jsp    
        /jsp/security/protected/error.jsp    
     
   
   
   
   
17、安全角色:security-role元素给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。    
    分别地声明角色可使高级IDE处理安全信息更为容易。    
   
     tomcat    
   


18、Web环境参数:env-entry元素声明Web应用的环境项    
   
     minExemptions    
     1    
     java.lang.Integer    
   


19、EJB 声明    
   
     Example EJB reference    
     ejb/Account    
     Entity    
     com.mycompany.mypackage.AccountHome    
     com.mycompany.mypackage.Account    
   


20、本地EJB声明    
   
     Example Loacal EJB reference    
     ejb/ProcessOrder    
     Session    
     com.mycompany.mypackage.ProcessOrderHome    
     com.mycompany.mypackage.ProcessOrder    
 
  
21、配置DWR    
   
      dwr-invoker    
      uk.ltd.getahead.dwr.DWRServlet    
   
   
      dwr-invoker    
      /dwr/*    
 
  
22、配置Struts    
    Struts Blank Application    
       
        action    
           
            org.apache.struts.action.ActionServlet    
       
   
           
            detail    
            2    
       
   
           
            debug    
            2    
       
   
           
            config    
            /WEB-INF/struts-config.xml    
       
   
           
            application    
            ApplicationResources    
       
   
        2    
   
   
       
        action    
        *.do    
   
   
       
        index.jsp    
   
   


       
       
        struts-bean    
        /WEB-INF/tld/struts-bean.tld    
   
   
       
        struts-html    
        /WEB-INF/tld/struts-html.tld    
   
   
       
    struts-nested    
    /WEB-INF/tld/struts-nested.tld    
   
   
       
        struts-logic    
        /WEB-INF/tld/struts-logic.tld    
   
   
       
        struts-tiles    
        /WEB-INF/tld/struts-tiles.tld    
   
   

23、配置Spring(基本上都是在Struts中配置的)    
       
       
      contextConfigLocation    
         
           
        /WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml    
     
   
   
   


       


   
     org.springframework.web.context.ContextLoaderListener    
   


   
         
       org.springframework.web.context.request.RequestContextListener    
     
   
 


 如果是用myeclipse编辑web.xml,在设计模式下能看到web.xml中都可以编辑哪些元素,很方便,如下图。



你可能感兴趣的:(web)