Struts2

惯例广告一发,对于初学真,真的很有用www.java1234.com,去试试吧!

1、拷贝Struts2所属文件
     1.1struts.xml
     1.2lib jar包
     1.3web.xml添加复制
     <filter>
         <filter-name>struts2</filter-name>
         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
     </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

2、HelloWorld
     2.1struts.xml
     <package name="default" namespace="/" extends="struts-default">
        <action name="hello">
            <result>
                 /Hello.jsp
            </result>
        </action>
     </package>
     
     2.2创建Hello.jsp
     <title>HelloStruts2</title>
     <body>
           Hello Struts2 <br>
     </body>
     
3、开发模式struts.xml
     <constant name="struts.devMode" value="true" />
     constant常量
     value设置为true

4、Struts流程
     浏览器-Web容器-Struts过滤器-Action-jsp-返回
     好处:请求与结果分开

5、package
     解决命名冲突问题

6、namespace
     namespace决定了action的访问路径,默认:“”,可以接收所有路径的action。

7、class
     <action name="" class="">
     class:action对应的处理类

     public class name extends ActionSupport {
    
     @Override
     public String execute() {
          return "success";
     }     }
     extends ActionSupport需要继承ActionSupport
     execute()执行execute()方法

8、路径问题
     struts2中的路径问题是根据action的路径而不是jsp路径来确定,不要用相对路径
     <%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
     %>
     
     <base href="<%=basePath%>" />

9、动态调用DMI
     一个action配置多个方法
     9.1.通过配置文件struts.xml中action的method属性指定调用方法,如:
        <action  method="调用方法名">;
     9.2在URL中动态指定调用方法,使用感叹号“!”将action名和调用方法名分割开,如:
        http://localhost:8080/Struts2_DMI/user!add

10、通配符
     10.1约定优于配置
     10.2优先级精确大于通配,通配先后顺序匹配

     <package name="user" extends="struts-default" namespace="/">
          <action name="user_*" class="com.test.action.UserAction" method="{1}">
                <result>/user_{1}.jsp</result>
          </action>
     </package>
     
     public class UserAction extends ActionSupport
{
 public String add()
 {
  return SUCCESS;
 }
 public String delete()
 {
  return SUCCESS;
 }
 public String update()
 {
  return SUCCESS;
 }
 public String select()
 {
  return SUCCESS;
 }
}

      <a href="user_add.action">添加页面</a><br>
      <a href="user_delete.action">删除页面</a><br>
<a href="user_update.action">修改页面</a><br>
<a href="user_select.action">查找页面</a><br>

11、Struts配置文件
     struts2-core->org.apache.struts2->default.properties
     Struts默认编码uft-8

12、简单验证addField
     addFieldError("","");添加错误信息
     <s:fielderror fieldName="" theme=""/>取得错误信息 theme主题可写可不写
     fieldErrors 验证属性的值
     actionErrors action错误
     引入标签<%@taglib url="/struts-tags" prefix="s" %>
     <s:debug></s:debug>debug
     <s:property value=""/>取value stackt和stack context属性的值

13、访问web元素IOC控制反转方式

14、包含模块
     <include file="">include包含相当于把文件复制

15、DefaultAction
     默认Action主要处理访问页面不存在时。

16、result结果类型
     16.1dispatcher默认结果类型,用来呈现JSP页面 服务器端跳转
     16.2redirect将用户重定向到一个已配置好的URL 客户端跳转
     16.3chain 将action和另外一个action链接起来 forword
     16.4redirectAction 将用户重定向到一个已定义好的action

17、result跳转另一个包时
     <result type="chain">
          <param name="actionName"></param>
          <param name="namespace">/</param>
     </result>

18、全局的<result>
     <global-results>
    <result name="error">/Error.jsp</result>
    <result name="invalid.token">/Error.jsp</result>
    <result name="login" type="redirectAction">Logon!input</result>
     </global-results>
     跨包引用extends

19、动态结果集
      <!-- 表示往值栈里面取值 在该类中r是action的属性 而r是传入的数值所以是动态结果集 -->
      <result>${r}</result>
      public String execute() throws Exception {
           //根据传入数据动态决定跳转的jsp
           if(type == 1) r="/user_success.jsp";
           else if (type == 2) r="/user_error.jsp";
           return "success";
      }

20、带参结果集
     <result type="redirect">/user_success.jsp?t=${type}</result>
     <s:property value="#parameters.t"/>(可以获取到值)

21、struts OGNL对象图导航语言可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。
     21.1访问值栈中的action的普通属性<s:property value="username"/>
     21.2访问值栈中action的普通方法<s:property value="m()" />
     21.3访问值栈中对象的普通属性(get set方法)<s:property value="user.age"/>只有传,才能构造
     21.4访问值栈中对象的普通方法<s:property value="password.length()"/>
     21.5访问静态方法<s:property value="@com.bjsxt.struts2.ognl.S@s()"/>前面@类名后面@静态方法名
     <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>常量设置真静态方法才能访问到
     21.6访问静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/>前面@类名后面@静态属性名
     21.7访问Math类的静态方法:<s:property value="@@max(2,3)" />      
     21.8访问普通类的构造方法:<s:property value="new com.bjsxt.struts2.ognl.User(8)"/>
     21.9访问List:<s:property value="users"/>
     21.10访问List中某个元素:<s:property value="users[1]"/>
     21.11访问List中元素某个属性的集合:<s:property value="users.{age}"/>
     21.12访问List中元素某个属性的集合中的特定值:<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/>
     21.13访问Set:<s:property value="dogs"/>
     21.14访问Set中某个元素:<s:property value="dogs[1]"/>没有顺序,取不到值
     21.15访问Map:<s:property value="dogMap"/>
     21.16访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/>
     21.17访问Map中所有的key:<s:property value="dogMap.keys"/>
     21.18访问Map中所有的value:<s:property value="dogMap.values"/>
     21.19访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/>
     21.20投影(过滤):<s:property value="users.{?#this.age==1}[0]"/>this循环当中的每个对象
     21.21投影:<s:property value="users.{^#this.age>1}.{age}"/>
     21.22投影:<s:property value="users.{$#this.age>1}.{age}"/>
     21.23投影:<s:property value="users.{$#this.age>1}.{age} == null"/>
     21.24[]:<s:property value="[0].username"/>从第0个位置开始    

22、标签
     22.1通用标签
          property获取数据值,并将数据值直接输出到页面中
          set用于定义一个变量,通过此标签可以为所定义的变量赋值,还可以设置变量的作用域(application、request、session)
          bean用于创建并实例化一个javabean对象,并可以通过param标签对其赋值
          include用于包含一个JSP页面或Servlet,只有一个属性value,必选属性。可以通过param传递参数
          param主要对参数赋值,也可以当作其他标签的子标签。
          debug

     22.2 控制标签
          ifelseifelse流程控制标签
          iterator迭代数据的标签
          subset从集合截取一段标签

     22.3UI标签
          theme主题 把所有主题定义为simple;fielderror特殊处理;自己控制其他标签的展现

23、BBS准备(设计约定、编码规定)
     23.1库名:项目名
     23.2表名
          前缀:t_或_ 表名:驼峰标识和model一致
     23.3字段名
          字段名与属性名保持一致(尽量不要起名和数据库命名冲突)userId
     23.4包名
          建议用层来划分包com.163.model、action、service
     23.5Action
          Action以Action结尾
     23.6Dao
          Dao以Dao结尾
     23.7*-*.jsp
     23.8/
     23.9/admin
     23.10package *action *adminAction

24、项目开发顺序
     24.1建立界面原型
     24.2建立struts.xml
          namespace
          package
          action
          result
          修改界面原型
          测试
     24.3建立数据库
     24.4建立model
     24.5建立service(juit测试)
     24.6开发

25、声明式异常处理
     25.1在Action中进行导演映射
     25.2在package中进行全局异常映射
     25.3使用继承共用异常映射
     25.4Struts中异常处理由拦截器实现

26、I18N
     26.1原理
          ResourceBundle和Locale的概念     
          资源文件
     26.2Struts的资源文件
          Action-Package-App级
          一般只用App

27、Struts拦截器
     拦截器动态地作用于Action和Result之间。

28、日期转换
     <s:data name="d" format="yyyy/MM/dd HH:mm:ss"/>format格式化日期的样式

 

posted @ 2013-07-03 11:02  cnmotive  阅读(321)  评论(0编辑  收藏  举报