我无法在我的项目中添加Servlet

时间:2014-05-23 00:13:09

标签: java xml jsp servlets web.xml

我正在尝试在我的项目中添加一个servlet。但似乎没有用。

首先,我在web.xml文件中插入了和标签。

我试图访问地址“/ App / newrmt?~~”。但浏览器显示404错误消息。

我认为系统无法识别我描述的映射模式。

在web.xml文件中插入标记之前,我应该做些什么来添加新的servlet和模式?

它的原始web.xml代码如下。

<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet>
    <servlet-name>HttpReceiver</servlet-name>
    <servlet-class>myProject.HttpReceiver</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet> 

<servlet> 
    <servlet-name>RmtlImg</servlet-name> 
    <servlet-class>myProject.ImageServlet</servlet-class> 
    <init-param> 
        <param-name>dir</param-name> 
        <param-value>/APP/WAS/FILES/A/</param-value> 
    </init-param> 
</servlet>


<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>HttpReceiver</servlet-name>
    <url-pattern>*.http</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>RmtlImg</servlet-name>
    <url-pattern>/rmtlimgdown</url-pattern>
</servlet-mapping>

然后,我改变了下面的代码

<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet>
    <servlet-name>HttpReceiver</servlet-name>
    <servlet-class>myProject.HttpReceiver</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet> 

<servlet> 
    <servlet-name>RmtlImg</servlet-name> 
    <servlet-class>myProject.ImageServlet</servlet-class> 
    <init-param> 
        <param-name>dir</param-name> 
        <param-value>/APP/WAS/FILES/A/</param-value> 
    </init-param> 
</servlet>
**<servlet> 
    <servlet-name>NewRmtlImg</servlet-name> 
    <servlet-class>myProject.ImageServlet</servlet-class> 
    <init-param> 
        <param-name>dir</param-name> 
        <param-value>/APP/WAS/FILES/A/</param-value> 
    </init-param> 
</servlet>**

<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>HttpReceiver</servlet-name>
    <url-pattern>*.http</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>RmtlImg</servlet-name>
    <url-pattern>/rmtlimgdown</url-pattern>
</servlet-mapping>
**<servlet-mapping>
    <servlet-name>NewRmtlImg</servlet-name>
    <url-pattern>/newrmt</url-pattern>
</servlet-mapping>**

当我在下面的标签中更改模式时,效果很好。这意味着servlet类本身编码良好。只是WAS不理解这种模式。

<servlet-mapping>
    <servlet-name>NewRmtlImg</servlet-name>
    <url-pattern>/newrmt</url-pattern>
</servlet-mapping>

===> 

<servlet-mapping>
    <servlet-name>NewRmtlImg</servlet-name>
    <url-pattern>/rmtlimgdown</url-pattern>
</servlet-mapping>

Anyboday帮助我!

2 个答案:

答案 0 :(得分:0)

  

当我在下面的标签中更改模式时,效果很好。这意味着servlet类本身编码良好。只是WAS不了解这种模式。

您可以帮助您理解url-pattern

Servlet匹配程序

请求可以匹配给定上下文中的多个servlet映射。 servlet容器使用简单的匹配过程来确定最佳匹配。

匹配程序有四个简单的规则。

  • 首先,容器优先于通配符路径匹配精确路径匹配

  • 其次,容器更喜欢匹配最长模式

  • 第三,容器首选路径匹配文件类型匹配。

  • 最后,模式<url-pattern>/</url-pattern>始终匹配任何其他模式不匹配的请求。


有关详细说明,请查看我的帖子How does a servlets filter identify next destination is another filter or a servlet/jsp?

答案 1 :(得分:0)

我解决了这个问题。

我发现我需要更改设置文件&#34; httpd.conf&#34;。

系统已配置多个虚拟主机&#34; MatchExpression&#34;。

所以我要做的是在配置文件中添加一个url-pattern。

抱歉我的英语不好。