struts2流程

阅读更多

  1、用户发送请求,在web.xml配置文件,servlet容器的主要任务是管理servlet的生命周期


        struts2
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
   

   
        struts2
        /*
   

通过请求的url到核心过滤器

2、请求经过核心过滤器FilterDispatcher,执行doFilter方法,在该方法中,询问ActionMapper(/*
指定的用户请求,Filter过滤用户请求,struts2的每一次请求都会创建Action,是线程安全的)来决定这个请求是否需要调用某个Action;

 

3、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
4 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
5 ActionProxy创建一个ActionInvocation的实例

6、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

代码:自定义拦截器

public String intercept(ActionInvocation arg0) throws Exception {
  Map session=arg0.getInvocationContext().getSession();
  String user=(String) session.get("user");
  System.out.println("11-------------------"+user);
  if(user!=null&&user.equals("lzw")){
   System.out.println("222-------------------"+user);

       return arg0.invoke(); 
  }else{
   
   System.out.println("333-------------------"+user);

    return Action.INPUT;
   
  }
 }

7、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

 

 

二、

如何得到内置对象

ActionContext

struts2把jsp的内置对象放到了actionContext里面,程序员通过存入键值对,就在对象里面加了值

public  class HelloWorldAction{

     public String execute(){

    ActionContext ctx=ActionContext.getContext();

     ctx.getApplication().put("application","应用范围");

     ctx.getSession().put("ses","session范围");

    ctx.put("req","request范围");

return “success”;

     }

}

在对应的jsp页面里

 

${applicationScope.app}

${sessionScope.ses}

${requestScope.req}

 

在容器tomcat里运行后打印出 后面的值。

 

还有一种方法,得到对象进行操作,有个集合

public String rsa() throws exception{

HttpServletRequest request=ServletActionContext.getRequest();

ServletContext servletContext=ServletActionContext.getServletContext();

servletContext.setAttribute("app","应用范围属性");

request.setAttribute("names",Arrays.asList("aa","bb","cc"));

request.getSession().setAttribute("ses","会话范围属性");

return“success”;

 

 

}

 

body里面struts2标签

$name{}

输出aa

       bb

       cc

你可能感兴趣的:(struts2,struts2得到对象,集合,数组)