首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >木兰没有看到定制的servlet

木兰没有看到定制的servlet
EN

Stack Overflow用户
提问于 2012-06-07 12:14:34
回答 1查看 920关注 0票数 0

我在Magnolia Servlet上遇到了很大的麻烦,到目前为止,我已经尝试了我所能想到的一切。

对于木兰文献,我们可以在模块定义中设置servlet定义,而不是web.xml (这听起来更好,尤其是对于扩展)

所以我把这些代码放在我的xml模块中

代码语言:javascript
复制
 <servlets>
    <servlet>
        <name>jcaptcha</name>
        <class>com.octo.captcha.module.servlet.image.SimpleImageCaptchaServlet</class>
        <mappings>
        <mapping>/jcaptcha.jpg</mapping>
        </mappings>
    </servlet>
 </servlets>

然后我为过滤器创建了旁路节点(config.server.filters.bypasses.jcaptcha.xml)。

代码语言:javascript
复制
 <?xml version="1.0" encoding="UTF-8"?>
<sv:node sv:name="jcaptcha" xmlns:sv="http://www.jcp.org/jcr/sv/1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <sv:property sv:name="jcr:primaryType" sv:type="Name">
        <sv:value>mgnl:contentNode</sv:value>
    </sv:property>
    <sv:property sv:name="jcr:uuid" sv:type="String">
        <sv:value>f845ae89-a537-4e9f-b074-57d812fd92a6</sv:value>
    </sv:property>
    <sv:property sv:name="class" sv:type="String">
        <sv:value>info.magnolia.voting.voters.URIStartsWithVoter</sv:value>
    </sv:property>
    <sv:property sv:name="pattern" sv:type="String">
        <sv:value>/jcaptcha.jpg</sv:value>
    </sv:property>
    <sv:node sv:name="MetaData">
        <sv:property sv:name="jcr:primaryType" sv:type="Name">
            <sv:value>mgnl:metaData</sv:value>
        </sv:property>
        <sv:property sv:name="mgnl:activated" sv:type="Boolean">
            <sv:value>false</sv:value>
        </sv:property>
        <sv:property sv:name="mgnl:activatorid" sv:type="String">
            <sv:value>superuser</sv:value>
        </sv:property>
        <sv:property sv:name="mgnl:authorid" sv:type="String">
            <sv:value>superuser</sv:value>
        </sv:property>
        <sv:property sv:name="mgnl:creationdate" sv:type="Date">
            <sv:value>2007-04-25T18:23:31.784+02:00</sv:value>
        </sv:property>
        <sv:property sv:name="mgnl:lastaction" sv:type="Date">
            <sv:value>2007-05-02T17:00:15.025+02:00</sv:value>
        </sv:property>
        <sv:property sv:name="mgnl:lastmodified" sv:type="Date">
            <sv:value>2012-06-07T05:41:25.275-05:00</sv:value>
        </sv:property>
    </sv:node>
</sv:node>

不过,当我请求localhost/magnolia/jcaptcha.jpg时,它会给我带来404错误。“但是”当我将servlet定义放入web.xml中时,它给出了正确的结果。

有人能告诉我我错过了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-10 07:41:46

这是我从木兰论坛那里得到的答案

代码语言:javascript
复制
 <servlets>
 <servlet>
 <name>jcaptcha</name>
 <class>com.octo.captcha.module.servlet.image.SimpleImageCaptchaServlet</class>
 <mappings>
 <mapping>/jcaptcha.jpg</mapping>
 </mappings>
 </servlet>
 </servlets>

这样做会告诉Magnolia为您运行servlet。您可以在config:/server/filter/servlets/jcaptcha中安装模块时验证servlet是否已安装。

然后我为过滤器创建了旁路节点(config.server.filters.bypasses.jcaptcha.xml)。

这样做,您可以告诉Magnolia不要处理所述的旁路url,而是让Servlet容器处理程序请求。因为只有Magnolia知道servlet,而不知道容器,所以您可以得到404。一旦您让容器知道servlet (通过将它添加到web.xml),就会得到结果。

您有两个选项--要么在web.xml中保留旁路和定义,要么在模块中保留servlet定义。你不能两者兼得。还请记住,Magnolia将在模块安装期间从模块描述符中读取servlet定义,因此如果该模块已经安装,则需要调用info.magnolia.module.delta.RegisterModuleServletsTask作为更新的一部分。

哈奇河

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10931587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档