SSH框架(Struts2)

来源:互联网 发布:中文手写识别 算法 编辑:程序博客网 时间:2024/05/19 17:51

一.Struts2框架入门

1.框架(Framework)是一个提供可重用的公共结构的半成品。WebWork的创始人说:框架的强大之处不是源自它能让你做什么,而是它不能让你做什么

2.主流框架技术

(1)Struts框架 是Java Web框架的标准 也是MVC设计模式的一个优秀实现

Struts定义了通用的Controller(控制器),通过配置文件隔离了Mode(模型)和View(视图),以Action的概念对用户请求做了封装,使代码更清晰易读。Struts还提供了自动将请求的数据填充到对象中以及页面标签等简化编码的工具。

(2)Hibernate框架是一个持久化的框架,负责简化对象数据保存到数据库中读取数据并封装到对象的工作,通过简单的配置和编码替代JDBC繁琐的程序代码。

(3)Spring框架是一个轻量级的框架,使现有的JavaEE技术更易用和促进良好的编程习惯。它主要作为依赖注入容器和AOP实现存在,还提供了声明式事务,对DAO层的支持等简化开发的功能,Spring还可以很方便的与Struts、Hibernate等技术集成。

3.MVC设计模式:M指的是Model(模型),表示程序处理业务逻辑的部分,JavaBean充当了Model角色,V指的是View(视图),表示程序负责展示数据、获得用户输入的部分,JSP充当了View的角色,C指的是Controlle(控制器),负责从V接受用户输入,调用M,返回数据到V,保证M和V不会直接交互,从而使一方更改时另一方无需跟着修改,Servlet充当了C的角色

4.Struts2的入门案例:由用户点击首页的超链接,跳转到成功页面

开发步骤:

(1)创建Web项目

(2)添加Struts2的Jar包到项目中

(3)配置Struts2的核心过滤器

(4)定义处理用户请求的Action类。

(5)编写Struts2的配置文件

(6)编写视图文件

5.Struts2用于处理用户请求,就是一个请求发出到响应的过程

 1)启动项目,struts.xml文件被加载了

 2)helloworld.action发送请求

 3)查找struts.xml中同名的action,调用Action类

 4)Action类中执行execute方法,返回逻辑视图名

 5)根据逻辑视图名转发到对应的视图jsp文件

 6)生成响应内容,也就是显示视图文件的内容


 二.Struts2的和新配置

1.常量配置 struts.xml文件中对常量进行配置

语法:<constant name=”常量的名称” value=”常量值”/>

放在<struts>节点中

常用的设置 =

(1)设置默认的编码集

<constant name="struts.i18n.encoding" value="gbk"/>

(1)设置使用开发模式

 <constant name="struts.devMode" value="true"/>

(2)设置action请求的扩展名

 <constant name="struts.action.extension" value="abc"/>

2.包配置

语法:<package name=”名称” namespace=”命名空间” extends=”继承其他包”>

        //包含action

      </package>

属性说明

name:可以随意取,但是不允许重复

namespace:在访问某个action时,路径应该是namespace+action的名称

extends:指定该包继承自其他包

2.包含配置 struts.xml文件中内容过多时,可以将配置文件进行分离,使用include包含进来即可

     <struts>

   <include file="part1.xml"/>

</struts>

2.Action:是用来处理一次用户请求的对象,是Struts2的核心类

实现方式:

(1)POJO:不需要继承任何其他的类,独立完成action的功能,包含了一个构造方法和一个execute方法,execute方法有返回值,用于指向下一个页面的result。

(2)实现Action接口

public static final String SUCCESS=”success”;

public static final String NONE=”none”; 返回null或空值

public static final String ERROR=”error”;

public static final String INPUT=”input”;

public static final String LOGIN=”login”;

(3)继承ActionSupport类

5.配置Action:

语法:<action name=”名称” class=”action对应的类” method=”action调用的方法”>

         //处理结果

      </action>

属性说明:

name:action的名称,在一个包中不能重复,属于必填项,用于用户请求的匹配

class:实现action的类,必须是完整的类名(包名+类名)

method:指定action调用的方法,默认为execute()方法

5.Action访问Servlet API

(1)通过ActionContext类访问

(2)实现接口,访问Servlet API

(3)通过ServletActionContext类实现访问

6.Action处理请求参数

(1)属性驱动

a.直接编写属性进行数据传递

b.使用对象的属性来进行数据的传递

(2)模型驱动,实现ModelDriven接口,重写getModel方法

7.Result的配置

语法:<result name=”逻辑视图名” type=”视图资源的类型”></result>

属性说明:

 name:逻辑视图的名称,默认值是success

 type:指定返回的视图资源的类型的输出结果,默认值是dispatcher,常用的类型主要是dispatcher(转发)、redirect(重定向到URL)、redirctAction(重定向到Action)、chain(链)、stream(流)


三.Struts2的拦截器

1.拦截器:是Struts2的核心组成部分,可以动态拦截Action调用的对象

(1)拦截器在struts.xml中配置

语法:<interceptor name=”拦截器的名称” class=”拦截器的实现类”>

       </interceptor>

(2)拦截器栈 拦截Action时需要有多个拦截动作时使用

语法:<interceptors>

          <interceptor name=”” class=””> </interceptor>

          <interceptor name=”” class=””> </interceptor>

          <interceptor-stack name=”栈名”>

            <interceptor-ref name=”栈名”/>

            <interceptor-ref name=”拦截器名称”/>

          </interceptor-stack>

      </interceptors>

(3)默认拦截器 对一个包下所有Action使用相同的拦截器,当Action没有设置拦截器时使用的拦截器称之为默认拦截器

语法:<default-interceptor-ref name=”拦截器或栈的名称”/>

2.自定义拦截器:自己开发拦截器,自己制定拦截动作,需要直接或间接实现Interceptor接口,该接口有三个方法

(1)init:在拦截器被创建是调用

(2)destroy:在拦截器被销毁时调用

(3)intercept:用来添加真正执行拦截工作的代码

注:实际开发中一般不需要实现init和destroy方法,所以常用继承拦截器类AbstractInterceptor来实现


四.Struts2的标签库

1.Struts2的标签库,分为两种:普通标签和UI标签

编写标签的步骤:

(1)编写taglib指令:uri为struts2核心包中的struts-tags.tld文件,所有的标签都来自于这个文件,前缀为s

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

(2)编写具体的标签

2.普通标签:又分为两种:控制标签和数据标签

(1)控制标签

a.负责分支语句标签

   语法:<s:if test=”条件表达式”>

            //条件成立是执行的代码

         </s:if>

         <s:elseif test=”条件表达式”>

           //条件成立是执行的代码

         </s:elseif>

         <s:else>

          //条件成立是执行的代码

         </s:else>

b.负责循环语句的标签

   语法:<s:iterator value=”被循环迭代的数据” var=”当前循环对象的引用” begin=”循环的起始位置” end=”循环的结束位置” step=”步长” status=”循环过程的状态”>

            //循环体

          </s:iterator>

(2)数据标签

a.用于输出的标签

   语法:<s:property value=”需要输出的属性值” escape=”是否忽略HTML代码” default=”当输出的属性值为null,则显示这个值”/>

b.超链接的标签

  语法:<s:a href=”链接地址” namespace=”” action=””}>jjj</s:a>

        <s:a namespace=”” action=””}>hhh</s:a>

c.调试的标签

   语法:<s:debug></s:debug>

d.包含的标签

   语法:<s:include value=”被包含的地址”>

          <s:param name=”参数名”>参数值</s:param>

        </s:include>

3.UI标签:UI标签是基于主题和模板的

主题:Struts2提供了4种主题


五.OGNL表达式和值栈

1.OGNL:是一个独立的开源项目,被Struts2引用进来做表达式语言,功能比EL表达式更强大,全称是对象图导航语言

实现功能:

(1)对象方法的调用

(2)调用静态方法和访问静态属性值

(3)支持赋值操作和表达式串联

(4)访问OGNL的上下文和ActionContext

(5)操作集合对象

2.OGNL结构的三个要素:表达式、根对象、上下文环境

(1)表达式:Ognl提供了getValue方法,方法的第一个参数就是表达式,由表达式指定Ognl要“做什么”,表达本身是个字符串,带有语法含义。

(2)根对象:Ognl的操作对象,其他对象与之关联

(3)上下文环境:context 用于Ognl的取值在上下文环境中进行 上下文环境本身是个Map类型的容器

3.OGNL对方法的调用

(1)访问对象方法

语法:Ognl.getValue(“方法名”,对象名);

(2)访问静态方法和属性

语法:@类的全名(包名.类名)@方法名()/属性名

注:访问前必须开启“访问静态方法的支持”

<constant name="strtus.ognl.allowStaticMethodAccess" value="true"/>

4.值栈:Action数据存储的地方,作为一个数据中转站,用于在前台、后台之间传递数据,值栈的生命周期和request是一致的

值栈的获取方式:

(1)request中获取值栈

ValueStack vs=(ValueStack)ServletActionContext.getRequest().getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);

(2)ActionContext中获取值栈

ValueStack vs=ActionContext.getContext().getValueStack();

5.值栈的内部结构:

(1)ObjectStack:对象栈 用ArrayList定义

(2)ContextMap:Map栈 是一个Map类型的集合

6.值栈在开发中的应用:在页面与Action进行数据交换时,Struts2会将对象自动存储在值栈中

(1)属性驱动:每次访问Action时,将Action的属性对象自动保存在值栈中

(2)模型驱动:当实现了ModelDriven接口时,自动将model对象保存在值栈中

实际开发中最常用的从值栈中取数据还是使用EL表达式


原创粉丝点击