寒莎

导航

struts2系统知识

                                     Struts2
                         第一篇:Struts2入门
1。概念:Struts2是一个雅致的,可扩展的,用来建立企业级java web 应用程序的框架
2. struts2应用的平台要求:
  *   java 5
  *  servlet API 2.4
  *  JSP API 2.0
3.struts2必备的架包:
  struts2框架的核心类库:struts2-core-2.x.x.jar
  xwork类库:xwork-2.x.x.jar
  ognl-2.x.x.jar:对象图导航语言,Struts2框架使用的一种表达式语言
  freemarker-2.xx.jar:struts2的ui标签的模板使用freemarker编写
  commons-logging-1.1.x.jar:asf出品的日志包
  commons-fileupload.jar和common-io.jar:文件上传包
4。struts2的环境配置:
    4.0 添加struts2必须的架包
    4.1 在web.xml中配置启动struts2框架的过滤器
        此Filter的init()方法中会读取classpath下的struts.xml(默认配置文件)完成初始化操作。
        struts2默认只处理后缀为.action的请求
    4.2 提供struts2核心配置文件struts.xml到classpath下,主要用来配置action映射,result映射,拦截器,常量等
    4.3 修改struts2的配置文件
         创建action类
    4.4 创建jsp页面

            第二篇:Struts2的Action类配置和使用
1。概念: Action类用来封装客户提交的请求数据,调用业务逻辑类处理请求并返回一个string类型的结果码
2。对action类的要求:继承ActionSupport
                        ActionSupport类实现的接口
                        Validateable接口:提供了一个validate()方法用于校验表单数据。
                        ValidationAware接口:提供了一些消息处理的方法。
                        LocaleProvider接口:提供一个getLocale()方法获取语言/地区信息。
                        TextProvider接口:提供一系列的getText()方法来获取国际化信息资源。
3。 概念:Struts2框架是通过拦截器来提取请求参数数据,并将数据封装到相应的action实例中
     3.1 action中的两种传递方式:
         值传递Field-driven:直接在Action中定义各种Java基本类型(String,Date类型的属性),这些属性名和页面表单输入域的名字一一对应
         模型驱动传递Model-driven:通过领域模型javaBean来进行数据传递,把页面表单的数据直接封装到这个javaBean中
     3.2 一个action多个请求处理方法:    
         a.每个请求配置一个action
    <action name="user_login" class="" method="login">
         b。使用通配符针对同一类型的请求配置一个action
     用*来匹配0到多个字符
     <action name="user_*" class=".action" method={1}>
   c.动态方法调用
     3.3 action 与jsp 之间的动态调用方法:
         jsp传递数据到action中:jsp页面中的参数数据经过拦截器时,会自动封装到action中相应名称的属性中
  Action传递数据到jsp页面中:ActionContext类提供了几个常用的方法获取三个Map对象,这三个Map对象分别用来替代HttpServletRequest.HttpSession.ServletContext.相当于操作三个Servlet对象
     3.4 Action类访问Servlet ApI:Struts2中提供了ServletActionContext用来访问Servelt API
     4.result的配置:
       4.1  一些概念性知识点的使用:a.com.opensymphony.xwork2.Result接口代表Action执行后的结果,每一个action都返回一个String类型的结果码,用于从配置 文件struts2中配置的result元素列表中选择对应的result
                               b.Struts2提供了多种Result类型的实现:
             ServletDispatcherResult:servlet转发,默认使用
      ServletRedirectResult:servlet重定向
      ServletActionRedirectResult:重定向到另一个action中
                   FreemarkerResult:用FreeMarker模板引擎呈现视图
        4.2 Strut2通过《result>标记来配置逻辑视图名和物理视图资源之间的映射关系
          a.  <result>的常用属性:name:指定result的逻辑名,不指定时,默认为success
                              type:指定result的类型,默认是请求分派器
          redirect(重定向),
          redirectAction(重定向到另一个action)
          freemarker(使用freemarker呈现视图)
           b.
    局部result和全局result;
             <result />作为<action....>元素的子元素配置,只对当前action有效
           全局result
          <result..../>作为<global-rsults....>元素的子元素配置,对当前package内的所有Action有效
          代码提示:
          <package>
           <!--全局变量-->
          <global-results>
          <result name="index>/index.jsp</result>
          <global-results>
          <!--局部变量-->
          <action name="user_*" class="com.entity.userAction">
          <result name="success">success.jsp</result>
          </action>
          </package>
     c。在result中配置参数;
      <result name="toUpdate">/user/login?password=${password}</result>
     d.从一个action跳转到另一个action;
       d1:在同一个包下面:<result type="redirectAction">user_add.action</result>
       d2:不在同一个包下面:<result type="redirectAction">
                             <param name="actionName">user_add.action</param>
        <param name="namespace">/user</param>
        <param name="id">${id}</param> <!--传递参数-->   <!--记得此参数必须在action里面有get,set方法-->
       </result>
5。异常的处理:
   struts2通过拦截器(ExceptionMappingInterceptor)对action中抛出的异常进行捕获,拦截器在捕获到异常后,会将exception和exceptionStatck两个对象保存到值栈中
6。为应用指定多个配置文件:(团队开发时很有用处)
   struts2中可以将一个配置文件分解成多个配置文件,那么必须在struts。xml中包含其他配置文件
   <struts>
   <include file="struts_user.xml"></include>
   <include file="struts_book.xml"></include>
   </struts>
 7.基于注解的action配置(没用过)
   7.1使用注解要在classpath中添加如下插件包:struts2-convention-plugin-2.1.8.1.jar
   7.2常用注解:
      Namespace:指定命名空间。
      ParentPackage:指定父包。
      Result:提供了Action结果的映射。
      Results:“Result”注解列表
      ResultPath:指定结果页面的基路径。
      Action:指定Action的访问URL。
      Actions:“Action”注解列表。
      ExceptionMapping:指定异常映射。
      ExceptionMappings:
      InterceptorRef:拦截器引用。
      InterceptorRefs:
    7.3注解例子:
       @Namespace("/account")
       @ParentPackage("struts-default")
       @Results({
       @Result(name="success",location="/success.jsp"),
       @Result(name="error",location="/error.jsp")})
       public class LoginAction extends ActionSupport {
       @Action("login")
       public String login() throws Exception{
          if("test".equals(loginname)){
              return SUCCESS;
           }else{
               return ERROR;
           }
       }
                       第三篇 OGNL和标签库

1。Struts2中的OGNL:首先要映入标签:<%@taglib uri="/struts-tags" prefix="s"%>
    a.概念:是一种功能强大的表达式语言,通过一种语法,遍历整个对象的结构图,实现对象属性类型的转换等功能
    b. 使用方式:ongl上下文实际上就是一个map对象,由ognl.OgnlContext类表示,里面存放很多个JavaBean对象,它有一个上下文根对象
                  struts2的标签库都是使用ongl表达式来使用的
     <s:property value=""/>
   c.工作原理:struts2将ActionContext设置为ongl上下文,并将值栈作为ognl的根对象放置到actionContext中
                struts2总是把action实例放置在栈顶,所以ongl在引用action中的属性时可以不加
   d.调用方法法:
     d1. 调用普通方法
        对象名.方法()
     d2. 调用静态方法和静态属性:
      添加如下常量配置
      <constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
       @class@field
       @class@method(args)
       @@max(2,5)  访问java.lang.Math类中的静态方法
    d3.调用构造方法
      new java.util.ArrayList()
e.Struts2的其他对象
 Struts2还提供了一些命名对象,这些对象没有放置在值栈中,而是直接直接放置在ActionContext中(须使用#来访问),这些对象都是Map类型
 名称                    作用                                                                 例子
parameters  包含当前HTTP请求参数的Map                                  #parameters.id[0]作用相当于request.getParameter("id")
request  包含当前HttpServletRequest的属性(attribute)的Map           #request.userName相当于request.getAttribute("userName")
session  包含当前HttpSession的属性(attribute)的Map                    #session.userName相当于session.getAttribute("userName")
application  包含当前应用的ServletContext的属性(attribute)的Map          #application.userName相当于application.getAttribute("userName")
attr           用于按pageContext > request > session > application顺序访问其属性(attribute)  

 

2。Struts2常用标签
常用标签:用于控制和执行页面呈现
    a.数据标签:
               property 用于输出值栈中的对象的属性值。
                set 将一个值赋给指定范围内的变量。
  push 把一个值压入值栈。
  param 为其它标签提供参数。用作其它标签的子标签。
  bean 用于实例化一个JavaBean对象。
  action 在JSP页面直接调用action
  include 用于包含一个其它资源。相当于JSP的<jsp:include>
  url 用于创建一个URL。类似于JSTL的<c:url>
  i18n 用于将指定的基名资源包放入到值栈中。
  text 用于从资源包中获取指定key的文本消息。
  date 格式化输出日期值。
  debug 用于调试。输出值栈中的内容。
       
    b.控制标签:
        if/elseif/else 用于逻辑控制
 iterator 用于迭代一个集合,集合可以是:Collection、Map、Enumeration、Iterator或数组。
 status属性:它是一个IteratorStatus实例。它的有用方法:getCount()、getIndex()、isEven()、isOdd()、isFirst()、isLast()
 append 将不同的迭代器组合在一起,使一个迭代器完成后转移到下一个迭代器中继续迭代。
 merge 合并迭代器
 generator 根据separator属性指定的分隔符,将val属性值进行拆分,生成一个迭代器,压入值栈的栈顶。
 subset 截取一个迭代器的子集。
 sort 根据comparator属性指定的比较器对集合进行排序。
UI标签:用于构建用户界面,使用一个UI标签时必须指定标签的主题,struts2内置了4个主题:simple、xhtml、css_xhtml、ajax
     a.表单标签:
                        form 表单
   textfield 文本框                                           
   password密码框
   textarea 文本域
   select 列表框
   optgroup 作为select标签的子标签使用,用于创建选项组。
   radio 一组单选按钮
   checkbox  单个复选框
   checkboxlist 一系列的复选框
   doubleselect 级联的列表框
   combobox 一个文本输入控件和一个列表框的组合
   optiontransferselect  选项转移列表组件
   updownselect 带有上下移动按钮的列表框
   hidden 隐藏表单元素
   sumbit 提交按钮。
   name属性可以使用前缀:method、action、redirect、redirect-action
   reset 重置按钮
   label lable标签
   token 输出两个隐藏表单字段,用于防止表单的重复提交。
   file 文件选择框
   head 输出对应主题的head部分的内容。

 

     b.非表单UI标签:
               component 组件(自定义)
  a   超链接
  actionerror 输出错误消息
  actionmessage 输出一般消息
  fielderror 输出字段的错误消息
  <s:fielderror/>   输出所有字段的错误消息
  <s:fielderror><s:param value="'field2'"/></s:fielderror> 特定字段

     c.Ajax标签:


 
                      第四篇:struts2拦截器
1。概念:拦截器:在AOP中用于某个方法或字段被访问之前,进行拦截,然后再之前或之后加入某些操作,拦截是aop的一种实现策略
    Struts2拦截器的原理:
                拦截器的设计原理,实际上是一个典型的任链模式的应用:首先将整个执行划分成若干相同类型的元素,每个元素具备不同的逻辑责任,并将他们纳入到一个链式的数据结构中(堆栈结构也看作是一个递归的链式结构),而每个人又有责任负责链式结构中下一个元素的执行调用
               
        struts2          拦截器     拦截器2        Action         result
          |                 |           |             |              |
   |                 |                         |
   |     _走_>       | ——走——>   |     —走———>                |
   |                 |                         |              |
   |                 |           |             |
   |                                           |              |
   |                 |                 <__回__                |
   |                              |            |
   |                 |
   |                              | ——————————走—|————————————》|
   |                 |
   |                                《  ————————回———————————————                      
                                                     
   |  《———————回————— |《———————回———
   |                 |
   |
2。使用Struts2内置的拦截器
    Struts2已经为您提供丰富多样的、功能齐全的拦截器实现。
    可以至struts2-core包内的struts-default.xml查看关于默认的拦截器与拦截器栈的配置
3。使用自定义拦截器
   在struts.xml配置中有两个步骤:
   通过<interceptor …>元素来定义拦截器。
   通过<interceptor-ref …>元素来使用拦截器

                        第五篇:国际化
步骤:
 1。加载全局资源文件:
     在struts.xml中配置struts.custom.i18n.resources常量的值来指定资源文件的基本名:
     <struts>
     <constant name="struts.custom.i18n.resources" value="msgs" />
     </struts>
2.在classpath下添加国际化资源文件:(具体事例见工程)
msgs.properties
msgs_zh_CN.properties
msgs_en_US.properties
3。访问国际化主要有三种方式:
  a.jsp页面中:可以在struts2提供的<S:text......./>标签,用name属性指定一个国际化资源文件中的key
  b.action类中:可以使用actionSupport类的getText(String aTextName)方法,aTextName指定一个国际化资源文件的key
  c。表单元素的label:以为该表单标签指定一个key属性,它指定一个国际化资源文件中的key
4。Struts2中提供了两种方式来填充消息字符串中的占位符:
JSP页面:通过在<s:text …>标签中使用多个<s:param…>标签来填充占位符。第一个<s:param…>标签指定第一个占位符值,依此类推。
Action类:通过调用ActionSupport类中的getText(String aTextName, List args)或getText(String aTextName, String[] args)方法来填充占位符
                         
                            第六篇:文件上传和下载
文件上传:
struts2并未提供自己的文件上传请求解析器,只是在其它第三方文件上传请求解析器做了一些封装,从而更进一步简单了文件上传
步骤:
 1 页面表单的设置:
  要求。
  表单数据的编码方式要为multipart/form-data
  数据提交方式使用POST
  通过<input type=“file”/>来选择要上传的文件


  2在Action中处理上传请求:
        Struts2针对表单中名为xxx的文件域,在对应的Action类中使用3个属性来封装该文件域信息:
 类型为java.io.File的xxx属性:封装上传文件的内容对象。
 类型为String的xxxFileName属性:封装上传文件的文件名。
 类型为String的xxxContentType属性:封装上传文件的内容类型。
 在Action类中使用IO流来操作File就可以获取上传的文件内容了。
.3。
  文件上传失败信息提示
  通过<s:fielderror/>标签来显示错误信息
  错误信息国际化
 
  文件下载:
   1。首先写好action类中的方法
   2。然后在struts.xml中配置好action
    注意:配置stream类型的结果时,无需指定实际要显示的物理资源位置,但需要配置以下几个参数
 contentType   内容类型,和互联网MIME标准中的规定类型一致
 inputName 下载文件的来源流,对应着action类中某个类型为InputStream的属性名
 例:取值为inputStream的属性需要编写getInputStream()方法
 contentDisposition  文件下载的处理方式。
 包括内联(inline)和附件(attachment)两种方式。附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。
 例:attachment;filename="struts2.txt",表示文件下载的时候保存的名字应为struts2.txt
 bufferSize 下载缓冲区的大小
             
       第七篇:输入校验
1输入校验简介。
 客服端校验:客服端校验主要是阻止正常的用户的误操作提交到服务器,降低服务器负担,主要通过javascript代码完成
 服务器校验:服务器校验时防止非法数据进入程序,导致程序异常,底层数据库异常。它是整个应用程序阻止非法数据的最后防线,主要通过在应用程序中编程实现
2。校验框架原理:
   将请求的参数转换为bean的属性

      是否存在异常           是       将其保存到actionContext
                                            
           拦截器将其加入fieldError
        否                                     

 通过反射调用ValidationXXx()方法


 调用validation()
 
 是否存在fieldError()   是    结束

          否
       调用action() 方法
               结束

3.编程式校验
   在Action类中重写validateXxx()方法来编写输入校验代码(具体实例见struts2_validate.rar)
   xxx为某个业务处理方法
 4.使用校验框架
   校验框架只校验Action中指定方法:
   只为Action中的指定方法指定验证配置文件,配置文件命名为
    ActionName-alias-validation.xml
    alias:要校验的方法对应的Action标签的name属性值
    如:UserAction-user_add-validation.xml<PIXTEL_MMI_EBOOK_2005>10                                                          </PIXTEL_MMI_EBOOK_2005>

posted on 2012-04-25 14:05  寒莎  阅读(387)  评论(0)    收藏  举报