永发信息网

sitemesh配置标签库为什么总是报错?

答案:1  悬赏:50  手机版
解决时间 2021-05-04 05:05

我在web.xml中配置了两个标签库。sitemesh-page.tld和sitemesh-decorator.tld文件均已拷贝到WEB-INF文件夹下面。此外,sitemesh-2.4.2.jar文件放在了lib目录下。

我以为我打字的过程有点误差,又拷贝了从官方网站下载的例子,拷贝了人家的配置,就是上面那段,原原本本拷贝的,不可能是打字错误造成的。

后来我把上面一段

<web-app version="2.5" 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-app >就正常了,请问web.xml这段声明有什么用?我改了有什么影响吗?
最佳答案
部署描述符实际上是一个XML文件,包含了很多描述servlet/JSP应用的各个方面的元素,如servlet注册、servlet映射以及监听器注册。部署描述符从下面的XML头开始:

<?xml version="1.0" encoding="ISO-8859-1"?>

这个头指定了XML的版本号以及所使用的编码。头的下面是DOCTYPE声明:

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
" http://java.sun.com/dtd/web-app_2_3.dtd">

这段代码指定文件类型定义(DTD),可以通过它检查XML文档的有效性。下面显示的<!DOCTYPE>元素有几个特性,这些特性告诉我们关于DTD的信息:
● web-app定义该文档(部署描述符,不是DTD文件)的根元素
● PUBLIC意味着DTD文件可以被公开使用
● "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"意味着DTD由Sun Microsystems, Inc.维护。
该信息也表示它描述的文档类型是DTD Web Application 2.3,而且DTD是用英文书写的。
● URL" http://java.sun.com/dtd/web-app_2_3.dtd"表示D文件的位置。

注意:
在部署描述符中, <!--…-->用于注释。
部署描述符的根元素是web-app。DTD文件规定,web-app元素的子元素的语法如下:

<!ELEMENT web-app (icon?, display-name?, description?,
distributable?, context-param*, filter*, filter-mapping*,
listener*, servlet*, servlet-mapping*, session-config?,
mime-mapping*, welcome-file-list?,
error-page*, taglib*, resource-env-ref*, resource-ref*,
security-constraint*, login-config?, security-role*,env-entry*,
ejb-ref*, ejb-local-ref*)>

正如您所看到的,这个元素含有23个子元素,而且子元素都是可选的。问号(?)表示子元素是可选的,而且只能出现一次。星号(*)表示子元素可在部署描述符中出现零次或多次。有些子元素还可以有它们自己的子元素。
web.xml文件中web-app元素声明的是下面每个子元素的声明。下面的章节讲述部署描述符中可能包含的所有子元素。
注意:
在Servlet 2.3中,子元素必须按照DTD文件语法描述中指定的顺序出现。比如,如果部署描述符中的web-app元素有servlet和servlet-mapping两个子元素,则servlet子元素必须出现在servlet-mapping子元素之前。在Servlet 2.4中,顺序并不重要。
下面对web.xml文件各元素进行详解

1. icon元素
icon元素用来指定GIF格式或JPEG格式的小图标(16×16)或大图标(32×32)的文件名。

<!ELEMENT icon (small-icon?, large-icon?)>
<!ELEMENT small-icon (#PCDATA)>
<!ELEMENT large-icon (#PCDATA)>

icon元素包括两个可选的子元素:small-icon子元素和large-icon子元素。文件名是Web应用归档文件(WAR)的根的相对路径。
部署描述符并没有使用icon元素。但是,如果使用XML工具编辑部署描述符,XML编辑器可以使用icon元素。

2. display-name元素
如果使用工具编辑部署描述符,display-name元素包含的就是XML编辑器显示的名称。

<!ELEMENT display-name (#PCDATA)>

下面是一个含有display-name元素的部署描述符:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!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>
<display-name>Online Store Application</display-name>
</web-app>

3. description元素
可以使用description元素来提供有关部署描述符的信息。XML编辑器可以使用description元素的值。

<!ELEMENT description (#PCDATA)>

4. distributable元素
可以使用distributable元素来告诉servlet/JSP容器,编写将在分布式Web容器中部署的应用:

<!ELEMENT distributable EMPTY>

例如,下面是一个含有distributable元素的部署描述符的例子:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!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>
<distributable/>
</web-app>

5. context-param元素
context-param元素含有一对参数名和参数值,用作应用的servlet上下文初始化参数。参数名在整个Web应用中必须是惟一的。

<!ELEMENT context-param (param-name, param-value, description?)>
<!ELEMENT param-name (#PCDATA)>
<!ELEMENT param-value (#PCDATA)>
<!ELEMENT description (#PCDATA)>

param-name 子元素包含有参数名,而param-value子元素包含的是参数值。作为选择,可用description子元素来描述参数。

下面是一个含有context-param元素的有效部署描述符:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!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>
<context-param>
<param-name>jdbcDriver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
</web-app>

6. filter元素
filter元素用于指定Web容器中的过滤器。在请求和响应对象被servlet处理之前或之后,可以使用过滤器对这两个对象进行操作。利用下一节介绍的filter-mapping元素,过滤器被映射到一个servlet或一个URL模式。这个过滤器的filter元素和filter-mapping元素必须具有相同的名称。

<!ELEMENT filter (icon?, filter-name, display-name?, description?,
filter-class, init-param*)>
<!ELEMENT filter-name (#PCDATA)>
<!ELEMENT filter-class (#PCDATA)>

icon、display-name和description元素的用法和上一节介绍的用法相同。init-param元素与context-param元素具有相同的元素描述符。filter-name元素用来定义过滤器的名称,该名称在整个应用中都必须是惟一的。filter-class元素指定过滤器类的完全限定的名称。

下面是一个使用filter元素的部署描述符的例子:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!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>
<filter>
<filter-name>Encryption Filter</filter-name>
<filter-class>com.branysoftware.EncryptionFilter</filter-class>
</filter>
</web-app>

7. filter-mapping元素
filter-mapping元素用来声明Web应用中的过滤器映射。过滤器可被映射到一个servlet或一个URL模式。将过滤器映射到一个servlet中会造成过滤器作用于servlet上。将过滤器映射到一个URL模式中则可以将过滤器应用于任何资源,只要该资源的URL与URL模式匹配。过滤是按照部署描述符的filter-mapping元素出现的顺序执行的。

<!ELEMENT filter-mapping (filter-name, (url-pattern | servlet-name))>
<!ELEMENT filter-name (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
<!ELEMENT servlet-name (#PCDATA)>

filter-name值必须对应filter元素中声明的其中一个过滤器名称。下面是一个含有filter-mapping元素的部署描述符:

<?xml version="1.0" encoding="ISO-8859-1">
<!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>
<filter>
<filter-name>Encryption Filter</filter-name>
<filter-class>com.brainysoftware.EncryptionFilter</filter-class>
</filter
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
现在有什么好看的网游书或修真书 跪求几本!
广东省中山市哪里有公共营养师培训班考证
我想使用一个移动硬盘实现双系统,比如本子硬
dnf怎样洗点
海燕发型设计怎么去啊,有知道地址的么
《小夜刀》(最后一个吸血鬼)好看?小夜好酷
给我一个QQ飞车车队名
泡泡装备没了是怎么回事?
问一个城市。
笑林广记翻译 避暑
如何取消红钻
黛玉的判词是什么
春哥在三藏法师女儿国太冒险里发的“城管入侵
DNF传承:神圣的生命女神铂金护腿 40重甲护腿
棋盘小区东门地址有知道的么?有点事想过去
推荐资讯
上海夜校有服装专业的吗?学费大概是多少
成功男人背后必须有个女人嘛??
QQ餐厅的经验值
开刀生的,离现在一年半又怀孕了,能不能要啊
如果看一个看东西看的仔细头就会晕,是怎么回
我的车怎么不能停啊
CSOL怎么充值?
问问经验值不足怎么解决啊
怎么用梦幻西游来挣人民币?
江北慈城吕邦权中医诊所在哪里啊,我有事要去
用醋洗完头,最后还是要用清水冲洗一次是吗?
得到的宠物蛋在哪呀?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?