web.xml 不同版本区别

问题就出在建Web Project的时候web.xml声明上。
web.xml声明部分一般分为如下版本的xsd,
web-app_2_2.xsd
web-app_2_3.xsd
web-app_2_4.xsd
web-app_2_5.xsd

更详细的列出各版本web.xml声明部分吧,如下:
web-app_2_2.xsd
Java代码 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/dtd/web-app_2_2.dtd">
 
web-app_2_3.xsd
Java代码 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
 

web-app_2_4.xsd
Java代码 

  
<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 

web-app_2_5.xsd
Java代码 

  
<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 

如果想使用EL表达式,确定web.xml里的xsd版本之后一定要在JSP的声明(<%@page %>)部分加一行,如下:
<%@ page isELIgnored="false" %> 
  这样设为false才能解析EL表达式。
经过各版本的test之后....
注意!! 其中servlets 2.4(我没记错的话JSP 2.0出来之后的第一个版本),这个版本的isELIgnored默认设置为false。所以使用web.xml里用web-app_2_4.xsd声明的时候在JSP页面不用特意声明。

官方Documention中写道
The isELIgnored Attribute
• Format
– <%@ page isELIgnored="false" %>
– <%@ page isELIgnored="true" %>
Purpose
– To control whether the JSP 2.0 Expression Language
(EL) is ignored (true) or evaluated normally (false).
• Notes
– If your web.xml specifies servlets 2.3 (corresponding to
JSP 1.2) or earlier, the default is true
• But it is still legal to change the default—you are permitted
to use this attribute in a JSP-2.0-compliant server
regardless of the web.xml version.
– If your web.xml specifies servlets 2.4 (corresponding to
JSP 2.0) or earlier, the default is false

 

不同版本引入新的标签库的
< web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 

  < taglib> 

  < taglib-uri>http://jsptags.com/tags/navigation/pager< /taglib-uri> 

  < taglib-location>/WEB-INF/pager-taglib.tld< /taglib-location> 

  < /taglib> 

  < /web-app>
 
  按上面进行配置时MyEclipse一直在报错,应该把< taglib> 放到 < jsp-config>中:

  
< ?xml version="1.0" encoding="UTF-8"?> 

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

  < jsp-config> 

  < taglib> 

  < taglib-uri>http://jsptags.com/tags/navigation/pager< /taglib-uri> 

  < taglib-location>/WEB-INF/pager-taglib.tld< /taglib-location> 

  < /taglib> 

  < /jsp-config> 

  < /web-app>
   

sun从来不把servlet各个版本的web.xml的规格公布一下,即使上网查找,也很难发现。倒是跟随支援的servlet容器会发布一些范例程序,好运的话,里面将会有最新版本的web.xml写法,比如说,tomcat6正式版里面有了servlet 2.5的写法,如下:

 

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

 

 

 

别以为看到这里就结束了,很可惜地告诉你,这段代码是错误的。不信你尝试打开一下这个链接http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd,你会发现是no page found。

那为什么tomcat6的范例程序能够工作呢,那是因为在tomcat6的lib里面,已经存在这个文件,所以也不需要从网络上面抓取。其实你按照这个web.xml写了servlet 2.5的程序,在tomcat6里面也是可以运行的。

可是当我使用eclipse+xmlbuddy的时候,问题就出来了,因为web-app_2_5.xsd一直不能下载,xmlbuddy一直报错,并且没有语法提示功能。通过搜索,我发现了web-app_2_5.xsd的真实地址其实是http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd,而它的namespace是http://java.sun.com/xml/ns/javaee,于是代码应该改成:

 

<web-app 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"
    version="2.5">

 

 

留意一下不同的部分,其实是因为sun把j2ee改名为javaee。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
web.xmlJavaWeb 应用程序的配置文件之一,用于配置 Web 应用程序的部署描述符。它位于 WEB-INF 目录,对于每个 Web 应用程序都是唯一的。 不同版本Java Servlet 规范定义了不同web.xml 格式和元素。下面是各个版本web.xml 的常见格式和元素: 1. Servlet 2.2: 这个版本web.xml 使用的是 DTD(Document Type Definition)方式进行定义。常见元素包括:servlet、servlet-mapping、session-config、mime-mapping 等。 2. Servlet 2.3: 这个版本web.xml 仍然使用 DTD 方式进行定义,但增加了一些新的元素,如: filter、filter-mapping、listener 等。 3. Servlet 2.4: 这个版本开始使用 XSD(XML Schema Definition)方式进行定义。除了保留之前版本的元素外,还增加了一些新的元素,如: welcome-file-list、error-page 等。 4. Servlet 2.5: 这个版本继续使用 XSD 方式进行定义,增加了一些新的元素,如: dispatcher、jsp-config 等。 5. Servlet 3.0: 这个版本引入了注解驱动开发,允许使用注解来配置 Servlet、Filter 和 Listener,减少了对 web.xml 的依赖。但 web.xml 仍然可以使用,并增加了一些新的元素,如: async-supported、session-config、welcome-file-list 等。 6. Servlet 3.1: 这个版本在之前版本的基础上进行了一些调整和增强,包括对 HTTP 请求和响应的配置、对 WebSocket 和异步处理的支持等。 需要注意的是,不同的 Servlet 容器可能对 web.xml 的支持和规则有所差异,具体可以参考对应 Servlet 容器的文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值