要实现一个网站,这个网站有很多目录,比如 
http://myweb/index.jsp 
http://myweb/a/default.jsp 
http://myweb/b/c/d.jsp 
...... 等等 要求用户可以随时在这些页面中进行登录(如果已经登录,则用于登录的那一块显示欢迎信息) 我的想法是,在根目录中添加一个 user-login.jsp,然后在 index.jsp、default.jsp、d.jsp 等页面使用 <jsp:include page="user-login.jsp" />引用进来,这也是 jsp 一向的做法 
但是,在struts2中,user-login.jsp 提交到 Action 后,它的 result 是在配置文件中事先定义好的,这样Action中就不知道如何处理当用户从不同页面登录后如何回到它访问的页面的问题了。 
比如说 
struts.xml: 
<action name="login" class="......"> 
  <result name="input">/user-login.jsp </result> 
  <result name="success">/loginOK.jsp </result> 
</action> 用户分别在 
http://myweb/a/default.jsp 
http://myweb/b/c/d/e/f/g/h/news.jsp 
等页面以正确的用户名和密码登录后,应该再回到他们当初登录时的页面,而不是/user-login.jsp 或 loginOK.jsp 等固定的页面。
这应该如何实现?简而言之,就是希望从哪里登录来的,操作之后就回到哪里去

解决方案 »

  1.   

    把源url作为参数穿过去,然后登录完<result name="success">${forwardurl}</result>
      

  2.   

    直接通过request.getRequestDispatcher(page)转发
      

  3.   

    目前很多网站都是这么做的,如果要访问一个受限页面,假定URL为 /restricted/page.jsp,
    会转向登录页面,用户登录后,再返回用户刚才请求的页面。实际上CSDN就是这么做的。具体做法,不太赞同楼主的想法。目前权限控制用的较多的是用filter做拦截,如果发现用户还没有登录就尝试访问页面,则记下改用户访问的URL,
    然后重定向给登录界面,且把用户刚才访问的URL传过去,
    用户登录成功后,在struts2的登录action里,可以还是返回一个固定的串,入:SUCCESS,但必须把用户的URL参数用setAttribute设置到request中,
    request.setAttribute("URLS",用户刚才访问的URL地址);。然后,因为在struts2的strust-config.xml中,允许使用EL表达式来引用request变量,所以,
    可以直接动态重定位到用户刚才访问的URL。具体写法我也背不下来。
      

  4.   


    在Struts2的官方文档里就有类似的例子,
    学东西最好还是从人家官方文档里系统学习,
    否则光从网上看例子学怎么用,不解决根本问题。
      

  5.   


    照1楼说的做了,但是重定向的 url 不对啊Action 中设置了 request.setAttribute("destUrl", "http://localhost/myweb/test.jsp");
    struts.xml 中
    <result name="success">${destUrl}</result>但是无论上面的destUrl设置成什么值, 都自动的跳到首页
      

  6.   

    ${destUrl}中destUrl实质取的是action中的字段destUrl的getDestrUrl.
      

  7.   

    <global-results>
    <result name="Login">/index.jsp</result>
    </global-results>
    配一个包下全句的只要在这包下的你返回Login他就回到index.jsp下