2012-08-03 86 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