大家好,非常感谢帮助和原谅我生锈的英语:)。 我试图创建一个带有spring 3.x,spring-security和.jsp页面的mvc网站,我可以在这里粘贴很多代码,但我认为它将是无用的,因为它是一种关于如何URI的逻辑问题动作和控制器的工作原理:
1)Jsp页面:
登录:对所有客人都可以使用并返回homeAdmin给管理员带动作“home”或
homeUser:对于有动作的用户
homeAdmin:提供一个菜单,其中包含与“admin / action”映射的不同操作
HomeUser:提供一个菜单,其中包含与“user / action”映射的不同操作
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 /”的类的请求映射,用于映射Uri-action的第一部分;并且对于特定操作(如列表User),请求映射有不同的方法。 AdminController
@controller
@RequestMapping("/admin")
public class AdminController {
@RequestMapping(value={"/list", "/adminFilm"})
(code)
return new ModelAndView("adminFilm");
...
现在我以管理员身份登录,我的网址变为
"localhost:8080/name_project/homeAdmin.jsp"
,这是与网址"/webapp/metainf/views/homeAdmin.jsp"
对应的URI(由方法InternalResuorceViewResolver生成)进入其xml页面。)
按“列出用户”按钮我执行操作=“admin / list”,现在我的URI为"localhost:8080/name_project/admin/listUser.jsp"
此时我的任何操作都不需要生成“admin /”,因为在路径中是alredy但是如果尝试注销(j_springsecurity_Logout)我的URL在顶部成为来自"localhost:8080/name_project/admin/listUser"
,
到"localhost:8080/name_project/admin/j_spring_Logout"
所以我(自然地)得到了一个未找到映射的错误。
同样的问题出现在主页请求中,因为它是由LoginController而不是AdminController映射的,所以当我从任何有路径“/ admin / home”的页面请求它时,找不到它,并且无法在loginController中调用控制器。
我可以解决它强制jsp页面的路径,但它编程错误(并产生错误)。我怎样才能解决这个路径问题?
如果问题无法理解,我会尝试重新编写。
感谢。
答案 0 :(得分:0)
据我了解,浏览器地址栏中的当前网址为localhost:8080/name_project/admin/listUser
。现在,您单击具有URL j_springsecurity_Logout
的链接(或按钮,无关紧要)。这是相对到当前路径,因此您获得了预期的行为:已解析的网址为localhost:8080/name_project/admin/j_spring_Logout
。
您需要的是链接的URL相对于应用程序路径。这就是<c:url />
的用途。因此,如果是链接,而不是
<a href="j_spring_Logout">
你写了
<a href="<c:url value="j_spring_Logout" />">