Jimoshi_Struts2 框架学习(二)--action生命周期、struts.xml中全局的配置、获取request和session和response值、IOC思想

Jimoshi成长经历:前面的笔记后面再慢慢整理-------方便自己

目录:action生命周期、result中关于name属性的配置和type属性、struts.xml中package中的全局的配置、如何在action中获取servlet-api中的request和session和response、IOC思想

Struts2 框架学习(二):

一、action生命周期

  对于每次httpservlet的请求,都会产生一个新的action 的实例

二、result中关于name属性的配置和type属性(struts.xml)

   1、name 属性:在struts2中有一些默认的比如success和error,input等,当然也可以自己对name属性进行自定义
       <result name="input">index.jsp</result>    可以返回到某一个页面上面
       <result name="input">student1</result>     也可以去请求一个路径
   2、type属性:默认的dipatcher
       redirect 重定向、chain链、redirectAction 重定向到一个action

三、struts.xml中package中的全局的配置
 
   代码示例:

   <!-- 全局配置 -->
   <global-results>  
        <result name="error">index.jsp</result>  
   </global-results>

四、如何在action中获取servlet-api中的request和session和response

  1、通过ServletActionContext获取内置对象

  代码示例:

  HttpServletRequest request = ServletActionContext.getRequest(); //直接获得 request 对象  
  HttpServletResponse response = ServletActionContext.getResponse();//直接获得response对象  
  HttpSession session = (HttpSession)ServletActionContext.getContext().getSession();//获取session 对象  
  Map application = ServletActionContext.getContext().getApplication();//获取application 对象  
  注:application这里返回的形式是map类型

  2、通过Actioncontext获取内置对象

  代码示例:

  ActionContext cxt = ActionContext.getContext();
  HttpServletRequest request = (HttpServletRequest)cxt.get(ServletActionContext.HTTP_REQUEST);  
  HttpServletResponse response = (HttpServletResponse)cxt.get(ServletActionContext.HTTP_RESPONSE);
  // (HttpSession)cxt.getSession();   
  HttpSession session = (HttpSession)cxt.get(ServletActionContext.SESSION);
  //(Application)cxt.getApplication();
  Map application = (Map)cxt.get(ServletActionContext.APPLICATION);  
   
  3、通过IOC方式获取内置对象


    3.1.当前的action实现SessionAware,ApplicationAware,ServletRequestAware,ServletResponseAware接口
 
    代码示例:

    public class LoginAction implements     

Action,SessionAware,ApplicationAware,ServletRequestAware,ServletResponseAware{
    private HttpServletRequest request;     //HttpServletRequest型变量request声明  
    private HttpServletResponse response;   //HttpServletResponse型变量response声明    
    private Map session;            //HttpSession型变量session声明  
    private Map application;        //Application型变量application声明  
        //测试action是否每次新生成的一个实例
        //public LoginAction() {
    //   TODO Auto-generated constructor stub
    //   System.out.println(this);
    //}
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub    
        return "error";
    }
    @Override
    public void setServletResponse(HttpServletResponse response) {
        // TODO Auto-generated method stub
        this.response = response;
    }
    @Override
    public void setServletRequest(HttpServletRequest request) {
        // TODO Auto-generated method stub
        this.request = request;
    }
    @Override
    public void setApplication(Map<String, Object> application) {
        // TODO Auto-generated method stub
        this.application =  application;
    }
    @Override
    public void setSession(Map<String, Object> session) {
        // TODO Auto-generated method stub
        this.session = session;
       }
        }

五、IOC思想

   1、IOC概念:控制反转(Inversion of Control,英文缩写为IoC)
   控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。

依赖注入应用比较广泛。

   2、IoC模式:看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML

文件中给出定义的,然后利用Java 的“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以

前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的

就是提高灵活性和可维护性。

  3、主要可以划分为三种类型:构造函数注入、属性注入和接口注入

六、拦截器(自定义拦截器,jar包struts-defalut.XML中可以看)

  1、在(com.zr.interceptor)创建一个类来实现Interceptor 接口(自定义拦截器)

  代码示例:

  public class MyInterceptor  implements  Interceptor{
    @Override
    public void destroy() {
        // TODO Auto-generated method stub        
    }
    @Override
    public void init() {
        // TODO Auto-generated method stub        
    }
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        // TODO Auto-generated method stub
        String result = invocation.invoke();
        System.out.println(result);
        return result;
    }
   }

  2、针对某一个action 进行拦截(注册拦截器)

  代码示例:

  <package  name="zr"  extends="struts-default">
        <interceptors>
        <interceptor name="test" class="com.zr.interceptor.MyInterceptor"/>
    </interceptors>
    <action name="abc"  class="com.zr.controller.ShowController"  method="showMsg">
        <result name="success">index.jsp</result>
        <interceptor-ref name="test"></interceptor-ref>
        <interceptor-ref name="defaultStack"></interceptor-ref>
    </action>
  </package>

  通过定义拦截器栈,对package下面的所有action都经过这个拦截器栈

  代码示例:

  注:在引入拦截器栈的时候,需要放在action上面
  <struts>
    <constant name="struts.configuration.xml.reload" value="true"/>
    <package name="zr"  extends="struts-default">
    <interceptors>
       <interceptor name="test" class="com.zr.interceptor.MyInterceptor"/>
       <interceptor name="test2" class="com.zr.interceptor.MyInterceptor2"/>
       <interceptor-stack name="mystack">
         <interceptor-ref name="test"></interceptor-ref>
         <interceptor-ref name="test2"></interceptor-ref>
             <interceptor-ref name="defaultStack"/>
       </interceptor-stack>
    </interceptors>
    <default-interceptor-ref name="mystack"></default-interceptor-ref>
      <action name="abc"  class="com.zr.controller.ShowController"  method="showMsg">
        <result name="success">index.jsp</result>
      </action>
     </package>
  </struts>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值