0

大家好,非常感谢您的帮助,并原谅我生疏的英语:)。我正在尝试使用 spring 3.x、spring-security 和 .jsp 页面创建一个 mvc 网站,我可以在这里粘贴很多代码,但我认为这将是无用的,因为它是关于如何 URI 的一种逻辑问题控制器的动作和 uri 的工作原理:

1)Jsp页面:登录:对所有客人可用,并为具有“home”或
homeUser操作的管理员返回homeAdmin:对于具有操作homeAdmin的用户
:提供一个菜单,其中包含与“admin/action”映射的不同操作
HomeUser:提供一个菜单使用“用户/操作”映射的不同操作
UserLIst:在表格中列出每个用户及其信息的页面

2)Controller : 来宾控制器:没有类控制器,只有两种方法。首先用于映射 value={ "/, home"},后者用于 "login"。因此,尝试执行请求的每个人都将被重定向到登录页面,以便能够登录

@Controller
   public class LoginController {

   @RequestMapping(value={"/home","/"}
   (code)//if admin homeAdmin else homeUser
   return new ModelAndView("home");

   @RequestMapping(value="/login", method = RequestMethod.GET)
   (code)
   return new ModelAndView("login");
....

有一个类的请求映射,其值为“/admin/”,用于映射 Uri-action 的第一部分;对于指定的操作,请求映射有不同的方法,如列表用户。管理员控制器

@controller
@RequestMapping("/admin")
public class AdminController {

@RequestMapping(value={"/list", "/adminFilm"})
(code)
return new ModelAndView("adminFilm");
...

现在我以管理员身份登录,我的 URL 变成
"localhost:8080/name_project/homeAdmin.jsp"
了对应于 URL 的 URI
"/webapp/metainf/views/homeAdmin.jsp"
(由 InternalResuorceViewResolver 方法生成到其 xml 页面中)。
按下按钮“列出用户”我执行一个操作 =“admin/list”,现在我的 URI 是
"localhost:8080/name_project/admin/listUser.jsp"
此时我的任何操作都不需要生成“admin/”,因为它已经在路径中但是如果尝试注销(j_springsecurity_Logout) 我在顶部的 URL 变成了 from ,
"localhost:8080/name_project/admin/listUser"所以我(自然地)得到一个找不到映射的错误。

"localhost:8080/name_project/admin/j_spring_Logout"

主页请求出现同样的问题,因为它是由 LoginController 而不是在 AdminController 中映射的,所以当我从任何具有路径“/admin/home”的页面请求它时,找不到并且无法在 loginController 中调用控制器。我可以解决它强制jsp页面的路径,但它的编程很糟糕(并且会产生错误)。我该如何解决这个路径问题?

如果问题无法理解,我会尝试重新编写它。

谢谢。

4

1 回答 1

0

据我了解,浏览器地址栏中的当前 URL 是localhost:8080/name_project/admin/listUser. 现在您单击具有 URL 的链接(或按钮,无关紧要)j_springsecurity_Logout。这是对于当前路径的,因此您会得到预期的行为:解析的 URL 是localhost:8080/name_project/admin/j_spring_Logout.

您需要的是相对于应用程序路径的链接 URL。这<c:url />就是为了。所以,如果是链接,而不是

<a href="j_spring_Logout">

你写

<a href="<c:url value="j_spring_Logout" />">
于 2013-07-02T18:17:19.693 回答