Struts要点总结(下)

*1、如何获取Session

    1)ActionContext获取,返回Map类型
        Map 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 session;
            public void setSession(
                Map 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类型 
        a、dispatcher
            --用于将请求转发给页面的,是默认使用的Result。
        b、redirectAction
            --用于将请求重定向给Action的
            --用法
                
                    actionName
                

        c、stream
            --以二进制的形式向页面输出数据
        d、json
            --不是struts2内置的Result
            --这种类型的Result特别常用,用于向页面输出json格式的字符串。
            --常用于异步校验

5、stream类型的Result

    1)以二进制形式向页面发送数据(如:使用stream类型的result向页面输出验证码图片
    2)写法
        
            
                Action中的属性名
            
        
    
        --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字符串传递给页面
            
                Action某属性
            

            说明:
                --如果指定的属性是基本类型,直接返回值,比如boolean isMarry = true; json类型的Result将返回true。
                --如果指定的属性是JavaBean,json类型的Result会把这个对象转变成一个json输出,如{"name":"zhangsan","pwd":"123"}
            --使用includeProperties,指定将Action中某几个属性的值以json字符串传递给页面,注意这里多个属性之间以,隔开,并且多个属性都是基本类型的。
            
                
                    Action属性1,Action属性2,...
                
            

            说明:
                --返回的格式如{"a":"A","b":"B"}
                --不写param,此时json类型的Result会把整个Action做成一个json格式的字符串,发送给页面。
                说明:
                    --返回格式如{"name":"zs","pws":"123"}

7、Struts2的UI标签

    1)用途
        --用来生成文本框、密码框、单选框、复选框、下拉选等框体
        --*生成框体之后,可以自动根据请求的Action中的属性值,给框体赋值,这种自动赋值的行为称之为数据的回显。
        --*根据很简单的标签语言,自动生成单选框、复选框、下拉选等选择性框体,并根据请求的Action的属性值,自动的选择数据。
    2)UI标签
        a、简单标签
            --form
                用于生成
元素
            --submit
                用于生成submit按钮
            --文本框
                用于生成
            --密码框
                用于生成
            --文本域
                用于生成