zoukankan      html  css  js  c++  java
  • struts2与servlet的耦合

      struts2框架有一套好用且强大的标签,并且很好的封装性,实现了表单标签,逻辑标签,显示标签,

    Ajax标签(基于dojo,json)。个人觉得使用起来比较顺手,也简化了许多后台实现,例如:防止表单重复提

    交的token,在struts2中只要适用标签和拦截器就可以实现,不需要在action中写任何的验证性代码。为项目

    的开发提供了便利,但是一切事物都有两面性。struts2有许多细节需要注意,有些标签的使用我有时也搞不清

    楚,明明在这个页面里可以使用,但是换个页面就不好使了,例如实现时间和日期选择的标签,dojo文本编辑

    器的标签等等。而且值得注意的是这些标签的使用还会随着主题标签的变化而变化,标签在使用时次序颠倒也会

    影响实现。所以对于不熟悉struts2标签的朋友来说,用这个开发是挺郁闷的。但是放弃标签不用,又不可取。

    因为初学的人会认为struts2的页面传值就是借助struts2的标签实现的,与之前struts1的request,response模

    式有别。struts2是对request,response模式进行了封装,从而借助标签实现action自动获取,这个框架的源码

    我也一直没看。所以不能确定其内部实现,不过也不影响我讲这个主题struts2与servlet的耦合。这个实现就使

    得我们可以用struts1的传值方式,来使用struts2。使得与servlet技术的耦合。

      

    struts2与servlet的耦合有三种实现方案:

     

    1.ActionContext

      在xwork2.jar的com.opensymphony.xwork2.ActionContext中。

      这个是最推荐的一种实现。action不需要实现接口,只需要引入这个目录就可以。

    ActionContext.getContext().put("zhangsan","helloworld");

     

      只需要一句代码就可以放入response中,页面直接用EL表达式${requestScope.zhangsan}获取。取代了标签

    <s:property value="zhangsan"/>


    2.servletActionContext

      在struts2-core.jar中,org.apache.struts2.ServletActionContext

      同样action不需要实现接口,只需要引入这个目录就可以

    HttpServletResponse response = ServletActionContext.getResponse();

      实现了response对象,然后只需要像往常一样适用.

    Cookie cookie = new Cookie("username", this.getUsername());
    cookie.setMaxAge(1000);
    response.addCookie(cookie);


    3.ServletRequestAware,ServletResponseAware接口实现

       首先实现接口,然后实现request或response对象。

    package com.test.action;

    .

    public class LoginAction extends ActionSupport implements ServletRequestAware {

    private static final long serialVersionUID = 3936066275134469754L;
    // private HttpServletResponse response;

    private HttpServletRequest request;

    @SuppressWarnings("unchecked")
    public String execute() throws Exception {
    .
    }

    @SuppressWarnings("unchecked")
    public String hello() throws Exception {

    .

    request.setAttribute("zhangsan","helloworld");

    .

    }

    public void setServletRequest(HttpServletRequest request) {

    this.request=request;
    }

    }

       这个方法不推荐,配置麻烦,影响可读性和测试型。没有利用struts2中的封装实现。

     

     转自:http://www.cnblogs.com/shiyangxt/archive/2009/01/18/1377990.html

     

     

  • 相关阅读:
    RDD的五个属性
    惰性求值的概念
    大数据shuffle的理解
    简单说明hadoop和hbase的异同
    Linux 下命令有哪几种可使用的通配符?分别代表什么含义?
    linux命令知识点复习
    >/dev/null 2>&1
    JAVA内存泄漏和内存溢出的区别和联系
    Linux各个目录的作用
    JVM标准参数-server与-client参数的区别
  • 原文地址:https://www.cnblogs.com/xingyun/p/2338273.html
Copyright © 2011-2022 走看看