【问题标题】:MVC Spring 3.x controller mapping and action URI (/tag1/tag1/../tag1/action)MVC Spring 3.x 控制器映射和操作 URI (/tag1/tag1/../tag1/action)
【发布时间】:2013-07-02 15:03:21
【问题描述】:

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

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

2) 控制器: 来宾控制器:没有类控制器,只有两种方法。首先用于映射 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/”的类的requestmapping,用于映射Uri-action的第一部分;并且对于特定的action,有不同的方法与请求映射,比如list User。 管理员控制器

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

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

现在我以管理员身份登录,我的 URL 变为
"localhost:8080/name_project/homeAdmin.jsp"
这是对应于 URL
"/webapp/metainf/views/homeAdmin.jsp"
的 URI(由 InternalResuorceViewResolver 方法生成到其 xml 页面中)。
按下“列出用户”按钮,我执行了一个操作 =“admin/list”,现在我的 URI 是
"localhost:8080/name_project/admin/listUser.jsp"
此时我的任何操作都不需要生成“admin/”,因为它已经在路径中,但是如果尝试注销 (j_springsecurity_Logout),我在顶部的 URL 将从
"localhost:8080/name_project/admin/listUser",
变为 "localhost:8080/name_project/admin/j_spring_Logout"
所以我(自然)得到一个找不到映射的错误。
主页请求出现同样的问题,因为它是由 LoginController 而不是在 AdminController 中映射的,所以当我从任何页面请求它时路径为“/admin/home”的,找不到,也无法在 loginController 中调用控制器。 我可以解决它强制jsp页面的路径,但它的编程很糟糕(并且会产生错误)。我该如何解决这个路径问题?

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

谢谢。

【问题讨论】:

    标签: spring-mvc controller spring-security hibernate-mapping spring-3


    【解决方案1】:

    据我了解,浏览器地址栏中的当前 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" />">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-28
      • 2021-06-07
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      • 2020-01-16
      相关资源
      最近更新 更多