Cod*_*ein 5 java jsp servlets url-mapping
我有一个名为User.java
. 它映射到 url 模式
<servlet-mapping>
<servlet-name>User</servlet-name>
<url-pattern>/user/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
在 Servlet 内部,user/
分析斜杠后面的路径,从数据库中检索有关该用户的数据,设置属性,然后user_home.jsp
显示页面。实现这一点的代码是:
User user = UserManager.getUserInfoById(userPath);
request.getSession().setAttribute("user", user);
request.getRequestDispatcher("resources/jsp/user_home.jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)
问题是,user_home.jsp
请求并没有打开 this ,而是再次映射到同一个 servlet User.java
。它什么都不做。
我把输出语句放在doGet
方法的开头,所以我可以看到 URL 是
http://localhost:8080/myproj/user/resources/jsp/user_home.jsp
Run Code Online (Sandbox Code Playgroud)
所以似乎明显的问题是它正在映射回user/*
模式。
如何让 Servlet 在不通过 URL 映射的情况下显示此页面,并正确显示jsp
我需要的内容?
如果传递给的路径request.getRequestDispatcher()
不以“ /
”开头,则将其解释为相对于当前路径。由于您的 servlet 的路径是/user/<something>
,它会尝试将请求转发到/user/resources/jsp/user_home.jsp
,这与您的 servlet 映射匹配,因此递归地转发到同一个 servlet。
另一方面,如果传递给的路径request.getRequestDispatcher()
以“ /
”开头,则它被解释为相对于当前上下文根。因此,假设该resources
目录位于 web 应用程序的根目录,请尝试/
在路径开头添加“”,例如:
request.getRequestDispatcher("/resources/jsp/user_home.jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1829 次 |
最近记录: |