Struts2知识梳理

一:MVC思想

将一个应用分为三个基本部分 Model View Controler,
让这三个部分以最低耦合的方式进行协同工作,
从而提高应用的可拓展性及可维护性,充分体现了“高内聚,低耦合”

二:基本操作步骤

导入jar包
配置web.xml (核心过滤器 StrutsPrepareAndExecuteFilter)
创建HelloAction 并继承ActionSupport类     重写execute()方法
配置struts.xml

三:struts工作流程

1:通过action的name属性值访问到Action类
2:在Action类中重写execute方法,并返回一个字符串
3:将该字符串在result的name属性匹配,然后进入相应的需求页面

四:几种传值方式:

1:对象传值
2:get/set 方法传值【属性驱动】
3:实现ModelDriven 接口传值

五:action的实现方式:

1:继承ActionSupport类   重写execute方法
2:实现Action接口  重写execute方法
3:普通的Java类   定义一个名为  execute的方法

六:解决表单重复提交问题

第1步:<!-- 动态调用 -->
        <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
第2步:type="redirectAction" 重定向

七:将map/List数据以String字符串的形式,json的方式输出

    注意struts.xml文件配置
    extends="json-default"
    type="json"
    <param name="map">map</param>

八:拦截器:Interceptor

1:Action拦截(一个一个拦)
    1:定义拦截器
    2:xml中配置拦截器
    缺点:只能拦截某一个Action的部分请求,如果需要大面积拦截,就会代码冗余
2:全局拦截(一下全拦完)
    解决代码冗余,最好的办法就是将指定的Action统一一起拦截
    与Action拦截的区别就在于xml文件的配置,其它地方都不用改变
    1:把自定义的拦截器放到拦截器栈里边
    2: 为当前包中的所有Action配置默认拦截器栈
          会出现的问题
          2.1:返回值问题,因为全局拦截将当前包【package name="myinterceptor"】中
              所有的Action都拦截掉,但拦截器的返回值只有固定的一个【fail】
              那么此时,在所有被拦截的Action中都需要配置与拦截器返回值相同的result,怎么办呢?
              可以将此返回值【fail】配置为全局结果集
          2.2:包中的某些个别Action又不希望被拦截 譬如登录,退出,注册等等
             解决方案1:--》将这些功能直接放入jsp页面【直接访问相关页面】    不经过Action
                          需注意:不要轻易暴露实际操作性的jsp页面地址
             解决方案2:--》将这些不需要拦截的Action单独放入另一个package中

3:方法拦截【为了方便演示,struts.xml文件已恢复初始状态】
     如果一个Action中有很多方法,拦截器默认会将这些方法全部拦截掉,
     而我们有时候是不需要把全部拦截的,此时用方法过滤拦截
    MethodFilterInterceptor

    <param name="includeMethods">add,edit</param>
    includeMethods --》指定拦截某些方法【多个方法用逗号隔开】

    <param name="excludeMethods">add</param>
    excludeMethods --》指定不拦截某些方法

九:表单验证:

    分为三种,客户端格式验证,服务端格式验证,数据库中数据有效性验证。
    但基于客户端的格式验证很不安全,如果软件安全系数要求比较高,通常需要在服务端进行验证

1:基于手工的表单验证
    1.1:验证Action的所有方法
         可能会出现的问题:Action中可能会存在多个方法,那么每个方法执行之前都会调用验证方法。。。
    1.2:验证Action的指定方法
         只需要将重写的validate方法改成  validate+要验证的方法名 即可【注意:方法名首字母大写】

2:基于xml的表单验证
    2.1:验证Action的所有方法
        基于配置文件的验证方式,可以减少Java代码的编写
        如果要验证的Action是“LoginAction2”【必须继承ActionSupport】那么配置文件名要命名为“LoginAction2-validation.xml”
        初始的文件头一定要写上
    2.2:验证Action的指定方法
        只需要将配置文件名改为类似如下格式:
        ActionClassName-ActionMethodName-validation.xml

十:文件上传下载

1:文件上传
    1.1:上传单个文件  
        form表单必写属性:enctype="multipart/form-data"
        LoginAction必写属性:
                文件字段的属性名+FileName
                文件字段的属性名+ContentType
        此时 完成的功能是: 
                只是将文件上传到一个临时目录中而已,
                如果要实现将文件上传到指定路径,则需要对那个临时路径进行相关操作
        接下来,就需要把临时文件复制到指定目录:
                File destFile=new File("D:\\"+photoFileName);
                FileUtils.copyFile(photo, destFile);
        到此为止,简单的上传流程就结束了,但是,上传路径通常不是指定到别的盘符,而是跟着本项目去指定
    1.2:上传多个文件
        只需要将与文件相关的属性改为数组形式即可

2:文件下载  
    读取服务器端的指定文件,将此文件以输出流的方式响应给客户端
    Action的默认返回类型【struts.xml文件中】是“转发dispatcher”,必须改成“流”的形式向客户端输出

小白第一次写博客,有什么不足的地方欢迎来提醒纠正 >_< ~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值