2010-09-15 92 views
0

我在web.xml文件中定义了两个servlet,即default2和myservlet。 default2 servlet用于映射静态文件,如javascript和css。 myservlet用于获取动态内容。Tomcat 6.x web.xml默认和自定义servlet路由

<servlet> 
    <servlet-name>default2</servlet-name> 
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet> 
    <servlet-name>myservlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      classpath:my-servlet.xml 
     </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

servlet映射定义如下

<servlet-mapping> 
    <servlet-name>myservlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>default2</servlet-name> 
    <url-pattern>/resources/*</url-pattern> 
</servlet-mapping> 

当我尝试访问在/资源的任何文件,我得到一个404的任何想法,为什么这个配置不工作或改变这种配置来让它起作用。

+1

Tomcat错误说了什么?另外,为什么两个servlet都加载相同的值' 1'? – 2010-09-15 20:36:31

+0

启动时没有tomcat错误。当我们访问/资源下的任何文件时,它会给出文件未找到错误。 – 2010-09-15 20:45:55

回答

-1

根据@BalusC评论删除了错误的答案部分。

在您的servlet中设置一个断点并执行调试会话。寻找你的servlet在这些文件中获取的路径。确保它们匹配的位置

+0

错误,servletcontainer将匹配*最具体的* servlet url模式。可能你会将它与过滤器的行为混淆起来。 – BalusC 2010-09-15 20:50:34

+0

是的,你写的。我没在想。 仍然在servlet中设置断点将有助于确定应用程序在何处查找文件。 – Sean 2010-09-15 20:55:28

+0

我建议编辑您的帖子,因为你得到负分数。 – 2010-09-15 21:27:35

0

它应该工作正常。这些文件是,还是也位于/resources文件夹中?

+0

是的,这些文件都在实际位置。 – 2010-09-15 21:32:57

+0

异常告诉它不是。当你删除这两个servlet时,它们是否可以通过相同的URL进行访问?如果还没有,那么使用的URL和/或实际的位置是错误的(或者你有''Filter'在'/ *'上进行监听,这是写得不好的,因此会干扰所有的事情)。 – BalusC 2010-09-15 21:40:30

0

您的web.xml看起来是正确的(除非我会更改您的<load-on-startup>常量)。 确保您的/resources存在,并且是项目路径中公开可见的文件夹,而不是位于/ WEB-INF文件夹下。

3

6.0.30之前的Tomcat默认servlet实际上服务于由HttpServletRequest.getPathInfo()标识的静态资源,因此当请求/resources/style.css时将返回/style.css

Tomcat的行为已从版本6.0.30起更改。所以这个问题的原始配置适用于更新版本的Tomcat。请参阅50026:在changelog中添加支持将默认servlet映射到非./((timw))之外的URL。

Jetty的默认servlet使用完整路径。

0

试着改变你的url-patternmyservlet/,并根据需要添加<mvc:default-servlet-handler />see here)到Spring配置。