zoukankan      html  css  js  c++  java
  • 三、WebWork(Struts2 的前身)

    此文是对以下文章的学习笔记:http://www.blogjava.net/moxie/archive/2006/10/20/76375.html

    一、WebWork

      Struts2 是 WebWork 的升级,跟 Struts1 无关。

      WebWork 是 Java 的一个开源框架,功能和 Struts 类似。之后被 Apache 吸收,并在此基础上推出了 Struts2 框架。

      1. 过滤器fiter 和拦截器 interceptor 的区别

        a:filter 是 servlet,jsp里面的东西,应该说是属于规范了。而拦截器是struts的东西,不通用。

        b:请求到后台:get/post -> filter -> Interceptor -> Interceptor/filter 里面的跳转 -> 指定的 jsp/action/servlet

        c:Interceptor 只能拦截 action 请求,而 filter 是万能的,是请求就能拦截。

        d:filter 是链式处理的,也就是一个 filter 完后,如果还有过滤,那就得继续。顺序根据web.xml里面的顺序来。

        e: filter 是 servlet包里面的一个接口,写一个filter,只要实现它,然后实现它的几个方法就算一个filter了。

      2:filter 配置(题外话):

    <filter>
      <filter-name>loginFilter</filter-name>
      <filter-class>cn.com.webinfo.web.filter.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
      <filter-name>loginFilter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
    public class UserLoginFilter implements Filter {
      public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
           HttpServletResponse res = (HttpServletResponse) response;
        // 此时所有的配置文件都还没有进来,只启动了项目。所以获得对象或者jsp,都需要通过路径、cookies获得
        String seerviceUri=requestUri.substring(contextPath.length());//路径
        Cookie cookies[]=req.getCookies();//cookies
        // 通过 spring 获得 class 对象
        ClientManager clientManager=(ClientManager)WebApplicationContextUtils.getWebApplicationContext(req.getSession().getServletContext()).getBean("clientManager");
        
        chain.doFilter(req, res);
      }
      public void destroy() {
    	// TODO Auto-generated method stub
      }
      public void init(FilterConfig arg0) throws ServletException {
    	// TODO Auto-generated method stub	
      }
    }

    二、WebWork 结构

      1. WebWork 结构:Xwork1 + WebWork2

      2.执行流程:

      3. WebWork 组成(webwork.xml):Action + Reusults + Interceptors:

        a.Action:

        b.Results:配置文件中,自定义的字符串,用来指示Action执行之后,如何显示执行结果。

              Result Type 表示如何及用哪种视图技术展现结果,由此WebWork支持多种视图技术。

              而且这些技术可以互相切换,不需要修改Action。

        c.Interceptors:Action 之前、之后 执行。将功能用插拔的方式注入到 Action 中。

    三、WebWork实例:

      1. 安装jar包

        

      2. 配置前端控制器:FilterDispatcher(web.xml-filter)

        

      注:①:这里的前端控制器会接受任意的请求(默认是将.action结尾的URL)映射为WebWork的Action请求。

        ②:我们可以在webwork.properties文件中,设置我们自己的后缀名,多个后缀名可以用逗号隔开。

          例如:webwork.action.extension=action,do

      3. 配置 xwork.xml

       

      4. index.jsp  

      

      5. cc.action.LoginAction 

         

        ①:它实现了Action接口,获得login.jsp页面传入的数据即输入的用户名

        ②:没有调用任何一个 JavaServlet 的 API

        ③:值堆栈和表达式语言来实现参数的传递(action的参数传递给jsp)

      5. success.jsp

      

        ①:将通过表达式语言,取得Action执行之后暴露出来的数据对象

        ②:在Jsp页面中,默认“altSyntax”是开启的。它是用来解决标签库中的字符串和表达式语言混淆的问题。

          所以,作为变量的表达式语言应该放在%{}中,否则WebWork会把它当作字符串处理

      6. 结果

       

    四、ValueStack( 值堆栈 ) 和 EL( 表达式语言 )

      1. ValueStack:用来放置Java对象(例如:Action对象、Model对象等)的堆栈。

      2. EL(Express Language):①:用来存储获取(set()get())ValueStack中存放的对象的数值。

                      ②:直接访问类的静态数据,调用静态方法。

      3. 两者都遵循OGNL规范。

      4.  WebWork为每一次请求构建一个ValueStack。

         并将所有相关的数据对象(例如:Action对象、Model对象等)放到ValueStack中。

         再将ValueStack暴露给视图页面,这样页面就可以直接访问后台处理生成的数据。

      5. 查找数值的方式:我们给的操作指令是”name”,ValueStack会从上而下,遍历栈里面的对象。

      6. context map:

        ①:它是一个放置值堆栈上下文数据的对象

        ②:通过符号“#“再加上对象的名称,可以访问这些数据(只可以访问)

        ③:一些JavaServlet相关的数据都放在这个容器中

        因此:可以直接通过表达式语言去访问request、attribute、session、application里的数据。

        例如:用property标签库打印出所有请求参数的数据,代码如下:<ww:property value="%{#request}"/>

      7. “top”是ValueStack里面的关键字,通过它可以找到ValueStack中最上面的那个对象。

        语法:valueStack.findValue("top"))

      8. 表达式语言调用形式:

        ①:调用基于JavaBean规范的get和set方法之外

        ②:可以调用一般的Java方法(这是需要使用方法的全名,并传入需要的参数)

        ③:可以直接访问Java类的静态字段和静态方法

    五、IoC(Inversion Of Control)容器

      IoC = 倒置翻转 = 依赖注入 = 依赖倒置原理

      1. 用来为对象组装其依赖的对象的容器;也就是说对象本身不用关心它依赖的对象(可以是组件或者服务,反正就是提供业务方法的对象)的创建,初始化,生命周期等,而是由容器来控制。

      2. 官方推荐Spring来作为WebWork的IoC容器

        Spring 的方式:

        ①:拷贝Spring依赖的所有jar文件

        ②:配置web.xml文件

          <listener>

              <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

            </listener>

        ③:在webwork.properties中设置WebWork对Spring的支持:webwork.objectFactory = spring

        ④:可以在webwork.properties中设置Bean组件的默认组装方式。

          默认是按照Bean的名称,可以选择按照类型、构造函数、自动选择等方式。

     六、总结:

      1. 多视图支持:只需要修改xwork.xml中的result,无需修改action

      2. Action的数据验证(3种方式):

        ①:为action绑定验证文件,在验证文件中定义验证规则

        ②:在Action中实现com.opensymphony.xwork.Validateable接口的validate

        ③:在Action的执行方法中,编写代码来验证

         注: a. webwork 又一些常规的验证可用(如:字段必填,邮箱地址等)

           b. 也可以在 视图层验证(如:js),但是这个就无关webwork的验证了。

           c. 前两种验证方法,参考:http://www.cnblogs.com/MissRabbit/p/6595741.html

      3. 数据类型转换:

        ①:基本数据类型,webwork会自动处理

        ②:如果数据是一个集合,或者需要特定转化,就要在文件(ClassName-conversion.properties)中定义转换规则

          参考:http://www.cnblogs.com/xiaolongSunny/p/4655546.html

      4. Action除了执行execute()方法外,还可以执行其他的方法

        条件:这些方法必须是无参数

        访问格式:actionName!methodName.action,例如user!doAdd.action,调用user Action类的doAdd方法

      5. Action链(Action Chaining

        http://www.blogjava.net/jnbzwm/archive/2010/11/19/338495.html

      6. 多模块

        ①:xwork.xml 可以继承(包含) 其他的xwork.xml(例如: <include file="webwork-default.xml"/>

        ②:package的继承:

          http://www.cnblogs.com/ningvsban/p/3734562.html

          http://www.jianshu.com/p/c3092b28ab11

      7. Action的Model Driven:

        http://blog.csdn.net/li_tengfei/article/details/6098145

     

  • 相关阅读:
    Jeecg代码搬砖圣地第五篇(页面布局)
    Jeecg代码搬砖圣地第四篇(页面标签规则)
    Jeecg代码搬砖圣地第三篇(Excel导入导出)
    小程序前端
    javascript 新版本的语法(ECS6)
    nginx下用getallheaders
    wampser 配置debug需要的参数
    Suhosin(php的保护工具)
    php中empty使用的情况
    写出健壮的代码
  • 原文地址:https://www.cnblogs.com/MissRabbit/p/6559543.html
Copyright © 2011-2022 走看看