要实现一个网站,这个网站有很多目录,比如
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.   


    能不能直接通过 response/request直接转,
      

  2.   

    在每个页面做一个是否登陆校验,如果没有登陆就进入登陆页面,把源url记下。登陆成功在跳过去
      

  3.   

    用Struts2的拦截器啊。。写一个判断是否登陆的拦截器。。如果没有登陆,则跳到登陆页面。。
      

  4.   


    我也想这样,但是response怎么知道用户是从哪个原始页面登录来的呢
    还有就是,struts2 把所有的请求都拦截了,还有跳转的目标url也是在struts.xml里面定死了的,不知道该如何跳转
      

  5.   

    ...我在书上看到一个方法,也许可行。写出来给你参考一下
       就是记录下原始页面的URL,然后在struts.xml中配置成<result name="success">${URL}</result>
      

  6.   

    我也想这样,但是response怎么知道用户是从哪个原始页面登录来的呢 .................这个 request似乎可以得到上一个访问的页面地址的
      

  7.   

    在页面显示用户名称  如果未登录 则设置500(空指针)错误 跳转到登录页面  需在web.xml中配置
      

  8.   

    你的目的就是想登陆成功后,能把该用户的信息在另外一个页面显示??
    request.setAttribute("user",user);
    session.setAttribute("user",user);
    其中user是指,你要传到另一个页面的对象,
    到另一个页面是这样获取该对象的;
    request.getAttribute("user");
    session.getAttribute("user");
      

  9.   

    你可以在每个要登录的页面里加上一个隐藏表单域,传不同的值到Action里面  在Action里面通过传过来的值判断,就可以跳回到原来的页面啦
      

  10.   


    不是显示信息,而是要跳回到原来的页面去比如你从 http://mywebsite/a/b/c/d/index.jsp 登录, 登录的表单提交到一个 action, 这个 action 在执行之后还要回到 http://mywebsite/a/b/c/d/index.jsp 这个页面
    而你还有可能从 http://mywebsite/1/2/3/4/5/index.jsp 登录, 登录的表单同样是提交到这个 action, 这里执行之后回到 http://mywebsite/1/2/3/4/5/index.jsp 
    当然还可能会有很多个页面 index1.jsp, index2.jsp, test.jsp, face.jsp 我要求从哪里来就回到哪里去
      

  11.   


    这个办法我想到过了,但是 action 得到这个地址之后又能怎么样呢, struts2 里是通过执行方法返回的字符串跳转到已经在 struts.xml 中指定好的页面, 而不是由程序来 redirect 的 
    如果仅用 jsp 做的话, 这根本就不是问题
      

  12.   

    actionmapping类中 有个叫addforward(ActionForward forward)的方法 可在映射中动态添加actionforward 应该就是这个完成这个功能吧
      

  13.   

    登陆的Action里得到访问页面的路径,
    在return 到得到的页面就行了啊。不要用maping啊。
      

  14.   

    无语,用个AJAX  不就搞定了,何必那么麻烦!!!!!!!
      

  15.   


    这是 struts 1 的吧
    我说的是 struts2 
      

  16.   


    怎么返回啊?
    action 里执行的方法都是返回字符串,然后根据配置文件里的东西返回的,怎么不用 mapping 了呢
      

  17.   

    String ref = request.getHeader("REFERER");
    response.sendRedirect(ref);
      

  18.   

    我建议把几个页面组装到一个新的JSP里面,那样刷新之后只有登录的那一部分jsp实现跳转,不会影响其他页面。
      

  19.   

    你就不会根据隐藏表单域里定义好的页面名称,在action执行方法里做下逻辑判断吗?
    在strut.xml中多定义几个
    <result name="input1">/...</result>
    ,只是验证时有点麻烦.但通过,使用隐藏表单域,隐藏表单域的值定义为页面的值,配合
    <result name="input">${hiddername}</result>能够找到返回请求的页面.经过测试是可行的.