1)Strust2是以WebWork为核心,采用拦截器的机制对用户请求进行处理。

2)Struts2框架结构:

3)简单来看整个Struts2的处理过程可以简单的理解为

  •   用户的请求发送给对应的Action
  •   Action接收到请求,执行对应的函数,返回相应的字符串
  •   Action根据返回的字符串再Struts.xml中找到相应的跳转目录
  •   Action跳转到对应的显示视窗

3)Strust2的控制器组件是Struts2整个框架的核心,由两部分组成:

  • 核心控制器SturtsPrepareAndExecuteFilter
  • 业务控制器Action

4)核心控制器SturtsPrepareAndExecuteFilter实际上是一个Servlet过滤器,需再Web.xml中配置。
5)Action是由用户定义的业务控制器,由三种实现方式:

  • 普通的POJO类,通常包含一个无参数的execute()方法,返回值为字符串类型
  • 继承ActionSupport类(含有一个execute()方法和Validate()方法)
  • 实现Action接口

6)Struts2使Action不再与任何Servlet API耦合,该框架可以通过ActionContext类来访问Servlet API。

    ActionContext提供了读写Servlet API中

  •       HttpServletResquest
  •       HttpSession
  •       ServletContext

    中的数据的方法

  同时Struts框架还提供了能直接访问Servlet API的接口:

  •   ServletContextAware--->ServletContext
  •   ServletRequestAware---->ServletRequest
  •   ServletResponseAware--->ServletResponse

7)Struts 2配置文件使用package来组织Action,Struts2配置文件中的包就是由多个Action,多个拦截器,过个拦截器的引用组成的集合。

  package含有name、extends、namespace、abstract三个属性

  •   关于继承(extends):定义包时通常应该继承struts-default包。
  •   关于抽象包(abstract=true):该包中不能包含Action定义。

  注意:struts.xml是从上往下解析的,所以父包应该再子包的前面定义,如果再同一个包中配置了两个name相同的Action,则后一个会覆盖前一个。

  •   关于命名空间(namespace):同一个命名空间不能由同名的Action,不同的命名空间可以由同名的Action,以解决同一个包下多个同名Action的问题。

     若没有指定命名空间(namespace="/"),则默认为默认的命名空间。

     配置命名空间后,Strust2会按如下的顺序搜索Action:

       指定的命名空间----->默认的命名空间-------->报错

8)Struts方法的动态调度:

  使用动态方法调用的前提:

    struts.xml中配置<constant name="struts.enbale.DynamicMethodInvocation" value="true"/>

  actionName!methodName.action

例如:

  <a href="product!edit.action?productID=1001"></a>

  表示调用productAction下的edit方法来处理请求,并传递一个参数,参数名为productID,值为1001

9)通配符的使用

  假若声明如下action:

  <package name="product" extends="struts-default" namespace="/">

      <action name="*product" class="action.ProductAction" method="{1}">

        <result>/{1}.jsp</result>

      </action>

  </package>

  若用户的请求URL为delproduct.action,则匹配模式中的第1个*为del,因此调用的方法为该action下的del方法,返回的页面为del.jsp。

10)根据result元素再struts.xml文件中的位置不同,可以将result分为

  •     局部result---->将元素作为<action>元素中的一员
  •     全局result---->将元素作为<global-results>元素中的一员

  如果一个Action包含了与全局result同名的局部result,则局部会覆盖全局。

  搜索顺序:指定Action局部——————>全局

11)result中含有两个属性:name、type。name默认为success、type默认为dispacher。

  type常用的类型:

  •     dispatcher:用于整合JSP技术
  •     redirect:用于重定向到其他URL、与dispatcher的区别是转发和重定向的区别。redirect属于重定向。Action处理的结果会丢失。
  •     redirectAction:采用ActionMapperFactory提供的ActionMapper进行重定向,重定向到另一个Aciton

                配置redirectAction类型需要actionName、namespace两个参数

12)Struts依靠配置<exception-mapping>元素捕获异常:需指定两个属性:exception和result。

    例如:

  <action name="login" class="action.loginAction">
    <exception-mapping result="error" exception="java.lang.Exception"/>

    <result>/ok.jsp</result>
    <result name="error">/error.jsp</result>

  </action>

    则需要在login Action中throw 相关的Exception,则会跳转到error.jsp页面。

  异常映射也分全局和局部,分别是

    局部:<exception-mapping>元素作为<action>元素的子元素。

    全局:<exception-mapping>元素作为<global-exception-mapping>元素的子元素。

  同样,前者会覆盖同名的后者。

Struts2 学习笔记的更多相关文章

  1. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  2. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

  3. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  4. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  5. struts2学习笔记 ⑤

    拦截器初探 昨天临睡觉之前看了看拦截器,也在昨天的学习笔记里面胡诌诌了几句,今天就来好好的会会拦截器这个东西.实际上拦截器是一种模块实现的机制<起码我是这么体会的>(至于说书里面说体现了A ...

  6. [struts2学习笔记] 第二节 使用Maven搞定管理和构造Struts 2 Web应用程序的七个步骤

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/40303897 官方文档:http://struts.apache.org/releas ...

  7. struts2学习笔记之二:基本环境搭建

    学习struts2有一段时间了,作为一个运维人员学习的时间还是挺紧张的,写这篇文件为了方便以后复习时使用 环境: MyEclipse 10 tomcat6 jdk1.6   首先建立一个web项目,并 ...

  8. 【Struts2学习笔记-4】包含其他配置文件

    包含其他配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLI ...

  9. 【Struts2学习笔记-3】常量配置

    Struts2常量 配置Struts2常量值有3个地方,1)在struts.properties文件中配置常量:2)在web.xml文件中配置FileterDispatcher指定初始化参数来配置常量 ...

  10. struts2学习笔记(4)——数据类型转换

    回过头来看昨天的那个例子. 在昨天的例子中,只转换了一个Point类,如果想转换多个Point类怎么办呢?在昨天的例子上面做一个小的修改. 首先在input.jsp页面中修改几个输入框. <s: ...

随机推荐

  1. jQuery插件的使用和写法

    插件(plugin)也称为扩展(Extension),是一种遵循一定规范的应用程序接口编写出来的程序. jQuery的易扩展性,吸引了来自全球的开发者来共同编写jQuery的插件. jQuery表单验 ...

  2. 第二天了,由于博主太分心了,看看就跑去研究了一下ssh和ufw以及nmap,现在急需记录一下啦,哈哈!

    昨天看到了视频的ssh远程连接,因为我点电脑上装的是一个ubuntu的虚拟机,我根据视频看了一下,自己又试用了一下,我发现自己的ubuntu是能够远程到自己的Mac电脑上,一开始主要是因为自己不能连接 ...

  3. 爬虫学习(十一)——bs4基础学习

    ba4的介绍: bs4是第三方提供的库,可以将网页生成一个对象,这个网页对象有一些函数和属性,可以快捷的获取网页中的内容和标签 lxml的介绍 lxml是一个文件的解释器,python自带的解释器是: ...

  4. 网页更换主题以及绘制图形js代码实现

    HTML代码实现: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  5. js | JavaScript中数据类型转换总结

    转载 在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换. 1, 显式数据类型转换 a:转数字: 1)Number转换: 代码: var a = “123”; a = Number(a); ...

  6. 基于Select模型通信程序的编写,编译和执行

    任务目标 编写Win32程序模拟实现基于Select模型的两台计算机之间的通信,要求编程实现服务器端与客户端之间双向数据传递.客户端向服务器端发送"计算从1到100的奇数和",服务 ...

  7. 细说 unicode 、utf-8 、utf-16、ascii 、gbk 、gb2312

    一.计算机的由来 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为”字节“.再后来,他们又做了一些可以处理这些 ...

  8. 493. Reverse Pairs

    // see more at https://www.youtube.com/watch?v=j68OXAMlTM4 // https://leetcode.com/problems/reverse- ...

  9. GDOI--DAY2 游记

    今天,熬夜不够多,果然,不出所料,爆零了... 第一题,看到数据之大,懵逼了,于是,敲了个二分SPFA,但是!最大的点GG了,呜呜~~~~(>_<)~~~~ ,于是,就不继续做第一题了(虽 ...

  10. Makefile (3) 基本语法和使用

    make是用来管理一个工程项目的工具 . Makefile就是这个项目文件 . 1.Makefile 是由若干条规则组成的,每个规则的语法如下所示 : #规则 targets: prerequisit ...