Struts要点总结(下)

原创 2016年05月31日 14:20:08

*1、如何获取Session

    1)ActionContext获取,返回Map类型
        Map<String,Object> session = ActionContext.getContext().getSession();
    2)ServletActionContext获取,返回HttpSession类型
        HttpSession session =  ServletActionContext.getRequest().getSession();
    3)让Action实现接口SessionAware,之后Struts2在实例化Action之后会自动判断这个Action是否为SessionAware,如果是就会调用实现的方法,将session注入进来给Action。
        public class XXAction implements SessionAware {
            private Map<String,Object> session;
            public void setSession(
                Map<String,Object> session) {
                this.session = session;
            }
        }
    4)这三种方式都可以访问Session,并且他们的数据是一份即共享的。但是如果要使用的话,只选择一种方式即可,不要混合用。推荐使用接口注入的方式,即第三种。
    5)登录成功后,将登录信息记录到Session

2、Struts2对EL表达式的支持

    1)EL表达式需要从4个范围取值,page,request, session,application。(从前往后是取值顺序)
    2)Struts2做了一些处理来兼容EL表达式的取值,即不使用原始的request,而是提供一个request 的包装类,在此类中覆写request的get方法,这样EL表达式在向request取值时,struts2会实际上让它向ValueStack取值

3、通配符

    1)什么是通配符:
        用来简化struts.xml配置的
    2)原理:
        约定大于配置,即我们写的Action类名、JSP文件名满足一定的规则,那么基于这样的规则,我们可以使用通配符来描述。
    3)写一个项目,模拟增加、修改、查询功能。并且让每个Action类、每个页面都具有命名规则:采用“动作+模块”命名。
    4)基于上面的规则,我们使用通配符来做struts.xml的配置,并且比较不采用通配符和采用通配符他们的优劣。
        通配符优点:
            --大大简化配置文件struts.xml的代码
        通配符缺点:
            --创建类名、JSP文件名时,必须满足严格的规则
            --我们通过配置文件,无法直观的看出Action和JSP页面的关系,不直观。

*4、Result原理

    1)Result组件是Struts2中6大核心组件之一,主要是用于做输出的。
    2)Struts2内置了10种类型的Result,这些Result定义在struts-default.xml中,他们都是Java类,都实现了统一的接口Result。
    3)讲以下几种
        使用:用type属性指定result类型  <result name="success" type="stream"></result>
        a、dispatcher
            --用于将请求转发给页面的,是默认使用的Result。
        b、redirectAction
            --用于将请求重定向给Action的
            --用法
                <result name="ok" type="redirectAction">
                    actionName
                </result>
        c、stream
            --以二进制的形式向页面输出数据
        d、json
            --不是struts2内置的Result
            --这种类型的Result特别常用,用于向页面输出json格式的字符串。
            --常用于异步校验

5、stream类型的Result

    1)以二进制形式向页面发送数据(如:使用stream类型的result向页面输出验证码图片
    2)写法
        <result name="ok" type="stream">
            <param name="inputName">
                Action中的属性名
            </param>
        </result>    
        --param的name值,必须是inputName
        --Action中的属性名,对应的属性类型应该是 InputStream类型。

*6、json类型的Result

    1)这种类型的Result不是Struts2默认提供的,需要单独引用包。
    2)使用步骤
        a、导包
        b、将struts.xml中的package继承于json-default
        c、引用json类型Result
            --*使用root方式,指定将Action中某一个属性的值以json字符串传递给页面
            <result name="ok" type="json">
                <param name="root">Action某属性</param>
            </result>
            说明:
                --如果指定的属性是基本类型,直接返回值,比如boolean isMarry = true; json类型的Result将返回true。
                --如果指定的属性是JavaBean,json类型的Result会把这个对象转变成一个json输出,如{"name":"zhangsan","pwd":"123"}
            --使用includeProperties,指定将Action中某几个属性的值以json字符串传递给页面,注意这里多个属性之间以,隔开,并且多个属性都是基本类型的。
            <result name="ok" type="json">
                <param name="includeProperties">
                    Action属性1,Action属性2,...
                </param>
            </result>
            说明:
                --返回的格式如{"a":"A","b":"B"}
                --不写param,此时json类型的Result会把整个Action做成一个json格式的字符串,发送给页面。
                说明:
                    --返回格式如{"name":"zs","pws":"123"}

7、Struts2的UI标签

    1)用途
        --用来生成文本框、密码框、单选框、复选框、下拉选等框体
        --*生成框体之后,可以自动根据请求的Action中的属性值,给框体赋值,这种自动赋值的行为称之为数据的回显。
        --*根据很简单的标签语言,自动生成单选框、复选框、下拉选等选择性框体,并根据请求的Action的属性值,自动的选择数据。
    2)UI标签
        a、简单标签
            --form
                用于生成<form>元素
            --submit
                用于生成submit按钮
            --文本框
                用于生成<input type="text"/>
            --密码框
                用于生成<input type="password"/>
            --文本域
                用于生成<textarea>
            --单值复选框
                用于生成一个<input type="checkbox"/>
        b、复杂标签
            --单选框
                用于生成一组单选框radio
            --复选框
                用于生成一组复选框checkbox
            --下拉选
                用于生成一个select,其中包含多个option

8、拦截器

    1)什么是拦截器?
        --拦截器是Struts2中六大核心组件之一,是用于扩展Action的组件。
        --主要用于处理Action共通的事务,比如记录日志、权限检查、处理事务等等。
    2)拦截器使用步骤
        a、创建拦截器组件(类),实现接口Interceptor
        b、在struts.xml中注册拦截器,注册标记为<interceptor>
        c、在Action的配置中,引用注册好的拦截器,引用标记为<interceptor-ref>
    3)拦截器栈
        --是对拦截器的一个打包,它可以直接被Action引用,当Action引用拦截器栈时,相当于引用了该栈下的所有拦截器。
        --通过标签<interceptor-stack>定义拦截器栈
        --Struts2中默认定义了很多个拦截器栈,其中
            a、basicStack是基础拦截器栈,我们对拦截器引用时,不能丢掉该栈的内容,就是说如果不引用这个栈,Struts2很多功能运行不了。
            b、defaultStack是默认拦截器栈,其内容包含了basicStack的内容,并且比它多,是常用拦截器的一个打包。Struts2通过标签<default-interceptor-ref>来指定默认拦截器栈,我们可以在struts.xml中来改变其默认的引用,但是改变默认引用时千万别忘了要至少包含basicStack。
        --当Action中手动引用一个自定义拦截器时,那么该Action会丢掉对默认拦截器的引用。此时,需要再手动的将默认拦截器加进来。

9、拦截器实例:登录检查

    1)使用拦截器做登录检查,即如果用户没有进行登录,而是直接在浏览器地址栏中输入URL访问Action,需要做检查,未登录则不允许直接访问。
    2)如果模块所有的Action都是这样的逻辑,所以为了避免在每个Action中写重复的代码,我们可以使用拦截器来做这件事。即写一个登录检查拦截器,并且让该模块下所有的Action引用,当访问Action时,代码被拦截器截获,拦截器中判断是否已经登录, 若没有登录则踢回到登录页面,否则允许其访问该Action。
    3)登录模块的Action需要引用这个拦截器吗?
        由于登录功能就是完成用户的登录,因此不需要引用登录检查拦截器来做检查。

10、使用拦截器做文件上传

    1)Struts2自带文件上传的拦截器,能够帮助我们处理文件上传的功能,拦截器是fileUpload,我们可以直接使用。
    2)原理:
        a、当点击提交按钮,提交文件上传表单时,该请求会被fileUpload拦截器截获,此拦截器会将表单中的文件暂时上传到tomcat中某临时路径下。
        b、然后拦截器将此文件的引用传递给请求的Action, Action中需要将此临时文件转移到某固定的位置。
        c、拦截器需要清除掉临时路径下的临时文件。
    3)注意
        需要引入新的包common-io.jar
        
       

版权声明:本文为博主原创文章,未经博主允许不得转载。博主地址:http://blog.csdn.net/daijin888888

Spring框架知识要点总结(第一天)

1.IOC容器创建的2种方式 //首先在applicationContext.xml配置文件中写 //创建方式一: //Spring把所有的配置文件都当做资源 ClassPathResourc...
  • qq_1017097573
  • qq_1017097573
  • 2016年11月22日 11:57
  • 698

Struts要点总结(上)

1、什么是Struts?     Struts是基于MVC的轻量级框架,主要处理请求分发的问题,重心在控制层和表现层。     --基于MVC:实现了MVC,满足MVC的设计思想。     --轻量:...
  • daijin888888
  • daijin888888
  • 2016年05月17日 15:20
  • 352

总结S3C2440的一些知识和概念

知识点主要参考《ARM System Developer’s Guide Designing and Optimizing System Software》的翻译书籍和《S3C2440 datashe...
  • litao31415
  • litao31415
  • 2015年04月20日 21:43
  • 552

统计学知识点总结

商务统计学知识点简单总结
  • JavaChaoCo
  • JavaChaoCo
  • 2016年03月19日 13:28
  • 1224

【Nginx实战】(一)——Nginx要点内容总结

解决问题 单台服务器已经无法承担大量用户的并发访问,必须采用多台服务器协同工作,以提高计算机系统的处理能力和计算强度(集群),满足当前业务量的需求。如何完成同样功能的多个网络设备之间实现合理的业务...
  • u010924834
  • u010924834
  • 2016年08月31日 21:14
  • 576

HTML5移动开发技术要点总结及各事件含义

如果你是一名前端er,又想在移动设备上开发出自己的应用,那怎么实现呢?幸好,webkit内核的浏览器能帮助我们完成这一切。接触 webkit webApp的开发已经有一段时间了,现把一些技巧分享给大家...
  • zxf13598202302
  • zxf13598202302
  • 2016年02月23日 16:56
  • 589

Java 面向对象(基础) 知识点总结I

1、   类与对象的区别,类是对象的模板,对象是类的实例 2、   创建类的语法:class 类名称{},类中由属性及方法组成 3、   对象的创建语法:          · 声明对象:类名称 对象...
  • aikongmeng
  • aikongmeng
  • 2013年05月28日 13:30
  • 2750

Struts2学习总结(1)--基本原理,开发步骤,配置详解

本文包括以下三个部分:1、模拟Struts2框架,了解基本原理。2、Struts2的开发步骤。3、Struts2的配置详解。是学习Struts2的入门知识。里面包含详细的代码示例。...
  • qq_29829081
  • qq_29829081
  • 2016年03月20日 18:55
  • 1503

struts2重要知识点总结(1):

struts2最近又看了一边,每看一次都有一次的收获,这里总结struts2中的一些重要的知识点: action介绍: 1:action类代表着一次请求或者调用,每个请求的...
  • u013730093
  • u013730093
  • 2015年12月12日 22:41
  • 547

jdbc知识点总结

通过jdbc完成单表的crud操作 需求:对分类表进行增删改查操作 技术分析:jdbc 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 jdbc java...
  • ldz1997106
  • ldz1997106
  • 2017年05月30日 12:45
  • 334
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts要点总结(下)
举报原因:
原因补充:

(最多只允许输入30个字)