struts 基本知识

1.Struts1和Struts2区别和联系
    本质上是不同的框架,...
    servetAPI 解耦  ActionContext
    ServletActionContext
   
2.Struts2 action
  2.1 可以使用POJO作为请求的处理Action对象;
  2.2 可以实现Action接口,但相比POJO只是提供编码的规范度;
  2.3 可以集成ActionSupport类,ActionSupport为action提供更多的Struts2请求处理的特性;
      此外,通过实现ServletRequestAware接口,可以让Struts2注入一个ServletRequest对象,使用到HttpServletRequest的特性;
  2.4 Struts2提供多种Action访问定位到方法的机制
       2.4.1 在Struts.xml配置Action中,使用 method="useReqLgn"指定请求到useReqLgn()方法;
       2.4.2 通过在页面请求的URL中,使用"!"连接请求的Action和具体的方法名:namespace/Action!MethodName.action;
       2.4.3 可以使用dmi的动态方法解析执行的方式,是在Struts.xml配置Action中使用*占位符,被替换的位置使用{*num},Struts.xml配置Action配置信息可以被jsp页面的url参数替换;
   2.5 在Action或Interceptor中对Struts2上下文(ActionContext)的使用,包括访问request、session等作用域的机制(封装成了Map集合)
  
3. Struts.xml配置文件package的基本参数:name、namespace、abstract、extends     的含义

4. struts的action中绑定页面值到属性的方法
   4.1 基本方式:属性同名表单自动绑定
   4.2 使用javaBean的模式转换
   4.2 使用struts2的模态转换器,实现ModelDriven<T>接口
  
5. struts拦截器
   5.1 基本工作原理:有中心控制器(Filter)StrutsPrepareAndExecuteFilter去根据配置调用拦截器处理请求;
   5.2 常见的系统拦截器,在struts-core-2.x.x.jar中struts-default.xml去查
   5.3 自定义拦截器:
        5.3.1 继承于AbstractInterceptor拦截器拦截整个action对象中的所以处理请求的方法
        5.3.2 继承于MethodFilterInterceptor的拦截器可以通过<param>参数excludeMethods/includeMethod指  定被过滤的方法名
   5.4  拦截器执行的顺序
   5.5  拦截器以及拦截器栈的配置与引用
   5.6  在拦截器处理方法中的(ActionInvocation arg0) ActionInvocation对象的使用
 
6. struts2 返回值类型
常用
  6.1.dispatcher
 --应用服务器跳转,forward到一个页面jsp、html、freemarker
 
   6.2.redirect
 --response.redirect
   6.3.chain
 --应用服务器跳转,forward到一个Action,如果是转发的别的包下,
   需要配置两个参数:
      <!-- 跨package的action链导航时,只需添加namespace和actionName两个参数 -->
            <param name="namespace">othrsp</param>
            <param name="actionName">stk04</param>
     struts2.1与struts2.2的区别:Action1--(过完所以拦截器后)-->Action2,
                      在2.2中Action1---->Action2--->(过完所以拦截器)
                        
   6.4.redirectAction
 --response.redirect到另一个Action

   6.5.stream类型
  --用于文件的下载:
    6.1.在struts.xml中配置的action  :type="stream"
      <result name="down" type="stream">
      6.1.2.  <!-- 处理流的方法:inputName代表处理流的方法的getter的名字 -->
          <param name="inputName">inptFile</param>    --inptFile对应的getter为--> InputStream getInptFile()
    6.2. 所以流的处理都在action的getInptFile()方法中写定
       return new FileInputStream(new File("C:/tmp/"+fname));
    6.3. 在action处理请求的方法中设置中文文件名:
       ServletActionContext.getResponse().setHeader("Content-Disposition", "attachment; filename="+new String(fname.getBytes("GBK"),"iso-8859-1"));
    6.4.在页面上正确传递请求下载的文件名到action的fname属性

  --上传文件
   --上传文件使用Struts2提供的拦截器
   6.1.页面上使用post提交表单,表单编码为多媒体:multipart/form-data,被上传的文件使用input-file类型
   6.2.在action 使用一个File或一个File[]封装表单的file类型;
     2.1 在action的处理请求的方法上使用输入、输出流处理文件
   6.3.写配置struts.xml
     6.3.1设置 <!-- 设置struts2上传总文件的大小50M,默认只有2M -->
          <constant name="struts.multipart.maxSize" value="52428800" />
     6.3.2在处理请求的Action上应用fileUpload拦截器(如果是多方法的Action,注意使用includeMethods参数指定需要拦截的方法),记住添加上默认的completeStack拦截器栈
      <!-- 配置负责上传的Struts2拦截器 ,只对upload方法拦截-->
         <interceptor-ref name="fileUpload">
                <param name="includeMethods">upload</param>
                <!-- 单个上传文件的大小为30M -->
                <param name="maximumSize">31457280</param>
         </interceptor-ref>
         <interceptor-ref name="completeStack"/>
     
 7--Struts_html-lable
   form的主题theme:
     simple:simple主题里的模板把UI标签翻译成最简单的Html对应元素,并忽视行标属性
     xhtml:默认,使用一个布局表提供了一种自动化的排版机制。
     css_xhtml:很像xhtml.使用css来进行排版和布局
     ajax:以xhtml为基础,增加了高级的Ajax功能.

 <s:checkboxlist/> 标签的使用:
      1.在页面上使用list="{... }"
     2.在页面上使用action的属性List<String>集合
     3.在页面上使用action的属性List<javaBean>集合,使用listkey,listValue属性
   
 <s:radio/>标签的使用:
     1.在页面上使用list="#{'k':'v',...}"键值对
     2.在页面上使用Action的Map属性里的键值对

  <s:select/>标签的使用
     1.在页面上使用list="#{'1':'v','2':'v',...}"键值对
     2.在页面上使用action的属性List<javaBean>集合
     3.在页面上使用action的静态Map<Integer, String>键值对,并使用
       <s:optgroup/>做缩进选项
      
      
 
   <s:doubleselect/>标签做级联下拉单
       注意   name和doubleName的区别以及
       list="{'中国', '美国', '法国'}" 和
       doubleList="top == '中国' ? {'北京', '上海', '广州'}:(top==''?{...}... : '默认值')的
       语法,在三元运算符中 第一个“:”后---->结束有"()";
 
 8. Struts2的验证器:
    8.1 重写ActionSuport的validate()方法
         可以this.addActionError(String errmsg)方法添加错误信息;当然错误信息可以this.getText("消息资源文件的key")去取国际化错误消息。
    8.2通过配置xwork的验证器直接使用现有的验证器
        1.创建一个与Action同名+"-validation.xml"验证配置文件;
        2.在验证配置文件中去调用com.opensymphony.xwork2.validator.validators的default.xml配置的验证器
        3.在配置验证器的时候,可以<message>${getText(消息资源文件的key)}</message>去取国际化错误消息。
    8.3显示错误信息可以使用 <s:actionerror>和< s:fielderror>标签
     
       可能性错误: struts2.2与struts2.1的区别:default.xml文档定义改成:1.0.2
   
   
   
 9.Token  防止表单重复提交
     9.1 需要在表单请求页面 <s:token/>标签
     9.2 在配置struts.xml中action时添加 <interceptor-ref name="token">拦截器
     9.3 在配置struts.xml中增加一个错误导航:<result name="invalid.token">....</result>
     9.4 可以修改token默认错误消息,在消息资源文件中添加struts.messages.invalid.token
    
 10.转换器
     10.1 可以直接使用Struts2提供的默认数值转换器以及日期转换器;
     10.2 也可以通过继承StrutsTypeConverter自定义验证器,重写String-Object/Object-String两个方法即可;
     10.3开发好转换器后需要配置使用:
         10.3.1  局部Action使用的转换器:【被使用的action名称】-conversion.properties
                    Action中属性名=转换器名称(包名+类名)
         10.3.2  全局转换器
                  在src[classpath]下创建xwork-conversion.properties中配置:
                  【实体对象名】 = 转换器名称
                  通过这样配置,当系统中的任意Action使用【实体对象名】申明属性时,就好默认调用该转换器。
                 
  11.国际化I18n
     I18n拦截器是默认拦截器栈中的拦截器。
        页面通过html类标签的key属性直接可以取得消息资源文件的值;
        纯文本信息可以使用<s:text name="key">取得消息资源文件的值;
        在action中可以使用ActionSuport的getText("key")取得消息资源文件的值;
        在struts配置文件中可以使用${getText(消息资源文件的key)}取得消息资源文件的值;
 
      Struts2中可以通过ActionContext.getContext().setLocale(Locale locale)设置浏览器的默认语言。
     
       可能性错误: struts2.2与struts2.1的区别:submit标签 的key不能使用"."命名
                  或: ognl.OgnlException: source is null for
                        getProperty(null, "point.exec.sbmt.key")的 解决办法 . 添加name="submit"
     
   12.Exception处理
     在struts2中出现的异常可以通过配置
         <exception-mapping result="error"
           exception="java.lang.ArithmeticException"></exception-mapping>
    来指定什么Exception有哪个result处理,result的值将有系统去匹配完成出错时的导航。
   通过这样的配置机制,我们在开发时可以同时抛出特定异常由不同的页面/action链完成错误处理。

   13.Action的配置
      可以使用org.apache.struts2.convention.annotation.*;下提供的annotation配置Action达到跟xml配置一样的效果;
      使用元数据方式时注意:com.yu.action包名要以action结尾!!!

 
 
 
 
                 
            
        
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值