struts2入门笔记

1. Struts2所需要的基础jar文件
   struts2-core-xxx.jar(xxx代表的是版本)
   xwork-core-xxx.jar
   ognl-xxx.jar
   freemarker-xxx.jar
   javassist-xxx.GA.jar
   commons-fileupload-xxx.jar
   commons-io-xxx.jar
   commons-lang-xxx.jar

   Action类的属性应和jsp页面的name属性保持一致,在Struts2中,可以直接使用Action类的属性来接收用户的输入,当表单提交时,
     Struts2自动对请求参数进行转换,并对具有相同名字的Action属性进行赋值(通过setter方法)。

   通常在开发过程中,我们用实体对象来保存信息,在Action中也可以使用JavaBean来接收用户输入,在Action类里声明JavaBean对象
   并封装,jsp页面的表单的name属性的值写  JavaBean对象.属性 就可以了,比如Action类中有一个user对象的属性,在jsp页面的表
   单里的那么name属性写成 <input   name="user.name" /> 即可
   
 

  Action中也可以使用复杂属性,如数组,类,集合对象等。

 实现Action的方式:
    1.  实现com.opensymphony.xwork2.Action接口,同时要实现这个接口中的execute()方法。所有用于处理请求的方法必须返回
         一个字符串类型的逻辑结果。


 Action接口中定义的五个字符串类型的静态常量:
    常量           值                       逻辑含义
    SUCCESS     "succes"             表示程序处理正常,并返回给用户成功后的结果
    NONE    "none"             表示处理正常结束,但不返回给用户任何显示
    ERROR    "error"             表示处理结果失败
    INPUT       "input"                 表示需要更多用户输入才能顺利执行
    LOGIN       "login"             表示需要用户正确登录后才能顺利执行


struts2应用的执行流程:
(1)  浏览器发出请求到服务器
(2)  服务器接收请求,根据web.xml的配置,将请求发送给指定的Struts2过滤器
(3)  过滤器根据struts.xml的配置内容,将请求发送给对应的Action类的对象,并调用默认的execute()方法
(4)  根据execute的返回结果,在struts.xml文件中匹配处理结果,进行页面跳转
(5)  页面根据上下文的内容,借助ognl表达式和Struts2标签将内容显示在页面中

Struts2访问Servlet API 对象
  一.与Servlet API解耦的访问方式
     ①使用ActionContext类获取Servlet API 对象对应的Map
        ActionContext是Action执行的上下文,在ActionContext中保存了Action类对象执行所需要的一组对象。

        public Object get(Object key)  :  通过此方法获取HttpServletRequest,HttpSession,ServletContext对应的Map对象

         示例:
              ActionContext ac=ActionContext.getContext();//得到上下文
              Map request=(Map)ac.get("request");//得到HttpServletRequest对象对应的Map对象

        public Map getSession()  :  获取对应HttpSession对象的Map对象
         示例:
              ActionContext ac=ActionContext.getContext();//得到上下文
              Map session=ac.getSession();

        public Map getApplication()  :   获取对应ServletContext对象的Map对象
         示例:
              ActionContext ac=ActionContext.getContext();//得到上下文
              Map application=ac.getApplication();

        
          
     ②Struts2向Action注入Servlet API对象对应的Map对象
       可以借助实现特定接口来直接获取Sevlet API对象,即采用注入的方式实现
       Struts2提供了以下接口:
        org.apache.struts2.interceptor.RequestAware   :  向Action实例中注入HttpServletRequest对象对应的Map对象,
                                  这个接口只有一个方法  :  public void setRequest(Map<String,Object>request);


       org.apache.struts2.interceptor.SessionAware    :  向Action实例中注入HttpSession对象对应的Map对象,
                                  这个接口只有一个方法  :  public void setSession(Map<String,Object>session);


       org.apache.struts2.interceptor.ApplicationAware    :  向Action实例中注入servletContext对象对应的Map对象,
                                  这个接口只有一个方法  :  public void setSession(Map<String,Object>application);

      使用Action直接访问Servlet API这种方式相对于使用ActionContext访问Servlet API这种方式更有利于单元测试。因为ActionContext需要
       借助框架进行初始化,Action可以直接设置测试数据,更加方便。


  二. 与Servlet API耦合的访问方式
       直接获取Servlet API对象可以使用org.apache.struts2.ServletActionContext类,该类是ActionContext类的子类。在这个类中定义了以下
    的方法来获取Servlet API对象:
            public static HttpServletRequest getRequest();         //得到HttpServletRequest对象
            public static ServletContext  getServletContext();   //得到ServletContext对象
        public static HttpServletResponse  getReponse();    //得到HttpServletReponse对象

   注意:  ServletContext类并没有定义获得HttpSession对象的方法,HttpSession对象可以通过HttpServletRequest对象来得到。


   除了使用ServletActionContext来直接获取Servlet API对象,Action类还可以实现特定的接口,由Struts2框架向Action实例注入
     Servlet API对象。
       org.apache.struts2.util.ServletContextAware接口——  :向Action实例中注入ServletContext对象,这个接口中只有一个方法:
                  public void setServletContext(ServletContext context);

       
       org.apache.struts2.util.ServletRequestAware接口——  :向Action实例中注入HttpServletRequest对象,这个接口中只有一个方法:
                  public void setServletRequest(HttpServletRequest request);


       org.apache.struts2.util.ServletResponseAware接口——  :向Action实例中注入HttpServletResponse对象,这个接口中只有一个方法:
                  public void setServletResponse(HttpServletResponse response);

    Struts2数据校验
      让Action类继承ActionSupport类,重写execute()方法,并重写validate()方法,在此方法中调用addFieldError()方法添加校验信息。校验通过则会继续往后面执行
   校验不通过,则会在后台返回一个input的字符串。
        如示例:
             @Override
             public void validate(){
                 if(this.getUser().getUsername()==null || this.getUser().getUsername().length()==0){
                     addFieldError("name", "用户名不能为空");
                   }
                 if (this.getUser().getPassword()==null||this.getUser().getPassword().length()==0) {
                        addFieldError("pwd", "密码不能为空");
             
              }
               }

    注意; 要在struts.xml文件中配置一个input字符串的返回结果,否则会报错。
         如:   <action name="login" class="cn.ssh.ch08.LoginAction">
                 <!-- 结果为"input"时,跳转至login.jsp页面-->
                  <result name="input">/login.jsp</result>
              </action>

      Struts2标签:分为UI标签,通用标签。使用前要导入标签库
             <%@taglib prefix="s" uri="/struts-tags" %>
    
  常用表单标签 :
           <s:form>....</s:form>          获取相应form的值 
               <s:textfield>..</textfield/>   文本输入框
           <s:password>...</s:password>    密码输入框
               <s:textarea>...</s:textarea>    文本域输入框
               <s:radio>...</s:radio>          单选按钮
               <s:checkbox>...><s:checkbox/>    复选框
               <s:submit>...</s:submit>         提交按钮
               <s:reset>...</s:reset>           重置按钮
               <s:hidden>...</s:hidden>         隐藏域标签 
      

    在jsp页面可以通过<s:fielderror>标签来输出校验信息。
        <s:fielderror> :                        输出所有的校验信息。
        <s:fielderror fieldName="pwd"/> :    输出add addFieldError()方法key为pwd的属性在校验信息。


   通用标签
       条件标签 :<s:if>...</s:if>
                 <s:elseif>...</s:elseif>
                 <s:else>...</s:else>


   这三个标签只有<s:if>可以单独使用,三个标签可以组合在一起使用,但是<s:elseif>和<s:else>不能单独使用。<s:if>标签可以和
   多个<s:elseif>标签结合使用,但是只能与一个<s:else>标签组合在一起。


  iterator迭代标签
     语法如下:
      <s:iterator value="集合对象" status="stutus" id="name">
           读取集合对象并输出显示 
     </s:iterator>

    vlaue属性: 表示需要进行遍历的集合对象
    status属性: 当前迭代元素,用这个属性可以来判断当前后迭代元素的属性。如元素的索引
    id属性:  表示当前迭代元素的id,使用这个id可以直接访问到当前的迭代元素。

     
      

    

       

       


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值