[英]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
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容器使用简单的匹配过程来确定最佳匹配。
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.