Struts2学习笔记

struts2学习笔记
1.MVC模式与观察者模式?
2.Struts1简单介绍?
 Struts1的核心是控制器,
 控制器有两部分组成:
  (1)核心控制器(ActionServlet)
  (2)业务逻辑控制器(Action)
 Struts1的缺点:
  (1)支持的表现层技术单一
  (2)与Servlet API严重耦合,难于测试
  (3)代码严重依赖于Struts1 API,属于侵入式设计
3.WebWork简单介绍?
 核心是ServletDispatcher。
 控制器有两部分组成:
  (1)核心控制器(ServletDispatcher)
  (2)业务逻辑控制器(Action)
4.Struts2简单介绍?
 配置文件:
  (1)配置Action的struts.xml文件。
  (2)配置Struts2全局属性的struts.properties文件。
5.Struts2中的验证框架?
 是基于XWork的validator框架。
 校验文件遵守的规则:
 (1)命名规则ActionName-validator.xml,其中ActionName就是要校验的Action的类名。
 (2)校验文件应该同Action类的class文件位于同一个路径下。
 另:struts.xml中Action需要定义input逻辑视图名。
6.Struts2框架的组成部分?
 (1)核心控制器FilterDispatcher
 (2)业务控制器
 (3)用户实现的业务逻辑组件
7.Struts2中的常量定义?
 定义方式:
  (1)在struts.properties
   例:key=value
  (2)在struts.xml
   例:<constant name="" value="" />
  (3)在web.xml
   例:

   < init-param >
    
< param-name > name </ param-name >
    
< param-value > value </ param-value >
   
</ init-param >

  Struts2常量加载顺序:
  (1)struts-default.xml(struts2-core.jar)
  (2)struts-plugin.xml(struts2插件jar文件中)
  (3)struts-xml
  (4)struts.properties
  (5)web.xml
8.Struts2的配置文件是从上到下处理,父包应该在子包前面定义。
9.Struts2中的命名空间配置?
 (1)不支持为单独的Action设置命名空间,通过为包指定namespace属性来为包下面的所有的Action指定共同的命名空间。
10.通配符的应用?
 (1) <action name="*Action" class="" method="{1}">
  </action>
 (2) <action name="*Action" class="test.{1}Action">
  </action>
 (3) <action name="*_*" class="test.{1}Action" method="{2}">
  </action>
 (4) <action name="*">
   <result>/{1}.jsp</result>
  </action>
11.类型转换器
 转换器须实现接口或实现类:
  interface:TypeConverter(OGNL)
   method:convertValue
  Class:
   <1>DefaultTypeConverter(OGNL)
    method:convertValue
   <2>StrutsTypeConverter(Struts)
    method:convertFromString
      convertToString
 转换器分类:
 (1)局部类型转换器
  格式:
   <1>ActionName-conversion.properties。
 (2)全局类型转换器
  格式:
   <1>xwork-conversion.properties。
12.Struts2中的拦截器?
 为拦截器指定参数:
 (1)在拦截器定义时
  <interceptor />
 (2)在使用拦截器时动态分配
  <interceptor-ref name="">
   <param name></param>
  </interceptor-ref>
13.Struts2国际化?
 加载资源文件的方式:
  (1)指定struts.custom.i18n.resources的值
  (2)包范围资源文件
   pakeage_language_country.properties(放于包路径下,该包及子包都可以使用。)
  (3)Action范围资源文件
   ActionName_language_country.properties(和Action同目录)
  (4)临时指定资源文件(存放于/WEB-INF/classes)
   <1>
    <s:i18n>
     <s:text />
    </s:i18n>
   <2>
    <s:i18n>
     <s:form />
    </s:i18n>
 Action中加载资源文件的顺序:
  (1)Action范围的资源文件
  (2)Action父类范围的资源文件
  (3)Action实现的接口范围的资源文件
  (4)如果Action实现接口ModelDriven,则对于getModel()方法返回的model对象,重新执行第(1)步。
  (5)查找当前包下baseName为package系列的资源文件。
  (6)查找当前包的父包,直到最顶层包。
  (7)查找struts.custom.i18n.resources指定的资源文件。
  (8)输出key字符串。
 JSP中加载资源文件的顺序:
  两种情况:
  (1)使用<s:i18n />作为父标签的<s:text />,<s:form />
   <1><s:i18n />指定的文件
   <2>struts.custome.i18n.resources
   <3>输出key字符串
  (2)不使用<s:i18n />作为父标签的<s:text />,<s:form />
   <1>struts.custome.i18n.resources
   <2>输出key字符串
14.OGNL中的集合操作?
 取子集:
  (1)?:取出所有符合选择逻辑的元素。
  (2)^:取出符合选择逻辑的第一个元素。
  (3)$:取出符合选择逻辑的最后一个元素。
15.Lambda(λ)表达式?
16.Struts2主题和模板?
 主题:
  Struts2中的主题:simple, xhtml, css_xhtml, ajax。
  (1)通过设定UI标签的theme属性
  (2)通过设定UI标签外围Form标签的theme属性
  (3)通过取得page会话范围内的命名为theme的属性
  (4)通过取得request中的theme
  (5)session中的theme
  (6)application中的theme
  (7)struts.ui.theme常量
  注:设定在前面的会屏蔽后面的。
 模板加载:
  struts.ui.templateDir来指定模板目录。
  加载顺序:
   (1)web应用中的template/xhtml(此为设定的主题)/name.ftl
   (2)classpath:/template/xhtml/name.ftl
 通过修改struts.ui.templateSuffix常量的值,改变Struts2的默认模板技术。
  Struts.ui.templateSuffix常量值:
  (1)ftl:基于FreeMarker模板技术
  (2)vm:基于velocity模板技术
  (3)jsp:基于jsp模板技术
17.FreeMarker模板?
 模板结构:
  (1)文本
  (2)注释,<#-- -->
  (3)插值,${...}或#{...}
  (4)FTL指令:FreeMarker指令,类似于HTML标记。名字前加#区分,不会输出。
 FTL指令规则:
  (1)开始标签<#directivename parameters>
  (2)结束标签</#directivename>
  (3)空标签<#directivename parameters/>
  其中标签前面的#符号也可以变成@, 如果该指令是一个用户指令而不是系统内建指令时,应将#符号改为@ 符号。
 插值规则:
  (1)通用插值,${expr}
  (2)数字格式化插值,#{expr}或#{expr; format}
 表达式:
  语法:
  (1)转义字符
   /":双引号(u0022)
   /':单引号(u0027)
   //:反斜杠(u005C)
   /n:换行(u000A)
   /r:回车(u000D)
   /t:Tab(u0009)
   /b:退格键(u0008)
   /f:Form feed(u000C)
   /l:<
   /g:>
   /a:&
   /{:{
   /xCode:直接通过4位十六进制数来指定Unicode码,输出该Unicode对应的字符。
   注:特殊格式:
    ${r"要输出的文本"}
  (2)集合和Map连接,用"+"运算符。
  (3)算术运算符,+、-、 *、/、%
   内建int函数。
   eg.${1.1?int}
  (4)比较运算符
   =(==)、!=、>(gt)、>=(gte)、<(lt)、<=(lte)
  (5)逻辑运算符
   &&、||、!
  (6)内建函数
   @字符串函数
    html:对字符串进行HTML编码
    cap_first:使字符串第一个字母大写
    lower_case:将字符串转换成小写
    upper_case:将字符串转换成大写
    trim:去掉字符串前后的空白字符
   @集合函数
    size:取序列中元素的数目
    int:取数字的整数部分
  (7)空值处理运算符
   !:指定缺失变量的默认值(variable!或variable!defaultVlaue)
   ??:判断某个变量是否存在(variable??)
  (8)运算符优先级
   <1>一元运算符:!
   <2>内建函数:?
   <3>乘除法:*、/、%
   <4>加减法:+、-
   <5>比较:<、>、<=、>=(lt、lte、gt、gte)
   <6>相等:=(==)、!=
   <7>逻辑与:&&
   <8>逻辑非:||
   <9>数字范围:..
 FreeMarker常用指令:
  (1)if指令
   <#if condition>
   <#elseif condition>
   <#else>
   </#if>
  (2)switch, case, default, break指令
   <#switch value>
    <#case refValue1>
    <#break />
    <#default>
   </#switch>
  (3)list,break指令
   <#list sequence as item>
    ...
    <#break />
   </#list>
   循环变量:
    item_index:当前变量的索引值
    item_has_next:是否存在下一个对象
  (4)include指令
   <#include filename [options]>
   options:
    parse:指定被包含文件是否作为FTL文件来解析,默认为true
    encoding:指定包含页面时所用的解码集
  (5)import指令
   <#import path as mapObject>
   将path指定的模板文件中的所有变量,放到一个名为mapObject的Map对象中。
  (6)noparse指令
   <#noparse>
   </#noparse>
  (7)escape, noescape指令
   <#escape identifier as expression>
    ...
    <#noparse>...</#noparse>
   </#escape>
  (8)assign指令
   <1><#assign name=value [in namespacehash] />
   <2><#assign name [in namespacehash]
      </#assign>
  (9)setting指令
   <#setting name=value />
   value:
    <1>locale:该选项指定该模板所用的国家/语言选项
    <2>number_format:指定格式化输出数字
    <3>boolean_format:指定两个布尔值的语法格式,默认值是"true, false"
    <4>date_format, time_format, datetime_format:格式化日期的格式。
    <5>time_zone:指定时区
  (10)macro、nested、return指定
   <#macro name paramList>
    <#nested loopvarList>
    <#return>
   </#macro>
 使用FreeMarker作为Struts2的视图技术:
  1.在FreeMarker模板中使用Struts2标签:
   (1)将系统所需的标签库定义文件(*.tld)复制到Web应用中。
   (2)在Web.xml文件中启动JSPSupportServlet。
    <servlet>
     <servlet-name>JSPSupportServlet</servlet-name>
     <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
    </servlet>
   (3)在FreeMarker模板中使用assign指令导入标签库
    <#assign s(@此为引用前缀)=JspTagLibs["/WEB-INF/Struts-tags.tld"]/>
   (4)在FreeMarker模板中增加了标签库定义后,就可以在FreeMarker模板中使用Struts2标签了。
    eg.
    <@s.form action="list">
     <@s.textfield label="" name=""/>
     <@s.submit value="" />
    </@s.form>
  2.解析模板中的变量
   Struts2解析FreeMarker的顺序:
    (1)FreeMarker模板内建的变量
    (2)ValueStack中的变量
    (3)ActionContext中的变量
    (4)HttpServletRequest范围的属性
    (5)HttpSession范围的属性
    (6)ServletContext范围的属性
   FreeMarker模板的内建变量:
    (1)stack 代表ValueStack  eg.${stack.findString("ognl expr")}
    (2)action 代表刚刚执行过的Action实例
    (3)response,res 代表HttpServletResponse实例
    (4)request,req 代表HttpServletRequest实例
    (5)session 代表HttpSession实例
    (6)application 代表ServletContext实例
    (7)base 代表用户请求的上下文路径
18.Struts2整合Spring?
 整合策略:
  (1)将Action实例交给Spring窗口来负责生成,管理。利用IOC特性。
  (2)利用Spring插件的自动装配方式,当Spring插件创建Action实例后,立即将Spring容器中对应的业务逻辑组件注入Action
  实例。
19.Struts2中的文件上传?
 上传原理:
  1.表单的enctype属性?
   指定表单数据的编码方式。
    <1>application/x-www-form-urlencoded:这是默认编码方式,只处理表单域中的value,将表单域的值处理成url编码方式。
    <2>multipart/form-data:二进制编码。将文件域指定文件的内容也封装到请求参数里。
    <3>text/plain:当表单的action是mailto:URL时处理方便。适用于直接通过表单发送邮件的方式。
  2.错误信息?
   (1)struts.message.error.file.too.large
   (2)struts.message.error.type.not.allowed
   (3)struts.messages.error.uploading 未知错误

 

   

 
 

 

 


  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值