2012-08-03 100 views
1

我有一個簡單的用戶應用程序。我有一個MainController Servlet,負責應用程序中的一般交互。這個servlet將「監聽」url模式:/,/ index等(任何其他形式的索引)。我還有一個負責登錄的UserController Servlet,這個人從/CheckLogin url-pattern「偵聽」。Java EE Servlet重寫servlet路徑

我在一個jsp中的表單中,在網址/中,當我提交它時,它指向在/CheckLogin處的servlet。然後,UserController servlet處理它,並且無論登錄是好還是錯,它都會重定向到/(根據用戶是否登錄,MainController將負責確定要顯示的頁面)。

所有的工作完美無缺,除了第一次提交後,然後表單頁面有url /CheckLogin。我想刪除它並只顯示/(即使記錄或不)。我如何做到這一點(普通的Java EE,而不是Spring或任何其他框架)?

回答

2

我不知道如果這是你在找什麼,但如果你做一個向前代替重定向,客戶端瀏覽器上的網址將不被更新:RequestDispatcher#forward(javax.servlet.ServletRequest, javax.servlet.ServletResponse;可以在Forward vs Redirect找到解釋。

此外,將驗證作爲Filter而不是Servlet來實現可能是一個更好的主意;這樣,過濾器可以用來攔截任何你認爲需要保護的URL。

是否有您沒有使用Web框架的具體原因?一般來說,它們旨在爲您處理安全和路由問題。

+0

以及我想在學習更多的Java ee本身之前去一個框架。我目前正在提出請求。但是CheckLogin指出這個形式:S也是,你有很好的鏈接來學習更多關於過濾器的知識嗎? – 2012-08-03 20:11:11

+1

由於您不打算使用框架,請使用模式,它們會在進入框架之前給出一個很好的基礎:http://stackoverflow.com/questions/3541077/design-patterns-web-based-applications – davidmontoyago 2012-08-03 20:36:32

+1

有關過濾器的更多信息: http://docs.oracle.com/javaee/6/tutorial/doc/bnagb.html 這個SO問題談了一些關於使用過濾器進行身份驗證:http://stackoverflow.com/questions/4984984/authorization-using -filters-in-java-ee 那麼你是說你在轉發,但是「/ CheckLogin」URL仍然出現在瀏覽器中? – 2012-08-04 15:38:16