`
wangliang_gz
  • 浏览: 3309 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类

将struts2的Action变成二级分发控制器以减少对strus2标签的依赖

阅读更多

struts2是MVC框架,其中org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter过滤器是前端控制器

使用Action类模拟二级分发控制器来实现减少对s2标签的依赖,这样的话对模板原型的破坏会比较小,实现方式如下


public class _Base extends ActionSupport{

private String action ="";

private String message ="";

public void setAction(String action){this.action=action;}

public String getAction(){return this.action;}


public void setMessage(String message){this.message=message;}

public String getMessage(return this.message);



public String dispatcher(){

String _action = this.getAction();


String _invokeAction ="doIndex";


if(StringUtils.isBlank(_action)){

}else{

_invokeAction = _action;

}


String _result = SUCCESS;

try{

Object obj = org.apache.commons.beanutils.MethodUtils.invokeMethod(this, _action, new Object[]{});

if(obj!=null){

_result = obj.toString();

}

}catch(Exception e){

this.setMessage(e.getMessage());

}

return _result;

}


public String doIndex(){

return SUCCESS;

}


}

 

 

 



public class Login extends _Base{


private String username="";

private String password="";


public void setUsername(String username){this.username=username;}

public String getUsername(){return this.username;}

public void setPassword(String password){this.password=password;}

public String getPassword(){return this.password;}




public String doLogin(){

 try{

  //invoke service

  return "home";

 }catch(Exception e){

 

 }

retrun INPUT;

}


public String doLogout(){

 //clear session

return SUCCESS;

}




}

 

 




struts.xml


<action name="Login" class="Login" method="dispatcher">

<result name="success" type="freemarker">/WEB-INF/content/Login.ftl</result>

<result name="input" type="freemarker">/WEB-INF/content/Login.ftl</result>

<result name="home" type="redirectAction">Home</result>

</action>

 

 

 


Login.ftl


<html><head><title></title></head><body>




<form>

<input type="hidden" name="action" value="doLogin"/><!--此隐藏域作为分发器的分发标志-->

<input type="text" name="username" value="${username}"/>

<input type="text" name="password" value="${password}"/>

<input type="submit" value="登陆"/>

</form>




</body></html>

 

 



登出的链接则产生 Login.do?action=doLogout


此思想来源于php的mvc实现,在php中实现MVC的框架一般都是有一个前端控制器如

index.php,通过传参调用不同的控制器和action,如

index.php?ctrl=Login&action=defaultView

index.php?ctrl=Login&action=doLogin

index.php?ctrl=Login&action=doLogout

 

 

 

分享到:
评论
18 楼 akunamotata 2011-02-21  
wangliang_gz 写道
aoliwen521 写道
完全不明白楼主的用意,对于减少struts2标签依赖是什么含义?

就是不用<s:form>这种标签,采用原始的html。



本来就可以不用struts2自带的标签啊?不明白你的意思。
17 楼 wjf0334 2011-02-21  
不明白楼主此意何在?
16 楼 wangliang_gz 2010-06-18  
wangdgsc 写道
把struts2当成struts1来搞,呵呵,

主要目的是为了不引入struts2的标签库,struts2的标签库功能太强大了,使得后台代码的封转会泄露到模板上。简单的说吧好似又回到了jsp时代,jsp中混合着coding。如果使用了s2标签那么可以理解为模板混合着模板语言(el或者ognl)。
虽然s2的标签库和混合在jsp中的coding相比而言还是弱,但是它足够强大的话就会导致模板上的东西过于胖而架空后台代码的coding。mvc中模板应该是被动的。

15 楼 wangdgsc 2010-04-16  
把struts2当成struts1来搞,呵呵,
14 楼 gogole_09 2010-04-16  
wangliang_gz 写道
lydawen 写道
struts2可以使用通配符或指定方法。
1、直接指定方法(不依赖配置)
login.action!method
login!method.action

2、通配符
struts-config.xml
<action name="*path" class="" method="{1}">

不明白楼主用意

动态方法调用我是禁用的,Action统配我也是去掉的,因为我认为一个物理Action类声明成两个逻辑Action意义不大
如LoginAction类---->LoginIndex.action----对应execute
LoginAction类---->LoginDoLogin.action----对应doLogin
我采用的方法是用java编程取代框架的配置,脱离框架的管理。




   如果是维护人员看了这个文章,估计要吐血了。  改10个相关的action的逻辑,要在10个文件里跳转, 起码我是会疯掉……
    楼主认为的意义不大的地方,作为开发人员的我在某些情况下认为这样的意义挺大,比如开发效率上……
13 楼 wangliang_gz 2010-04-15  
我只是想一些不必要的功能,能够脱离框架,跟框架解除耦合。
12 楼 SoloTerran 2010-04-15  
wangliang_gz 写道
aoliwen521 写道
完全不明白楼主的用意,对于减少struts2标签依赖是什么含义?

就是不用<s:form>这种标签,采用原始的html。

美工交付过来的就是原始html,没有特殊情况是不会把<form>改成<s:form>的
11 楼 whaosoft 2010-04-15  
说是话不太明白lz的想法
10 楼 waitingmyself 2010-04-15  
清晨阳光 写道
看着楼主写的下划线开头的类就很不舒服,为什么不用大写字母开头呢?不解中……

确实 楼主写js出身的吧  java好像没有这样写的
9 楼 troyconder 2010-04-15  
即使楼主不用REST,也不至于这样增加工作量吧,我觉得原本的Struts2就很好用了,楼主还需要仔细看文档啊。
8 楼 wangliang_gz 2010-04-15  
lydawen 写道
struts2可以使用通配符或指定方法。
1、直接指定方法(不依赖配置)
login.action!method
login!method.action

2、通配符
struts-config.xml
<action name="*path" class="" method="{1}">

不明白楼主用意

动态方法调用我是禁用的,Action统配我也是去掉的,因为我认为一个物理Action类声明成两个逻辑Action意义不大
如LoginAction类---->LoginIndex.action----对应execute
LoginAction类---->LoginDoLogin.action----对应doLogin
我采用的方法是用java编程取代框架的配置,脱离框架的管理。


7 楼 wangliang_gz 2010-04-15  
aoliwen521 写道
完全不明白楼主的用意,对于减少struts2标签依赖是什么含义?

就是不用<s:form>这种标签,采用原始的html。
6 楼 liwenso 2010-04-15  
确实没看出来怎么减少struts2标签的依赖
5 楼 aoliwen521 2010-04-15  
完全不明白楼主的用意,对于减少struts2标签依赖是什么含义?
4 楼 royboy 2010-04-15  
这种配置还是有它的用处的,可以说是对减少struts标签的依赖,也可以说减少是对struts配置信息的依赖
3 楼 nothink 2010-04-15  
感觉在做无用功
2 楼 lydawen 2010-04-15  
struts2可以使用通配符或指定方法。
1、直接指定方法(不依赖配置)
login.action!method
login!method.action

2、通配符
struts-config.xml
<action name="*path" class="" method="{1}">

不明白楼主用意
1 楼 清晨阳光 2010-04-15  
看着楼主写的下划线开头的类就很不舒服,为什么不用大写字母开头呢?不解中……

相关推荐

    Struts2视频教程

    Struts2使用过滤器(Filter)作为前端控制器,相比于Struts1使用servlet作为前端控制器更加优雅。 - **适用范围**:Struts2广泛应用于企业级Java Web项目的开发中,特别是那些需要处理大量用户交互和数据展示的应用。 ...

    struts2 ,struts2 demo

    Struts2是一个强大的Java EE应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的Web应用。这个“struts2,struts2 demo”很显然是一个包含Struts2框架示例代码的压缩包,旨在帮助开发者理解和学习如何在实际...

    struts2讲义

    在Struts2中,前端控制器由`StrutsPrepareAndExecuteFilter`扮演,它负责拦截所有请求,并根据配置将请求传递给相应的Action处理。 #### 二、Struts2快速入门 ##### 2.1 安装与配置 1. **下载Struts2开发包** - ...

    struts2面试题

    Struts2 的主要特点是使用 FilterDispatcher 作为核心控制器,将请求分发到相应的 Action 中。下面是 Struts2 面试题中涉及到的知识点: 1. Struts1 和 Struts2 的区别: Struts1 和 Struts2 是两个不同的框架,...

    原创struts2讲义2.pdf

    FilterDispatcher是Struts2的核心控制器,它负责接收用户请求并将其分发到相应的Action进行处理。Action映射则是在配置文件中定义的,用于指定特定URL路径对应的具体Action。 **1.2.4 Struts2的架构与组件** ...

    struts2 PPT 张冰

    5. **Result**:Action执行后,将控制权转移给特定的结果类型,如JSP、FreeMarker模板等。 6. **Model-View-Controller**:模型负责业务逻辑,视图负责展示,控制器负责协调两者。 `控制器组件`可能详细讲解了...

    struts in action 英文版

    它根据配置文件(struts-config.xml)中的映射信息来处理请求,将请求分发到相应的Action,Action执行完毕后返回一个ActionForward对象,指示应该转向哪个JSP页面或者其他的Action。 Struts与Spring框架的结合使用...

    基于struts2的简单购书管理系统

    Struts2是一个强大的Java Web应用程序框架,用于构建MVC(模型-视图-控制器)架构的应用。这个"基于Struts2的简单购书管理系统"是一个典型的案例,它可以帮助初学者理解如何在实际项目中运用Struts2框架。下面将详细...

    struts与struts2的区别

    Struts1是基于ActionServlet的早期MVC框架,它将请求分发到特定的Action,然后通过配置文件(struts-config.xml)来管理动作和视图的映射。而Struts2则是在Struts1的基础上进行了全面改进,采用了拦截器...

    struts2学习文档struts2pdf

    5. **MVC模式**:Struts2遵循MVC模式,其中控制器负责处理请求并将任务分发给模型或视图。这种模式有助于分离关注点,提高代码的可重用性和可维护性。 6. **灵活的配置**:Struts2支持XML格式的配置文件来初始化...

    struts2框架详解

    Struts2框架详解 Struts2是Java Web开发中的一款广泛应用的开源MVC框架,它构建在...然而,随着Spring Boot和其他轻量级框架的崛起,Struts2在现代Web开发中的使用有所减少,但在一些大型企业项目中仍占据一席之地。

    struts2小练习

    通过配置文件,你可以控制请求如何被分发到相应的Action,以及Action执行后的响应如何被展示。 3. **Interceptor拦截器**:拦截器是Struts2的一大特色,它们在Action调用前后执行,可以用于实现如日志记录、权限...

    Struts2-2.5.13最新jar下载

    8. **FilterDispatcher**:作为Struts2的前端控制器,FilterDispatcher负责接收HTTP请求,解析并分发到相应的Action。 Struts2-2.5.13的更新可能包括: - 性能优化:可能对核心组件进行了优化,以提高处理速度和...

    Struts2相关jar包

    Struts2框架的核心依赖于多个jar包,这些jar包包含了控制器组件、拦截器、动作类、结果类型、标签库等关键功能。 1. **核心库**:struts2-core.jar是Struts2的核心库,它提供了框架的基础结构,包括Action、Result...

    Struts2 工作原理 Struts2框架 有图

    Struts2框架作为Java Web开发领域中的一款经典MVC(Model-View-Controller)框架,其工作原理涉及到了一系列复杂的组件交互与流程控制。本文将深入解析Struts2的工作流程,帮助开发者理解其核心机制。 ### 一、...

    struts2-src

    用户请求首先会被Struts2的前端控制器(DispatcherServlet)捕获,然后根据配置文件(struts.xml)中的映射信息,将请求分发到相应的Action进行处理。 2. **拦截器(Interceptor)**:Struts2的核心特性之一是拦截...

    struts2.3.4源代码

    1. **FilterDispatcher**: 这是Struts2框架的入口点,负责拦截HTTP请求并根据配置将请求分发到相应的Action。 2. **StrutsPrepareAndExecuteFilter**: 从Struts2.2开始,FilterDispatcher被这个新的过滤器替代,它...

    基于Struts2+Hibernate的登录注册系统

    Action执行完毕后,返回一个结果,Struts2根据结果配置将控制权交给相应的JSP页面,展示登录/注册状态或错误信息。 此外,项目可能还会包含一些配置文件,如Struts2的配置文件(struts.xml)用于定义Action和结果...

    servlet分发控制器

    在Struts 1框架中,ActionServlet是控制器的主要实现,它接收到请求后会根据配置信息(如struts-config.xml)将请求转发给相应的Action类处理。而在一个简单的自定义Controller中,`doProcess`方法扮演了类似的角色...

Global site tag (gtag.js) - Google Analytics