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,所以现在感觉非常手生。好了切入正题。

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,如需转载请自行联系原作者

相关文章
|
SQL 前端开发 Java
国庆复习mysql,html/css,jdbc,Servlet,Jsp,Struts2
国庆复习 国庆放了7天,回来之后对mysql,html/css,jdbc,Servlet,Jsp,Struts2进行了复习。
334 0
|
前端开发 Java 关系型数据库
国庆复习mysql,html/css,jdbc,Servlet,Jsp,Struts2
国庆放了7天,回来之后对mysql,html/css,jdbc,Servlet,Jsp,Struts2进行了复习。
|
API 存储
08 Struts2 访问Servlet API
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxdeng/article/details/81710008 Struts2 提供了三种方式访问本地Servlet API 1.
1582 0
|
缓存 安全 Java
聊聊Servlet、Struts1、Struts2以及SpringMvc中的线程安全
前言 很多初学者,甚至是工作1-3年的小伙伴们都可能弄不明白?servlet Struts1 Struts2 springmvc 哪些是单例,哪些是多例,哪些是线程安全? 在谈这个话题之前,我们先了解一下Java中相关的变量类型以及内存模型JMM。
2114 0
|
Web App开发 Java 应用服务中间件
|
Java API
Java Web之Struts2访问Servlet API
方法一:直接获取 Map类型 Map request = (Map)Actioncontext.getContext().get("request"); Map session = ActionContext.getContext.getSession(); Map application = ActionContext.getContext.getApplication(); 比如使用:request.put("name",name); 可以在Jsp页面获取 说明:为struts2的标签。
1025 0
|
前端开发 Java JavaScript
struts/Servlet,action转到jsp后,路径问题(struts2,jsp路径,action路径,action跳转,相对路径,绝对路径)
问题:使用struts2,如何处理action的路径?还有,在action转到的jsp中,如何写js,css,图 片的路径?(例如访问 http://localhost/project/listUser.action后转到http://localhost/project/user /listUser.jsp,这时候浏览器还是停留在http://localhost/project/addUser.action。
1207 0