2009-09-28 117 views
3

我希望我的一个servlet(test2)处理“/”请求(即http://localhost/),而另一个servlet(test1)处理所有其他请求(“/ *”)。通配符请求的web.xml servlet映射

设置我的web.xml以下,但问题是,所有的请求去test1.jsp(甚至是“/”请求)

谁能告诉我如何做到这一点?

<servlet> 
    <servlet-name>test1</servlet-name> 
    <jsp-file>/test1.jsp</jsp-file> 
</servlet> 
<servlet-mapping> 
    <servlet-name>test1</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>test2</servlet-name> 
    <jsp-file>/test2.jsp</jsp-file> 
</servlet> 
<servlet-mapping> 
    <servlet-name>test2</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

----编辑-----

我意识到我的问题是有点不明确,不完整的。这里是正是我想要完成一个例子..

  1. http://mytestsite.com/ - >映射到http://mytestsite.com/index.html
  2. http://mytestsite.com/servlet1 - >运行com.mytestsite.servlet1
  3. http://mytestsite.com/ * - >映射到http://mytestsite.com/catchall.jsp(我想未在web.xml中映射的所有其他请求映射到catchall.jsp)

所以我的web.xml如下所示:

<servlet> 
    <servlet-name>servlet1</servlet-name> 
    <servlet-class>com.mytestsite.servlet1</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>servlet1</servlet-name> 
    <url-pattern>/servlet1</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>catchall</servlet-name> 
    <jsp-file>/catchall.jsp</jsp-file> 
</servlet> 
<servlet-mapping> 
    <servlet-name>catchall</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 

,所以我注意到一个奇怪的问题。当我请求http://mytestsite.com/时,它会在重定向到index.html之前转到catchall.jsp。然而,如此之快,我根本不会注意到它击中catchall.jsp(但我把在的System.out.println这个文件,它肯定是打它)。

回答

0

真的不确定,但可能您声明\映射您的servlet的顺序定义了优先顺序。尝试首先声明\ map test2并查看。

亲切的问候

0

尽量不要映射/请求任何东西(摆脱TEST2的servlet的),而是使用一个欢迎文件:

<welcome-file-list> 
    <welcome-file> 
    test2.jsp 
    </welcome-file> 
</welcome-file-list> 
1

,我认为你的目标是一个有点混乱,脆。但是,要回答您的问题,请尝试http://your-domain.com/请求的欢迎文件条目。

<welcome-file-list> 
    <welcome-file>/test2.jsp</welcome-file> 
</welcome-file-list> 

然后让test2.jsp执行重定向或转发到应用程序中的某个其他“控制器”是最常见的。这样你的MVC总是被解雇,即使在http://your-domain.com/请求。

如果您同意我的观点,那么您的欢迎文件应该是index.jsp(遵循常见约定)。 index.jsp中的代码然后是一个单线程重定向到一个'welcome'servlet。

+0

感谢您花时间看我遇到的问题。我编辑了我的问题上面。希望它清除了一切...... – jmoney 2009-09-28 16:06:48

1

使用转发过滤器而不是servlet。使用这种方法拦截“/”非常简单。

filter --> /* 

servlet1 --> /_some_hidden_path_1_ 
servlet2 --> /_some_hidden_path_2_