JavaEE:Struts2笔记

struts2的特点:
  基于filter.
  采用分离关注(类似于aop思想),把众多的任务分别交给不同的组件各自完成.
  没有formbean,直接用实体携带数据.
  action是原型的.它是线程本地化的(threadlocal),
  action是pojo,不需要和servlet api和struts2 api进行耦合.
注意点:
  在struts2中action属于模型层

  没有FormBean类


一、struts2开发步骤:

1.导struts2的jar包,拷贝当前工程的lib目录下
  复制struts2解压目录/apps/struts2-blank-2.1.8.1.war/WEB-INF/lib/*.jar到工程下

2.在web.xml中配置struts2的Filter
<filter>
    <filter-name>action</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>action</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

3.写一个自已的action类,不用继承任意struts的类,方法名要为execute,返回要为字符串
  真实开发中自已的action类必须继承com.opensymphony.xwork2.ActionSupport类

4.在src下新建struts.xml文件,并配置
  (1)导入dtd约束及配MyEclipse的自动提示
      复制struts2-core-2.1.8.1.jar/struts-2.1.7.dtd/约束定义到自已的struts.xml文件中
  (2)配置xml文件
  <struts>
     <constant name="struts.action.extension" value="扩展名"/>   //改变请求的扩展名,可不设
     <constant name="struts.devMode" value="true"/>              //设置开发模式,用于自动加载struts.xml与国际化资源文件,上线运行时删除此模式
     <package name="任意名称空间名" namespace="/名称空间" extends="struts-default">   //名称空间可以没有
         <!--配默认的action类,可不配-->
         <default-class-ref class="com.opensymphony.xwork2.ActionSupport"/>
         <!--配默认的action访问引用,可不配 -->
         <default-action-ref name=""/>
  <action name="访问类别名" class="自已的action类全名" method="action中方法名">
              <resulte name="action方法返回名" type="dispatcher">/要转向的jsp页</resulte>  //name与type属性可以没有
         </action>
         <action name="访问类别名">
              <resulte>/要转向的jsp页</resulte>
         </action>
         <!--配动态action,实际开发中常用的-->
         <action name="访问类别名_*" class="自已的action类全名" method="{0}">   //0对应前面*,*指jsp页中超链接传过来的参数:访问类别名_action中的方法名
              <resulte name="action方法返回名" type="dispatcher">/要转向的jsp页</resulte>  //name与type属性可以没有
         </action>
     </package>
     <!--将其他配置的xml引入此xml中-->
     <include file="xml文件名"/>
  </struts>

5.配置jsp页中的访问链接
/名称空间/访问类别名

/名称空间/访问类别名.action


二、校验

可以使用外部资源文件的方法,资源文件名必须要与类名一样,且在同一包下

1.让自已的action类继承ActionSupport类,并加上validate方法
public void validate(){
   判断代码;
   //将错误信息存入ActionSupport类中一集合属性中
   addFieldError("错误键名","错误信息");   //1.属性错误,在jsp页中不用加错误显示标签
   addFieldError("错误键名",getText("资源文件中键名"));
   addActionError("错误信息");             //2.其他错误,要在jsp而中加入显示出错信息的标签:
   addActionError(getText("资源文件中键名"));
}

2.在struts.xml中配错误跳转页
<result name="input">/显示错误的jsp页面</result>   //放在该类action内
注意:3和4只选其中一个就可

3.在要进行验证的方法前加上注解:
@SkipValidation

4.在validate方法后面加上Do方法名:
public void validateDo方法名(){}     //方法名首字母要大写,指调用该方法时调用验证

public void validate方法名(){}       //方法名首字母要大写,指调用该方法时调用验证

5.排除不用验证的方法:
在struts.xml中配置:
<interceptor-ref name="defaultStack">
    <param name="validation.excludeMethods">方法名1,方法名2</param>

</interceptor-ref>


三、struts2标签

<%@taglib prefix="s" uri="/struts-tags"%>

1.form表单:
<s:form action="action类别名" method="post" namespace="/该action所在的空间名">   //空间名为空时可不设

2.文本框:
<s:textfield name="bean类别名.属性名" label="文本框前的显示名"/>    //如果action类实现了ModelDriven类,则不用加bean类前缀

3.submit按钮:
<s:submit>显示名</s:submit>
<s:submit value="显示名"/>

4.debug超链接,查看过程用
<s:debug />

5.数据回显
<s:property value="属性名" default="默认值" escape="true或false"/>   //escape设定该属性名对应的特殊值输出时是否进行转义

6.文件上传
<s:file name="属性名" label="任意文本" />

7.设置属性值到指定域中
<s:set var="" value=""/>

8.将指定值放在
<s:push value=""/>

9.javabean使用
<s:bean name="javabean类全名" var="给外部引用的名">
    <s:param name="参数名" value="值"/>
    <s:property value="参数名"/>
</s:bean>

10.循环标签iterator
<s:iterator value="集合名" var="集合中类别名" status="别名">   //status指定集合中可以被访问到数
   <s:property value="#集合中类别名.类中属性名"/>
   <s:property value="#别名."/>
</s:iterator>

11.if-else标签
<s:if test="#">

12.url标签,跟在<a>标签href属性中使用
<s:url action="action类_方法名" namespace="/此action所在的空间名">
    <s:param name="属性名" value="属性值"/>   //在超链接后跟上参数
</s:url>

13.i18n标签
<s:i18n name="包名.资源文件名">       //没有扩展名
   <s:text name="资源文件中的key"/>   //将key对应的值显示在jsp页
</s:i18n>
或者
<s:text name=""资源文件中的key/>      //按当前系统语言选择相应资源文件,必须要从action中跳转到jsp页

14.复选框


15.下接选框
<s:select list="存了对象的List集合" listKey="id属性" listValue="name属性"/>
<s:select list="存了对象的Map集合" listKey="key" listValue="value"/>

16.单选
<s:radio name="属性名" list="Map集合/>     //list属性一般不用

17.双级联动
<s:doubleselect name="省类别名" list="装着省对象的List集合" listKey="id属性" listValue="name属性" 
                doubleList="装着市类的List集合" listKey="id属性" listValue="name属性" doubleName=""/>

18.格式化标签


四、文件上传:

1.jsp页面中设置表单头,并添加一个上传组件
<form enctype="multipart/form-data">          //表单头
<s:file name="属性名" label="任意文本" />     //上传组件

2.自已的action类中
定义一个File类型的属性
定义几个属性用来存放文件名及文件扩展名,如果上传多个,要将这些属性都设成数组

3.配置上传类型限制
在action标签下加上
<interceptor-ref name="defaultStack">
    <param name="fileUpload.allowedExtensions">.扩展名1,.扩展名2</param>
    <param name="fileUpload.allowedTypes">text/html,text/plain,image/pjpeg</param>   //允许上传的文件类型
    <param name="fileUpload.maximumSize">允许上传的文件最大的字节数值</param>

</interceptor-ref>


五、文件下载

1.在struts.xml文件中加入流拦截器:
<resoult name="" type="stream">
    <param name=""></param>
    <param name=""></param>
</result>

2.


六、配拦截器

1.令牌拦截器,防止表单重复提交:
(1)在action节点中加入
<interceptor-ref name="token">
     <param name="excludeMethods">方法名</param>
</interceptor>
(2)在jsp页中生成令牌
<s:token/>

2.请求耗时拦截器,在网页出结果前显示等待页面
(1)在action节点中配拦截器
<interceptor-ref name="execAndWait"/>
(2)在action之外配全局的跳转页
<global-results>
    <result name="wait">/要显示的等待页面</result>
</global-results>
(3)要jsp页中配头
<meta http-equiv="refresh" content="2;url=<s:url/>"/>

3.注册自定义拦截器
<interceptors>
    <interceptor name="类别名" class="自定义拦截器类全名"/>

</interceptors>


七、OGNL表达式语言

集合的投影与过滤:
<s:iterator name="">
    <>
</s:iterator>

3.Map集合属性:
<s:textfield name="map["key名"].值"/>    //jsp页中

12.主题

<constrol />


八、国际化

1.准备国际化资源文件,放在action类同包下
基本名_en_US.properties
基本名_zh_CN.properties          //zh为语言解码,CN为国家或地区解码
基本名_ja_JP.properties
基本名_zh_TW.properties

2.在struts.xml中配全局的n18l拦截器
<constant name="struts.custom.i18n.resources" value="gloabl-message" />

3.在jsp页中
<s:textfield key="国际化资源文件中的key名">      //会根据操作系统自动选择资源文件
<s:select name="request_local" 
          list="#{
                   @java.util.Locale@CHINA:@java.util.Locale@CHINA.getDisplayName(@java.util.Locale@CHINA),        //返回该语言的英文简写,如zh_CN:返回该项语言的显示名称,如中文
  @java.util.Locale@TAIWAN:@java.util.Locale@TAIWAN.getDisplayName(@java.util.Locale@TAIWAN),
  @java.util.Locale@US:@java.util.Locale@US.getDisplayName(@java.util.Locale@US),
          @java.util.Locale@JAPAN:@java.util.Locale@JAPAN.getDisplayName(@java.util.Locale@JAPAN)
          }"
          label="选择语言"
          value=""

/>


九、validate验证框架

1.写一个ValidateAction-validate.xml:
复制命名空间,加入如下验证
<validators>
    //显示错误
    <field name="属性名">                         //此属性名为表单中要验证的属性名
        <field-validator type="requiredstring">
            <message>显示的错误信息</message>     //不用国际化资源文件时
            <message key="资源文件中的key"/>      //用国际化资源文件时
        </field-validator>
    </field>
    //配置表单输入的长度验证
    <field-validator type="stringlength">
            <param name="minLength">5</param>
            <param name="maxLength">8</param>
            <message key="资源文件中的key" />
    </field-validator>
    //配置表单密码框中两次输入是否一样验证
    <validator type="expression">
        <param name="expression">属性1 == 属性2</param>   //此属性名为表单中要验证的属性名
        <message>错误消息</message>
    </validator>
</validators>

2.在struts.xml中action节点中配上出错时转向的页面
<action name="" class="" method="">
    <result>/验证成功转向的jsp页</result>
    <result name="input">/验证失败时转向的jsp页</result>
</action>


十、struts2与spring集成
1.加入jar包:
spring.jar、commons-logging.jar、struts2-spring-plugin-2.1.8.1.jar + struts2一些必须jar包

2.在spring配置文件中
<bean id="类别名" class="action类全名" scope="prototype">    //必须要有prototype
</bean>

3.在struts配置文件中
<action name="" class="类别名">     //这里的类别名要和srping配置文件中的别名一样

4.在web.xml中配置,保证web服务器启动时,直接完成spring容器的初始化.
<!-- 通过上下文参数指定spring的配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring配置文件名/param-value>
</context-param>
<!-- 保证web服务器启动时,直接完成spring容器的初始化. -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值