我希望我的一个servlet(test2)处理“/”请求(即http://localhost/),而另一个servlet(test1)处理所有其他请求(“/ *”)。
我在下面设置了我的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>
---- ----- EDIT
我意识到我的问题有点不清楚且不完整。这是我想要完成的一个例子..
所以我的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 :(得分:1)
我认为你的目标有点令人困惑和脆弱。但是,要回答您的问题,请尝试http://your-domain.com/请求的欢迎文件条目。
<welcome-file-list>
<welcome-file>/test2.jsp</welcome-file>
</welcome-file-list>
最常见的是test2.jsp执行重定向或转发到应用程序中的其他“控制器”。这样,即使在http://your-domain.com/请求中,您的MVC也会被解雇。
如果您同意我的意见,那么您的欢迎文件应该是index.jsp(遵循常见约定)。 index.jsp中的代码然后是一个单行重定向到'welcome'servlet。
答案 1 :(得分:1)
使用转发过滤器而不是servlet。使用这种方法拦截“/”非常简单。
filter --> /*
servlet1 --> /_some_hidden_path_1_
servlet2 --> /_some_hidden_path_2_
答案 2 :(得分:0)
真的不确定,但也许你声明\ map你的servlet的顺序定义了优先级。首先尝试声明\ map test2并查看。
亲切的问候
答案 3 :(得分:0)
尝试不将/ request映射到任何东西(摆脱test2 servlet),而是使用欢迎文件:
<welcome-file-list>
<welcome-file>
test2.jsp
</welcome-file>
</welcome-file-list>