解决方案 »

  1.   


    public void setSession(Map<String, Object> session) {
                    this.session=session;
             
        }你看看这个方法叫什么名字,叫做setSession对不对,其实你说的没有错,即使它是放在request域里面,但是也掩盖不了它是session的事实如果你还不懂,那么我也实现接口,然后复写其中的一个方法你就肯定知道了
    public class LoginAction4 extends ActionSupport implements ServletRequestAware {
     
     private HttpServletRequest request;
     private HttpSession session;
     private ServletContext application;
     
     public String execute() {
      request.setAttribute("r1", "r1");
      session.setAttribute("s1", "s1");
      application.setAttribute("a1", "a1");
      return SUCCESS;
     }
     @Override
     public void setServletRequest(HttpServletRequest request) {
     this.request = request;
      this.session = request.getSession()]//session就是存在request中的
      this.application = session.getServletContext();//同理ServletContext中在session中也存在
     }
     
    }HttpServletRequest,HttpSession,HttpServletContext等存储数据的原理都是内部维护了一个Map集合,调用setAttribute方法的时候,实际上是往map集合里面添加数据(可查看jsp),这里得到相应的Map之后往里面添加数据,Struts会自动帮你将map集合中的数据拷贝到相应的域中的map集合中去,前台同样可以使用jsp的表达式获取数据
      

  2.   

    大哥,那就是说request里面存储了session, 而session里又存储了application?