Moh*_*dil 3 java jsp servlets requestdispatcher
我在这里遇到一个奇怪的问题,我真的被困住了,需要把这项工作搞得很糟糕.
所以我有一个页面说index.jsp,链接说"a href = servlet?id = 10".当我点击这个链接时,它将转到我的servlet上的doGet(),这是我的servlet中的代码.
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("id");
// search database and create an arraylist
if(//user logged in)
address = "s/results.jsp";
else
address = "results.jsp";
// set arraylist in session object
RequestDispatcher dispatcher = request.getRequestDispatcher(address);
dispatcher.forward(request,response);
}
Run Code Online (Sandbox Code Playgroud)
所以上面的代码工作正常,但在请求转发后,我的浏览器显示网址为
http:// localhost/project/servlet?id = 10.
我不想要上面的网址,因为我根据用户登录状态转发到两个不同的jsp,一个位于's'文件夹中,而另一个位于该文件夹之外.如果用户已登录,则我转发到's/results.jsp',如果用户未登录,我将转发到'results.jsp'.
在s/results.jsp的情况下,我通过在results.jsp中使用../来访问's'文件夹外部的图像和脚本等资源.
由于url没有更改为s/results.jsp,我无法使用'../'访问资源,因为我正在使用jsp分页,当我点击下一步时,url正在更改为s/results.jsp并且我可以使用../访问资源
我认为一个解决方案是复制s文件夹中的所有资源,但这会增加冗余.
在我的脑海中另一个解决方案是为两个jsp创建两个不同的servlet但我不知道在哪里放置servlet以便它可以使用../访问s文件夹之外的资源
是他们能做任务的其他好方法..
我试图找到有关这方面的信息,但一直无法弄清楚.
任何帮助将非常感谢.
您基本上已指示您的webbrowser向该URL发送请求.转发不会更改URL.它完全是服务器端.除了使用response.sendRedirect()- 它会丢弃当前请求(包括其所有属性)并在给定URL上创建全新请求之外,您还可以将链接更改为<a href="results?id=10">或在用户登录时更改<a href="s/results?id=10">.
<a href="${user.loggedin ? 's/' : ''}results?id=10">
Run Code Online (Sandbox Code Playgroud)
最后相应地更改servlet映射,以便在这些URL上调用它.
<url-pattern>/results</url-pattern>
<url-pattern>/s/results</url-pattern>
Run Code Online (Sandbox Code Playgroud)
你只会错过JSP扩展.但是调度程序使用的JSP /WEB-INF无论如何都属于文件夹,因此最终用户无法直接查看它们而无需先调用servlet.您最终还会获得更好的网址.
| 归档时间: |
|
| 查看次数: |
9364 次 |
| 最近记录: |