`
chineseoa
  • 浏览: 102945 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts2知识点小结(一共二)

阅读更多

Struts Tag Library

对于一个MVC框架而言,重点是实现二个部分: 控制器部分和视图部分。 Struts2框架同样如此:控制器部分由
Action(以及隐藏的系列拦截器)来提供支持,而视图部分则通过大量标签来提供支持。

Struts2标签库使用OGNL表达式作为基础, 且默认支持OGNL, JSTL, Groovy和Velcity表达式。且把所有标签都
定义在URI为 /struts-tags 命名空间下,但我们依然可以依据功能将其分为三类:

1. UI标签;
   a. 表单标签;
   b. 非表单标签;树、Tab页等;

2. 非UI标签;
   a. 流程控制: 条件、循环;
   b. 数据访问: 输出ValueStack中的值;

3. AJAX标签;


Object Graph Navigation Language, 缩写为OGNL,是类似于EL的脚本语言,


一. 控制标签

    Struts2中的非UI标签包括控制标签和数据标签,其中控制标签可以完成输出流程控制,例如条件、循环等操作,
    也可完成对集合的合并、排序等操作,它有如下九个:

    1) if: 选择输出;
    2) elseIf/elseif: 与if标签结合使用;
    3) else: 与if标签结合使用
    4) append: 将多个集合拼接成一个新的集合;
    5) generator: 将一个字符串解析成一个集合;
    6) iterator: 将集合迭代输出;
    7) merge: 将多个集合拼接成一个新集合,与append拼接方式不同;
    8) sort: 对集合进行排序;
    9) subset: 截取集合部分元素,形成新的子集;

    1. iterator标签

       对集合进行迭代,包括List,Set和数组,Map.

       . value: 可选,被迭代的集合,通常使用OGNL表达式指定,如无,则使用ValueStack栈顶集合;
       . id: 可选,指向集合中元素;
       . status: 可选,指向迭代时IteratorStatus实例,通过该实例可判断当前迭代元素的属性;每次迭代都有
                 一个IteratorStatus实例,该实例包含以下方法:

         a. int getCount(): 返回当前迭代了几个元素
         b. int getIndex(): 返回当前迭代元素的索引
         c. boolean isEven(): 当前索引是否为偶数
         d. boolean isFirst(): 当前迭代元素是否是第一个元素
         e. boolean isLast(): 当前迭代元素是否是最后一个元素
         f. boolean isOdd(): 当前索引是否为奇数

    2. if标签

       根据一个Boolean表达式的值,来决定是否计算,输出标签体等内容。
      
    3. append标签

       将多个集合对象拼接起来,组成一个新的集合。
       其中 id 属性确定拼接生成的新集合的名字。 append可接受多个<s:param ..../>子标签,每个子标签指定一个集合,append
       将<s:param..../>指定的多个集合拼接成一个集合;

    4. generator标签

       将指定字符串按指定分隔符分隔成多个子串,临时生成的多个子串可以使用iterator标签来迭代输出。

       a. count: 指定生成集合中元素总数;
       b. separator: 指定解析字符串的分隔符;
       c. val: 指定被解析的字符串;
       d. converter: 可选,指定一个负责将集合中每个字符串转换成对象;
       e. id: 指定访问集合的名称,如指定,则集合放在pageContext属性中;

    5. merage标签

       功能和append类似,但是新集合中各元素顺序不同:

       append为:
       1) 第一个集合第一个元素;
       2) 第一个集合第二个元素;
       3) 第一个集合第三个元素;
       4) 第二个集合第一个元素;
       5) 第二个集合第二个元素;
       6) 第二个集合第三个元素;
       7) 第三个集合第一个元素;
       8) 第三个集合第二个元素;
       9) 第三个集合第三个元素;

       merage为:
       1) 第一个集合第一个元素;
       2) 第二个集合第一个元素;
       3) 第三个集合第一个元素;
       4) 第一个集合第二个元素;
       5) 第二个集合第二个元素;
       6) 第三个集合第二个元素;
       7) 第一个集合第三个元素;
       8) 第二个集合第三个元素;
       9) 第三个集合第三个元素;

    6. subset标签

       取得集合的子集:
       . count: 指定子集合元素个数;
       . source: 指定源集合,如不指定,则默认取得ValueStack栈顶的集合;
       . start: 指定从源集合中第几个元素开始截取,默契为第一个(值为0);
       . decider: 指定由开发者是否选中该元素;

    7. sort标签      

       对于指定的集合进行排序; 必须提供自己的排序规则,即提供实现 java.util.Comparator接口的实现类;
       . comparator: 指定进行排序的 Comparator 实例;
       . source: 指定被排序的集合,如不指定,则针对 ValueStack栈顶的集合;


二. 数据标签

    提供各种数据访问相关的功能,包含显示一个Action中属性以及生成国际化输出等功能;

    1. property标签

       提供一种快速、方便地方式从ValueStack或ActionContext中获取值并显示;

       . value: 指定输要输出的属性值,如没有指定,则默认输出ValueStack栈顶的值;
       . default: 如输出属性值为 null, 则显示 default 属性的值;
       . escape: 是否escape HTML 代码, 默认值为 true; 将 < 转化为 &lt;

    2. set 标签

       将一个已有的值复制给新变量,然后放到指定的范围内

       . name: 必填,新变量名字
       . scope: 可选属性,指定新变量放置的范围,可以接受 application, session, request, page 或 action 五个值,
               默认为 Action中;
       . value: 可选,赋给变量的值,没指定,则为ValueStack栈顶的值;
       . id: 可选,该元素的引用ID
      
    3. push 标签

       将某个值放到valueStack中,从而更加方便访问;

    4. bean 标签

       创建JavaBean实例;

       . name: 必须,要实例化的JavaBean的完整类名;
       . var:  可选,可通过该属性值在标签外访问已实例化的JavaBean;

    5. Date 标签
      
       格式化输出日期以及计算指定日期和当前时刻间的时差;

       . format: 可选,指定日期显示格式;
       . nice: 可选, 是否输出指定日期和当前时刻间的时差,默认值为 false;
       . name: 必填,日期值;
       . id: 可选,引用该元素的 id 值;

       如果既指定nice="true", 又指定 format 属性,则会输出指定日期和当前时刻间的时差,即format属性失效;
       如没有指定format属性,也没指定nice="true", 则系统会到资源文件中寻找 key 为 struts.date.format的消息作为格式,否
       则采用默认的 DateFormat.MEDIUM格式输出。

    6. action 标签     

       直接在JSP页面中直接调用Action

       . id: 该Action的引用ID;
       . name: 必须:调用哪个Action;
       . namespace: 可选,调用Action所属的namespace;
       . executeResult: 可选,是否将Action处理结果页面包含到本页面,默认值为false;
       . ignoreContextParams: 可选,该页面中请求参数是否需传入调用的Action, 默认值为 false, 传入。

    7. debug 标签

       用于辅助调试,它在页面上生成一个超级链接,通过该链接可以查看到ValueStack和Stack Context中所有的值信息;

    8. include 标签

       将一个JSP或servlet包含到本页面中:
       . value: 必填, 指定包含的资源;
       . id: 可选,该标签的ID引用;

    9. url 标签       
 
       生成一个URL 地址,可以通过为url标签指定 param 子元素,从而向指定URL发送请求参数。

       . includeParams: 可选,是否包含请求参数,值为 none, get或者all.
       . scheme: 设置schema属性;
       . value: 可选,指定生成的URL值,如果无value有action就使用action指定Action作为URL地址;
                如果均提供,则使用value指定URL值;如均不提供,则使用当前页面作为URL地址;
       . action: 可选,指定action;
       . namespace: 可选,指定命名空间;
       . method: 可选,指定使用Action的方法;
       . encode: 可选,是否需encode请求参数;
       . includeContext: 是否需将当前上下文包含在URL地址中;
       . anchor: 可选,指定URL锚点;
       . id: 指定该URL元素的引用ID

    10. i18n和text 标签 

        i18n用于显示指定指定语言资源文件;

        . name: 资源文件名称;
 
        text用于获取指定资源文件中指定key对应的值;

        . name: 资源文件 key 值;
        . id:  引用的标识;


三. Form标签

    1. checkbox 标签    
 
        <s:set name="aBoolean" value="false"/><br>
        <s:checkbox label="checkbox test" name="checkboxField1" value="#aBoolean" fieldValue="true"/>
        <s:set name="aBoolean" value="true"/><br>
        <s:checkbox label="checkbox test" name="checkboxField1" value="#aBoolean" fieldValue="true"/>

       显示结果:

    <input type="checkbox" name="checkboxField1" value="true" id="checkboxField1"/>
    <input type="checkbox" name="checkboxField1" value="true" checked="checked" id="checkboxField1"/>

    2. checkboxlist 标签  

       一次性创建多个复选框,它根据list属性指定的集合来生成多个复选框;

       . listKey: 指定集合元素中的某个属性作为复选框的 value;
       . listValue: 指定集合元素中的某个属性作为复选框的 标签;

    3. combobox 标签 

       生成一个单行文本框和下拉列表框的组合,但两个表单元素只对应一个请求参数,只有单行文本框里的值才包含
       请求参数,而下拉列表框则只是用于辅助输入,没有name属性。

    4. doubleselect 标签 

       生成一个级联列表框, 当选择第一个下拉列表框时,第二个下拉列表框的内容会随之改变。

       . list: 第一个下拉列表框的集合;
       . listKey: 指定集合元素中某个属性作为第一个下拉列表框的value;
       . listValue: 指定集合元素中某个属性作为第一个下拉列表框的标签;
       . doubleList: 第二个下拉列表框的集合;
       . doublelistKey: 指定集合元素中某个属性作为第二个下拉列表框的value;
       . doublelistValue: 指定集合元素中某个属性作为第二个下拉列表框的标签;
       . doublename: 第二个下拉列表框的 name 属性;

       doubleselect标签一定得位于form中,且form须指定action属性.


四. 数据传输以及类型转换

    1. 为什么要数据传输以及数据转换?

       所有的MVC框架,都需要负责收集用户请求参数,并将请求参数传给应用的控制器组件。但所有的请求参数都是,
       也只能是字符串数据类型,但Java是强数据类型语言,因此MVC框架必须将这些字符串请求参数转换成相应的数据
       类型,这个工作是所有MVC框架均应提供的功能。

       不仅于此,在请求处理结束,在格式化显示请求处理结果的时侯,我们也需将封装了结果数据的JavaBean属性值
       转换为HTML页面上显示的内容。

       数据的传输和转换贯穿于请求处理的整个生命周期。

       Struts2通过内置的拦截器提供了非常强大的类型转换机制,也提供了很好的扩展性,开发者可以非常简单地开发出
       自己的类型转换器,完成字符串和自定义复合类型的转换(例如将字符串到Student实例间转换). 如果类型转换中
       出现异常,开发者也无须关心异常处理逻辑。Struts2的conversionError拦截器提供了非常强大的表现层数据处理
       机制, 并且在页面上显示异常信息。总之, Struts2的类型转换器提供了非常强大的表现层处理机制,方便了开发者
       的使用和操作。

    2. OGNL和Struts2

       Struts2的类型转换是基于OGNL表达式的,只要我们将HTML输入项命名为合法的OGNL表达式,就可以充分利用Struts2
       的类型转换机制。

    3. 内置的类型转换器

       Struts2已经内建了字符串类型和如下类型间的类型转换器.

       . Date: 日期格式使用用户请求所在Locale的SHORT格式;
       . 数组:默认情况下,元素是字符串;
       . 集合:在默认情况下,集合元素类型是String;

    4. List中放置自定义的类型

       1) 提交页面

            <s:textfield name="users[0].name" label="User Name"/>
            <s:textfield name="users[1].name" label="User Name"/>
            <s:textfield name="users[2].name" label="User Name"/>
            <s:textfield name="users[0].age" label="User Age"/>
            <s:textfield name="users[1].age" label="User Age"/>
            <s:textfield name="users[2].age" label="User Age"/>                       

       2) Action

      public class ListConversion {
              private List<Student> users;
              ...;
          }

          其国com.briup.Student类为:

          public class Student {
         private String name;
             private int age;   
          }
           
          如果Action中List不使用范型,必须在Action同目录下新增一文件, 使名规则为:

          Action类名-conversion.properties, 例如,可命名为: ListConversion-conversion.properties

          内容为:

          Element_list类型属性名称=list中所包含对象完整类名

          例如,Element_users=com.briup.Student

       3) 显示页面

        User Name Number 3: <s:property value="users[2].name"/><br>
        User Age Number 2: <s:property value="users[1].age"/><br>
   
    5. Map中放置自定义的类型

       1) 提交页面

            <s:textfield name="students['one'].name" label="Name"/>
            <s:textfield name="students['two'].name" label="Name"/>
            <s:textfield name="students['three'].name" label="Name"/>
            <s:textfield name="students['one'].age" label="Age"/>
            <s:textfield name="students['two'].age" label="Age"/>
            <s:textfield name="students['three'].age" label="Age"/>                       

       2) Action

      public class MapConversion {
              private Map<Student> students;
              ...;
          }

          其国com.briup.Student类为:

          public class Student {
         private String name;
             private int age;   
          }
           
          如果Action中Map不使用范型,必须在Action同目录下新增一文件, 使名规则为:

          Action类名-conversion.properties, 例如,可命名为: MapConversion-conversion.properties

          内容为:

          Element_map类型属性名称=map中value对象完整类名
          Key_map类型属性名称=map中key对象完整类名      

          例如,Element_students=com.briup.Student
                Key_students=java.lang.String

       3) 显示页面

        Age Number One: <s:property value="students['one'].age"/><br>
        Name Number Two: <s:property value="students['two'].name"/><br>


    6. 自定义类型转换器:
 
       注:JSP页面控件名和Action中属性同名

       1) 转换器实现类实现接口 org.apache.struts2.util.StrutsTypeConverter,实现二个方法:

          //将请求字符转换成特定对象
    public Object convertFromString(Map context, String[] values, Class toClass) {
        System.out.println("----------From String-------------");
        for(Object key: context.keySet()) {
            System.out.printf("Key: %s\tValue: %s%n",
                    key,
                    context.get(key));
        }
        System.out.println("toClass: "+toClass);
       
        String userString = values[0];
        Circle newCircle = parseCircle(userString);
        return newCircle;
    }

          //将对象转换成字符串输出
    public String convertToString(Map context, Object o) {
        System.out.println("----------From String-------------");
        for(Object key: context.keySet()) {
            System.out.printf("Key: %s\tValue: %s%n",
                    key,
                    context.get(key));
        }       
        Circle circle = (Circle) o;
        String userString = "toString: C:r" + circle.getRadius();
        return userString;
    }

       2) 设置配置文件:

          局部转换器: 在Action所在目录下配置文件:

                      Action类名-conversion.properties , 例如 CircleAction-conversion.properties,

                      内容为:

                      对象属性名称=转换器的完整类名    例如:circle=com.briup.CircleConverter


          全局转换器: 在源文件根目录下配置文件:

                      xwork-conversion.properties,

                      内容为:

                      对象完整类名称=转换器的完整类名    例如:com.briup.Circle=com.briup.CircleConverter                

五. 拦截器

    1. 拦截器是什么?

       多个Action中需要重复执行一些代码,我们可以将这些代码提取出来形成单独一个类中的方法,从而提供更好的重用
       性。这个单独提供的类就是 所谓的拦截器。 也就是说 拦截器体现的其实是一种软件复用的原则。

       拦截器就是一个类,也个类也包含方法,只是这个方法是个特殊方法,它会在目标方法调用之前或之后被调用执行。

       拦截器体系是Struts2的一个重要组成部分, 正是大量的内建的拦截器完成了该框架的大部分操作。这些拦截器有的提供
       公用功能,有的提供高级功能。例如通过 params 拦截器将 HTTP 请求中的参数解析出来,设置成 Action 的属性;
       servlet-config拦截器直接将HTTP请求中的HttpServletRequest实例和HttpServletResponse实例传给Action;
       fileUpload拦截器则负责解析请求参数中的文件域,并将一个文件域设置成Action的三个属性等;

    2. 为什么需要拦截器?

       1) 代码重用;
          将重复代码从多个Action中剥离出来,实现代码重用,便于代码维护;例如一些日志,权限管理代码。

       2) 使用移除方便;
          Struts2中拦截器为了进一步的维护方便,将拦截器相关信息从源代码中移除,配置在配置文件中。这样开发者可以非常方便增
          加或移除拦截器。

    3. 拦截器是如何调用的?

       1) FilterDispatcher实例化ActionProxy并调用其execute()方法;
       2) 拦截器在请求抵达Action之前和响应抵达客户端之前被调用;
       3) 一旦请求处理完毕,请求被送往Result渲染响应结果;

    4. 拦截器

       Struts2框架大多数核心功能由拦截器组成。例如重复提交、类型转换、数据填充、验证、文件上传、页面预处理以及更多功能
       均得益于拦截器的帮助;

       每一个拦截器均是通过在配置文件中配置完成;

    5. 拦截器和Action

       拦截器在调用的时侯,很可能要和Action交互。这时侯可以持有Action的引用,实现类似于解决重复提交或输入验证功能。拦截器
       也可以在Action的execute()方法调用之前修改设置Action的状态;

    6. 拦截器的配置

       拦截器能基于每一个Action进行配置,自行定义的拦截器亦可和框架本身提供的拦截器混合使用;多个拦截器可以组合形成所
       谓的拦截器栈。这时侯拦截器配置的位置对于执行的顺序非常重要。

    7. 拦截器配置->具体代码

       拦截器是通过配置文件指定,因此通过拦截器来引入通用操作的方式,完全是可插拨式的:当系统需要执行这些通用操作时,则
       配置文件引用这些拦截器即可;如果系统不再需要执行这些通过操作,则在配置文件中取消引入这些拦截器即可。

       在struts.xml文件中定义拦截器只需为拦截器指定一个拦截器名,就完成了拦截器定义。

       <interceptor name="拦截器名" class="拦截器实现类"/>

       一旦定义了拦截器和拦截器栈后,就可以使用这个拦截器来拦截Action了,拦截器的拦截行为将会在Action的execute()方法执行
       之前被执行。

       通过<interceptor-ref.../>可以在Action内使用拦截器。

       1) 默认拦截器

          每一个包只默置一个默认拦截器,一旦为某个包指定了默认拦截器,如果该包中Action没有显示指定拦截器,则默认的拦截器将会
          起作用。但值得注意的是:一旦我们为该包中的Action显示指定了某个拦截器,则默认的拦截器不会起作。如果该Action需要
          使用该默认拦截器,则必须手动配置该拦截器的引用。

          配置默认拦截器使用<default-interceptor-ref.../>元素,该元素作为<package.../>元素的子元素使用,为该包下的所有
          Action配置默认的拦截器。配置<default-interceptor-ref.../>元素时,需要指定一个name属性,该name属性值是一个已经
          存在的拦截器的名字,表明将该拦截器配置成该包的默认拦截器。需要注意的是每个<package.../>元素只能有一个
          <default-interceptor-ref.../>子元素,即每个包只能指定一个默认拦截器。

          <package name="包名">
              <interceptors>
                   <interceptor.../>
                   <interceptor-stack.../>
              </interceptors>
              <default-interceptor-ref name="拦截器名或拦截器栈名"/>
              <action .../>
          </package>

          配置默认拦截器是一种使用拦截器的方式——避免在每个Action中单独配置拦截器,通过在该包下配置默认拦截器,可以实现
          为该包下所有Action同时配置相同的拦截器。

          当我们定义的包继承struts-default包时,也继承了它的默认拦截器栈:defaultStack,这就意味着,如果我们不为Action指定
          任何的拦截器引用,则defaultStack拦截器栈将会拦截Action.

    8. 拦截器栈

       如果有多个Action在执行前同时做登录检查、安全检查和记录日志,则可以将这三个动作对应的拦截器组成一个拦截器栈。达到减少
       配置,重复使用的目的。

       配置拦截器栈的语法示例如下:

       <interceptor-stack name="拦截器栈名">
          <interceptor-ref name="拦截器一"/>
          <interceptor-ref name="拦截器二"/>
          ...
       </interceptor-stack>

       当然拦载器栈中也可以再次包含拦载器:

       <interceptor-stack name="拦截器栈一">
          <interceptor-ref name="拦截器一"/>
          <interceptor-ref name="拦截器二"/>
          ...
       </interceptor-stack>

       <interceptor-stack name="拦截器栈二">
          <interceptor-ref name="拦截器一"/>
          <interceptor-ref name="拦截器栈一"/>
          ...
       </interceptor-stack>

    9. 自定义拦截器

       实现接口 com.opensymphony.xwork2.interceptor.Interceptor接口,该接口包含三个方法:
       . init(): 拦截器实例化后立即执行,且在整个拦截器的生命周期中仅执行一次。主要用于打开一些一次性资源。
       . destory(): 在拦截器实例被销毁之前调用,且在整个拦截器的生命周期中仅执行一次。主要用于关闭一些一次性资源。
       . intercept(ActionInvocation invocation): 用户需要实现的拦截动作,就像Action的execute()方法一样,intercept()
                 方法会返回一个字符串作为逻辑视图。如果该方法直接返回了一个字符串,系统将会跳转至该逻辑视图对应的实
                 际视图资源,不会调用被拦截的Action。该方法的ActionInvocation参数包含了被拦截的Action的引用,可以通
                 过调用该参数的invoke方法,将控制权转给下一个拦截器,或者转给Action的execute()方法;

    10. 内置拦截器

        1) 工具

           a. timer: 负责输出Action的执行时间,在分析该Action的性能瓶颈时比较有用。
           b. logger: 负责日志记录的拦截器, 主要是输出Action的名字;
        
        2) 数据传输

           a. params: 最基本的一个拦截器,它负责解析HTTP请求中的参数,并将参数值设置成 Action 对应的属性值;
           b. static-params: 负责将xml中<action>标签下<param>标签名册中的参数传入action.
           c. autowiring: 自动装配的拦截器,主要用于当 Struts2 和 Spring 整合时, Struts2 可以使用自动装配的方式
                      来访问 Spring 容器中的 Bean.
           d. fileUpload: 主要用于文件上传,负责解析表单中文件域的内容;
           e. servlet-config: 某个Action需要直接访问Servlet API, 就是通过这个拦截器实现的。
 
        3) 工作流

           a. workflow: 负责调用Action类中的validate方法,如果校验失败,则返回 input 的逻辑视图;
           b. validation: 通过执行在 xxxAction-validation.xml中定义的校验器,从而完成数据校验;
           c. prepare: 如果 action 实现了 Preparable 接口,将会调用该拦截器的 prepare() 方法;
           d. model-driven: 这是一个用于模型驱动的拦截器,当某个 action 类实现了 ModelDriven 接口时,它负责把
                       getModel() 方法的结果堆入 ValueStack中;

        4) 混合

           a. exception: 负责处理异常, 它将结果映射为结果;
           b. token: 阻止重复提交,它检查传到Action中的token, 从而防止多次提交;
           c. token-session: 功能与token类同,只是将 token 保存在 HttpSession 中;
           d. scoped-Model-Driven: 如果一个Action实现了一个ScopedModelDriven接口,该拦截器负责从指定生存范围中
                     找出指定的Model, 并将通过setModel()方法将该Model传给Action;
           e. execAndWait: 后台执行action, 负责将等待画面发给用户;

分享到:
评论

相关推荐

    Struts2知识点小结-非常实用

    Struts2是一个强大的MVC框架,它为Java开发者提供了便捷的Web应用开发工具。本文将对Struts2的核心概念和标签库进行详细讲解,帮助初学者更好地理解和掌握这个框架。 Struts2框架由两个主要部分构成:控制器和视图...

    struts2基本知识

    ### Struts2基础知识点详解 #### 一、Struts2框架概述 Struts2是Apache组织维护的一个开源项目,它是Struts1的升级版本,在设计理念和技术实现上都有了很大的改进。Struts2采用MVC(Model-View-Controller)模式...

    Struts2+Hibernate+Spring项目小结――Struts2部分总结

    理解并熟练运用上述知识点,能够帮助开发者构建出更加健壮、用户体验良好的Web应用。在实际项目中,还需要结合Hibernate进行持久层操作,以及Spring进行依赖注入和事务管理,共同构建出完整的SSH(Struts2 + ...

    Struts 2实战 Struts 2 in action 的中文版

    ### 小结 《Struts 2实战 Struts 2 in action 的中文版》这本书系统地介绍了Struts 2框架的基础知识、核心组件、工作原理以及实际开发技巧。对于希望深入学习和掌握Struts 2框架的开发者来说,这本书是一本不可多得...

    struts开发小结

    这篇博客"Struts开发小结"可能涵盖了作者在使用Struts框架进行开发过程中的经验总结和一些关键点。由于没有直接的描述内容,我们将基于Struts框架的一般特性来讨论相关知识点。 1. **Struts 2框架基础**: Struts ...

    Struts2 in action中文版

    第一部分 Strut 2:一个全新的框架 第1章 Struts 2:现代Web框架 2 1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 ...15.7 小结 332

    关于struts的部分小结

    以上是对Struts框架的简单总结,每个知识点都涉及到Struts2的核心特性,理解和掌握这些知识点对于进行Struts2应用的开发至关重要。在实际项目中,还需要结合其他技术如Spring、Hibernate等进行更复杂的集成和配置。

    struts资料\前半阶段小结

    在"struts资料\前半阶段小结"这个主题中,我们可以理解为是对学习或使用Struts框架初期阶段的一个总结。以下是对Struts框架核心知识点的详细解释: 1. **MVC模式**:MVC是一种设计模式,用于分离应用程序的数据、...

    关于struts实验时的临时总结

    #### 知识点详细解析 ##### 总结1:Struts2 onsubmit 无法返回JavaScript进行验证 **问题描述**:在Struts2框架中,尝试使用`onsubmit`事件调用JavaScript进行表单验证时发现无效。 **原因分析**:`onsubmit`事件...

    Struts2 json插件入门指南.pdf

    ### Struts2 JSON插件入门知识点详解 #### 1. 依赖包 - **Struts2 必需的 6 个 jar 包** - `commons-fileupload-1.2.2.jar`: 提供了文件上传功能的支持。 - `commons-io-2.0.1.jar`: 用于处理I/O操作,简化输入...

    struts2培训教程

    ### Struts2培训教程知识点详解 #### 一、MVC模式理解与框架介绍 MVC(Model-View-Controller)模式是一种广泛应用于软件工程中的设计模式,尤其在Web应用程序开发中占据着重要的地位。该模式将应用程序逻辑分成三...

    struts2配置与工作原理

    ### Struts2配置与工作原理详解 #### 一、Struts2概述 Struts2是Apache Struts项目下的一个开源框架,它继承了Struts1的...对于希望进一步了解Struts2工作原理的开发者来说,掌握以上提到的关键知识点是非常重要的。

    在Struts 2中实现文件上传

    ### 在Struts 2中实现文件上传的知识点详解 #### 实现原理 在Struts 2框架中,文件上传功能的实现主要依赖于`CommonsFileUpload`组件。`CommonsFileUpload`通过将HTTP请求中的数据部分保存到服务器端的临时文件夹...

    struts2实现文件上传

    ### Struts2 实现文件上传知识点详解 #### 一、Struts2文件上传概述 Struts2 是一个基于 Java 的开源框架,它提供了一种灵活的方式来构建 Web 应用程序。Struts2 提供了许多内置的功能,其中包括文件上传功能。在...

    struts2文件下载

    ### Struts2文件下载知识点详解 #### 一、Struts2简介 Struts2是Apache组织维护的一个开源项目,它是一个基于MVC模式的Web应用框架。Struts2框架不仅继承了Struts1的优点,还增加了对拦截器、类型转换等机制的支持...

    Struts书籍 Struts_In_Action_中文版

    ### Struts快速入门知识点概述 #### 一、Struts简介 **1.1 关于本书** 本书《Struts In Action》中文版旨在帮助读者全面掌握Struts框架的应用与开发技巧,是一本适合初学者和有一定经验开发者阅读的技术书籍。...

    struts 案例

    这个"Struts案例"集合包含了一系列关于如何使用Struts来构建实际应用的实例,主要涉及到分页、JSON数据交互以及使用Struts标签等关键知识点。 1. **Struts2 分页实现**: 分页是大型Web应用中不可或缺的功能,它...

    struts技术文档

    ### Struts 技术文档知识点总结 #### 一、Struts 框架简介与背景 **1.1 关于本书** - **作者**: Ted Husted(原著),Eric Liu(翻译) - **目的**: 旨在为Java技术框架的初学者提供深入浅出的学习资料。 - **...

    JAVA 模块知识小结

    JAVA模块知识小结涵盖的内容非常广泛,包含了Java技术栈中的多个重要知识点,从基础的开发工具到框架、数据库以及编程语言本身,以下是对给定文件中提到的各项技术的详细知识点梳理: 1. Hibernate和Ibatis ...

Global site tag (gtag.js) - Google Analytics