• 欢迎访问ByWei.Cn,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,加入百味博客 QQ群
  • 已升级为最新版主题,并将持续优化改造中,支持说说碎语功能,可像添加文章一样直接添加说说,博客主题升级啦
  • 感谢您百度求点赞啊!百度网址
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏百味博客吧
  • 博主热烈欢迎 软件定制开发 联系:http://www.bywei.cn

struts2完全学习文档

企业架构 bywei 9年前 (2011-03-30) 1009次浏览 0个评论 扫描二维码

编译问题:
java(jdk)编译设置:window-per**-java-instelled jar
java Compiler 编译设置与 jdk 的配置一样
Tomcat 使用的 jdk 与编译设置的 jdk 也应该是一致的

Acion 的配置:
1.Struts 的开发模式设置<constant name="struts.devMode" value="true"/>
2.Struts 中 web.xml 的配置文件的设置:<filter>…</filter><filter-mapping>…</filter-mapping>
3.为 jar 文件建立源文件 doc 时,按 f1 可以导航到相关的文档
4.为配置文件设置提示 为 xml catalog 配置相关的 dtd 文件。
5.运行机制:客户端-tomcat-web.xml-filter-filter class-action-result
6.Namespace:
   (1)’/’->/index.action
   (2)’/**’ ->/**/index.action
   (3)’/**/**’ ->/**/**/index.action
   为对应的模块名。
  namespace 不写,将默认接受所有的 action
  result 若没有写名字,将默认为’success’.
  extends:
    从另外一个包来继承,声明一个主要配置,然后所有的都继承该包.
7.action 返回:当 struts.xml 中没有调用方法时,默认调用 execute()方法。
  struts.xml 中的 action 中没有 class 是默认调用 ActionSupport 的 execute();
  Action 中有默认常量:SUCCESS ERROR INPUT 等。
  可以继承 implements Action / extends ActionSupport
8.Action 方法调用:
  (1)struts.xml 中的 action 的属性指定 method="方法名"
  (2)struts.xml 中的 action 不配置属性 method,而在 url 中使用 ‘!方法名’(dmi 动态方法调用)来动态调用。
9.通配符的配置:
  使用“*”代表所有字符,使用“{1 开始的数字调用第几个*}”
  使用法则:约定优于配置(提前把文件名约定好)
10.action 接收参数三种方法:
  (1)(常用)通过 Action 属性来接收参数,属性必须写 getter/setter 方法。属性自动转换类型。调用时:url?属性=值&属性=值
  (2)(常用)通过 DomainModel(域模型)接收参数,使用 Model 生成 getter/setter,调用时:url?model.属性=值&model.属性=值
     –(上)通过 Dto(数据传输对象)接收参数,使用同 DomainModel
  (3)通过 ModelDriven 接收参数,在 Action 中 implements ModelDriven<Model>,然后又在 Action 中 new 一个 Model(必须自己 new Model()),最后再继承 getModel()方法。
11.中文问题解决:
  struts.xml 中使用 i18n 配置,<constant name="struts.i18n.encoding" value="字符编码"/>  –i18n internationalization 
  配置文件参考:struts-core.jar/org.apache.struts2/default.properties
12.简单数据校验
   在 action 中配置一个逻辑 然后调用 this.addFieldError("属性","错误信息");在 Struts 配置错误返回页面。
   页面使用 struts 标签<s:fielderror fieldName="属性名" theme="simple"/>
   打印错误信息:<s:property value="errors.name[0]"/> 错误信息保存在一个数组中。
   <s:debut></s:debug>显示调试信息
13.Action 访问 web 元素 request,session,application,HttpRequest,HttpSession
   (1)request=(Map)ActionContext.getContext().get("request");
   session=ActionContext.getContext().getSession();
   application=ActionContext.getContext().getApplication();
    Action 赋值:
   request.put("属性","值");
   session.put("属性","值");
   application.put("属性","值");
   jsp 取值:
    <s:property value="#request.属性"/>
   (2)(常用)Action implements RequestAware,SessionAware,ApplicationAware (这也是 IOC/DI 的实现),定义 Map<String,String> request session 和 application.
   (3)在 Action 中定义
      private HttpServletRequest request;
      private HttpSession session;
      private ServletContext;
   Action 取值:
      request= ServletActionContext.getRequest();
      session=request.getSession();
      application=session.getServletContext();             
   (4)Action implements ServletRequestAware
      private HttpServletRequest request;
      @override
      setServletRequest(**){request=request;session=request.getSession();}
14.模块包含
   <include file="其他的 xml 路径"/>
15.默认 Action
   <default-action-ref name="默认 Action 名"/>

Result 的配置:
1.类型 type:
  (1)dispatcher 服务器端跳转到视图
  (2)redirect 客户端跳转
  (3)chain 服务器端跳转到 Action 和视图,<result type="chain">Action 前面不要加"/",有参数 param(actionName,namespace)两个属性(跳转到其他包)</result>;
  (4)RedirectAction 跳转到其他 Action, 地址栏显示跳转后的 Action 地址
2.全局结果集
  <global-results>
        <result name="全局返回类型">/other.jsp</result>
  </global-results>
3.向结果集传递参数
  (1)url?type=typeValue
  (2)Action 中声名该属性 type
  (3)result 中取值<result>/url?type=${type}</result>
  (4)jsp 页面取值:<s:property value="#parameters.type"/>O

本文由 程序员百味 http://www.bywei.cn/blog 编写

OGNL(对象 Graph 导航语言)表达式和 struts 标签(Action 中演示变量:name 属性,model 实体类)
——->OGNL 表达式
1.<s:property value="值棧中的属性名(name)"/>
2.<s:property value="model.name"/>
3.<s:property value="model1.model2.name"/>
4.<s:property value="name.length()"/> 调用普通方法
5.<s:property value="model.method()"/>调用普通方法
6.<s:property value="method()"/>调用普通方法
7.struts.xml 配置:<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
  <s:property value="@cn.bywei.struts2.ognl.Class@staticMethod()"/> 访问值棧中的静态方法
  <s:property value="@cn.bywei.struts2.ognl.Class@name"/> 访问值棧中的静态属性
8.<s:property value="new cn.bywei.strus2.ognl.Class()"/>调用构造方法
9.访问集合:
  (1)<s:property value="List"/> 访问所有
     <s:property value="List[index]"/> 访问 index 的属性集合
     <s:property value="List{name}[index]"/> 访问属性集合中的一个
  (2)<s:property value="Set"/>
  (3)<s:property value="Map"/>
     <s:property value="Map[‘key’]"/>  /   <s:property value="Map[\"key\"]"/>
     <s:property value="Map.keys"/>  <s:property value="Map.values"/>
     <s:property value=&quot
;Map.size()"/>
10.过滤(投影)
<s:property value="model.{?#this.age==1}.{age}"/> age=q 的 model, this 指定拿到的当前对象
<s:property value="model.{^#this.age>1}.{age}"/> age>1 的开头的那个
<s:property value="model.{$#this.age>1}.{age}"/> age>1 的结尾的那个
11.通过盏值访问
<s:property value="[index].name"/> 代表盏值中的 index 个对象的属性 name
——–>struts2 标签
12.<s:property value="值" default="默认值" escape="html 标签格式化(true/false)"/>
   从 request 取值:<s:property value="#request.name"/>
   从 Action 中取值:<s:property value="#name"/>
13.<s:set value="值" var="变量" scope="默认为 Action.(application,session,request,page,action)"/>
14.<s:bean name="类路径" var="变量">
        <s:param name="类中的属性" value="’设定新值’"/>
   </s:bean>
15.(少用)<s:include value="被包含的文件"/> 包含静态英文文件
   <s:set var="incpage" value="’/include.html’"/>
   <s:include value="%{#incpage}"/>
16.<s:fielderror fieldName="fielderror.text" theme="simple"/>
   其中的 tehme 设置:(1)css 样式表解决 (2)xhtml 解决(->struts-core.jar/template/fielderror.ftl –>struts.xml 中配置:<constant name="struts.ui.theme" value="自定义的 theme"/>)
17.<s:if test="表达式">
     <s:elseif test="表达式"></s:elseif>
     <s:else></s:else>
   </s:if>
18.<s:iterator value="集合可自定义 map:#{1:’value1′,2:’value2′}" var="变量" status="status(count,index,even(偶数),odd(奇数),first,last)"
19.UI 标签(操作复杂,与 javaScript 结合困难,所以不常用)
   theme 主题标签

异常处理
1.try{}catch()finally{}  
2.声明式异常.通过 throws()把异常往上抛,交给 Struts2 来处理
  –>struts.xml 中配置:
     <result…../>
       <exception-mapping result="error" exception="java.sql.SQLException(异常类型)"/>
       <result name="error">/error.jsp</result>
3.全局异常映射
  –>struts.xml 中配置:
   <global-results>
      <result name="errot" >/error.jsp</result>
   </global-results>
   <global-exceptiong-mappings>
       <exception-mapping result="error" exception="java.lang.Exception(错误类型)"></exception-mapping>
   </global-exception-mappings>

国际化
1.Local 获取本地信息,ResourceBundle 绑定本地 properties 文件
  建立 message_zh_CN.properties
2.struts 国际化
  (1)类级别 properties 文件必须和对应的类名相同(Class_zh_CN.properties)
     包级别 properties 文件在包下
     全局 properties,必须在 struts.xml 中配置:<constant name="struts.custom.i18n.resources" value="配置文件名"/>
  (2)jsp 页面获取:<s:property value="getText(‘配置文件对应的 key’)"/>
  (3)传递参数动态显示:
     –在 properties 文件中配置{0}占位符
     –jsp 页面获取:
       <s:text name="配置文件中的 key">
           <s:param value="值"/>
       </s:text>
动态语言切换:使用连接<a href=?request_loale=zh_CN >中文</a>

控制重复提交
1.在 form 表单中设置 method="post"
2.在表单中设置<s:token></s:token>  token-令牌
  struts.xml 中配置:
      <interceptor-ref name="defaultStack"/>
      <interceptor-ref name="token"/>
      <result name="invalid.token">/errot.jsp</result>
类型转换
1.Action 默认已经做了类型转换
2.日期转换:<s:date name="名字" format="yyy/MM/dd HH:mm:ss"/>
3.其他类型的转换,如:list,set,map 以及自定义的类型转换少用

本文由 程序员百味 http://www.bywei.cn/blog 编写

 


百味博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:struts2 完全学习文档
喜欢 (0)
[微信扫一扫]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址