1.struts.xml 中的action不是代表一个action类(控制器),而是代表一次访问,所以action的name属性和访问路径有关。配置文件中的package的namespace属性其实就是起到窄化请求的作用,将相同类型的请求,配置在一起,方便维护

  2.访问路径理解:先找到namespace为XXX的package,再找到name为XXX的action,再找到该action对应的具体action类,再找到该类对应的具体的方,执行返回数据

    即浏览器上访问的地址为http://localhost:8080/项目名/package namespace/action Name.这个时候就已经能够调用action了。再根据action上配置的method,调用action的对应方法。package的name属性起到标识和继承的作用

  3.struts 的action是多例的,这个spring的Controller是不同的

  4.struts 获取值的方式:

    1)属性驱动:需要在action中根据需要添加与页面对应的属性,并提供属性对应的set方法,(不必提供get方法),适用于属性比较少的

    2)模型驱动,侵入式开发:Action类需要实现ModelDriven接口,重写getModel()方法,并且需要提供一个封装了页面数据(按需求封装即可)的模型对象(dto),在action中作为属性并创建对象,在getModel()方法中返回

    3)域驱动:封装的页面数据对象作为action的属性(不用创建对象),并提供set/get方法。

        这时页面的控件的name属性值要求为:

            a.如果属性为对象,比如 private User user,那么页面name为user.name。

            b.如果属性为list类型,比如 private List<User> users,那么页面name为user[0].name。user[0]表示list中的第一个User对象

            c.如果 属性为map类型,比如private Map<String,USer> userMap,那么页面name为userMap['first'].name。userMap['first']表示map中key为fitst的value(这里是User)对象

    经过测试:三种取值的方式可以混用。其中如果模型驱动有属性和属性驱动的属性相同,那么模型驱动中能够取到值,属性驱动取不到值为null。(域驱动不存在这个问题,因为页面的name值有特殊要求)

  5.类型转换相关

    1)struts2里面已经内置了一些转换器,负责完成String到基本类型的类型转换,比如:

      基本数据类型的转换;本地格式的日期类型(yyyy-MM-dd)——> Date;把值是String[]类型的数据转换成用逗号隔开的字符串

    2)如果struts2提供的转换器不满足需求,比如日期格式为dd-MM-yyyy那么转换就会出错,这个时候需求自定义转换器,并将自定义的转换器配置到框架使其起作用。如何自定义转换器参见链接:http://www.jb51.net/article/35465.htm。推荐使用继承StrutsTypeConverter的方式,因为双向转换分为俩个方法,不用自己判断更加清晰。

  6.配置相关

    1)虽然配置文件中有全局的配置,但是要起到全局的作用,依然是要通过package的继承达到效果的。如果不继承不会对该package起作用      

    2)这个配置 <exception-mapping result="error" exception="java.lang.NullPointerException"></exception-mapping>只适用于对action发送的指定异常跳转到对应页面。不支持配置的异常之外的异常,以及404异常。

    3)只是用来继承的package可以省略namespace属性即默认为“”,就是说项目名 / 这里可以是任意内容 / action name,只要action name存在就能访问到,不存在当然报错

    4)package的继承和java的基础很像即:通过使用extends,你可以指定本package继承另外一个package的所有的配置。当某个package继承了另外一个package的所有配置,那么你就无需对父package中已经声明过的配置定义做再次的定义。同时,如果重复定义父package中已声明过的配置定义,那么这些重复定义声明将覆盖父package中的相关定义。

    5)default-action-ref配置和package的namespace有关,意思是访问该namespace下的action 的name不存在时,调用该配置配置中的action。可以通过在父包中添加该配置以及一个通用的action配置,为每个namespace提供跳转到404页面的功能(这些是要基于理解包继承的概念的前提下去理解的)

    6)default-class-ref配置,是在有的action 只配置了name,和method的时候起作用,为这种配置的action配置上默认的对应的action类

  7.struts 获取原生的servlet api(request,session,application)的方法

    1)struts对底层servlet api做了包装,这点可以从数据类型看出来,比如struts的包装后的对象均是Map数据类型,而servlet原生的为HttpServletRequest,HttpSession,ServletContext

    2)获取的方式为:

                             struts(包装 Map 类型)          servlet(原生)
request
ActionContext ac =  ActionContext.getContext():即ActionContext对象

HttpServletRequest req=ServletActionContext.getRequest()
session                                               ac.getSession()                        req.getSession()
application                                              ac.getApplication                        req.getServletContext()

如上所示,获取的方式不止列出的方法

具体ActionContext和ServletActiveContext的区别参考链接:http://www.cnblogs.com/x_wukong/p/3887737.html

struts2 的学习的更多相关文章

  1. struts2源代码学习之初始化(一)

    看struts2源代码已有一段时日,从今天開始,就做一个总结吧. 首先,先看看怎么调试struts2源代码吧,主要是下面步骤: 使用Myeclipse创建一个webproject 导入struts2须 ...

  2. Struts2框架学习(三) 数据处理

    Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...

  3. Struts2框架学习(二) Action

    Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...

  4. Struts2框架学习(一)

    Struts2框架学习(一) 1,Struts2框架介绍 Struts2框架是MVC流程框架,适合分层开发.框架应用实现不依赖于Servlet,使用大量的拦截器来处理用户请求,属于无侵入式的设计. 2 ...

  5. 尚硅谷STRUTS2视频学习笔记

    上一个月一直在学习STRUTS2,学习的是尚硅谷佟刚老师的视频,因为很喜欢佟刚老师的声音,而且他讲的很细,笔记做的也多,基本上是照着他的视频完整的敲了一遍代码,下面就把学习到的知识梳理一遍,最后把项目 ...

  6. Struts2进阶学习4

    Struts2进阶学习4 自定义拦截器的使用 核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <! ...

  7. Struts2进阶学习3

    Struts2进阶学习3 OGNL表达式与Struts2的整合 核心配置文件与页面 <?xml version="1.0" encoding="UTF-8" ...

  8. Struts2基础学习2

    Struts2基础学习2 项目结构,测试页面与实体类 <%@ page language="java" contentType="text/html; charse ...

  9. struts2 具体学习资料

    [struts2]<package>的配置:https://www.cnblogs.com/ningvsban/p/3734562.html struts2  具体学习资料 :http:/ ...

  10. Struts2的学习链接

    ---- Struts2的学习途径 (downpour) http://www.iteye.com/wiki/struts2/1306-struts2-way-of-learning ---- Str ...

随机推荐

  1. PMBOK十大知识领域是什么?

    PMBOK十大知识领域是:整合管理.范围管理.时间管理.成本管理.质量管理.人力资源管理.沟通管理.风险管理.采购管理.干系人管理. 各用一句话概括项目管理知识体系十大知识领域: 1.整合管理:其作用 ...

  2. luogu P1880石子归并

    石子归并 luogu1880 传送门   noi1995 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得 ...

  3. Adobe Reader 2019 Offline Installer, Free Download - Best PDF Reader

    https://ridnt-b.blogspot.com/2018/01/adobe-reader-2018-free-download.html http://ardownload.adobe.co ...

  4. [BZOJ1776][Usaco2010 Hol]cowpol 奶牛政坛

    Description 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地.而且从每片 ...

  5. vim E437: terminal capability "cm" required

    报错E437: terminal capability "cm" required 解决方法:# export TERM=xterm

  6. UVa 10603 倒水问题

    https://vjudge.net/problem/UVA-10603 题意:三个杯子,倒水问题.找出最少倒水量. 思路:路径寻找问题.不难,暴力枚举. #include<iostream&g ...

  7. 【BZOJ】4012: [HNOI2015]开店

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4012 给出一个$n$个点的树,树上每一个点都有一个值$age$,每条边都有边权,每次查询一 ...

  8. Linux——shell简单学习(一)

    首先来一个小程序,来查看所在目录,以及该目录下的文件 #!/bin/sh # “#!”指定用sh执行shell脚本 #this is to show workstation # “#” 表示注释 ec ...

  9. Spring中bean作用域属性scope

    关键字: spring中属性scope的prototype是什么意思   默认情况下,从bean工厂所取得的实例为Singleton(bean的singleton属性) Singleton: Spri ...

  10. Java 打开Excel,往Excel中存入值,保存的excel格式分别是xls和xlsx

    https://mirrors.cnnic.cn/apache/poi/xmlbeans/release/src/ package Excel; import org.apache.poi.hssf. ...