简体   繁体   English

我无法在项目中添加Servlet

[英]I can't add a Servlet on my project

I'm trying to add a servlet on my project. 我正在尝试在我的项目上添加一个servlet。 But it seems not to work. 但这似乎行不通。

The first, I inserted the and tags in web.xml file. 首先,我将and标记插入web.xml文件中。

And the I tried to accesss the address "/App/newrmt?~~". 然后,我尝试访问地址“ / App / newrmt?~~”。 But the browser showed 404 error message. 但是浏览器显示404错误消息。

I think the system don't recognize the mapping pattern I described. 我认为系统无法识别我描述的映射模式。

Is there anything I should do to add a new servlet and a pattern before insert tags in web.xml files? 在web.xml文件中插入标签之前,我应该做些什么来添加新的servlet和模式?

It's original web.xml code is below. 下面是原始的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>

Then, I changed the code like below 然后,我更改了如下代码

<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>**

When I change just pattern in the tag like below, It works well. 当我仅更改如下标记中的模式时,它就会很好地工作。 It means servlet-class itself is well coded. 这意味着servlet类本身已被正确编码。 Just the WAS don't understand the pattern. 只是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 helps me! 任何时候都可以帮助我!

When I change just pattern in the tag like below, It works well. 当我仅更改如下标记中的模式时,它就会很好地工作。 It means servlet-class itself is well coded. 这意味着servlet类本身已被正确编码。 Just the WAS don't understand the pattern. 只是WAS不了解这种模式。

It might help you to understand the url-pattern 它可能会帮助您了解url-pattern

Servlet Matching Procedure Servlet匹配程序

A request may match more than one servlet-mapping in a given context. 在给定的上下文中,一个请求可以匹配多个servlet映射。 The servlet container uses a straightforward matching procedure to determine the best match. Servlet容器使用简单的匹配过程来确定最佳匹配。

The matching procedure has four simple rules. 匹配过程具有四个简单规则。

  • First, the container prefers an exact path match over a wildcard path match. 首先,容器比通配符路径匹配更喜欢精确的路径匹配。

  • Second, the container prefers to match the longest pattern . 其次,容器喜欢匹配最长的图案

  • Third, the container prefers path matches over filetype matches. 第三,容器比文件类型匹配更喜欢路径匹配。

  • Finally, the pattern <url-pattern>/</url-pattern> always matches any request that no other pattern matches. 最后,模式<url-pattern>/</url-pattern>始终匹配没有其他模式匹配的任何请求。


Have a look at my post How does a servlets filter identify next destination is another filter or a servlet/jsp? 看看我的帖子servlet过滤器如何识别下一个目标是另一个过滤器还是servlet / jsp? for detailed description. 详细说明。

I solved this problem. 我解决了这个问题。

I found out that I need to change the setting file which is "httpd.conf". 我发现我需要更改设置文件“ httpd.conf”。

The system has been configured several virtual-host with "MatchExpression". 系统已使用“ MatchExpression”配置了几个虚拟主机。

So what I have to do is to add a single of url-pattern in the config file. 所以我要做的是在配置文件中添加一个url-pattern。

sorry for my bad English. 对不起,我的英语不好。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM