`
superxielei
  • 浏览: 267151 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Struts2源码分析--根据namespace+name获得Action.java

阅读更多

因为项目需要一些动态的权限验证.需要根据命名空间找到类,然后反射出所有的方法做权限的验证.还希望能够动态的配置页面显示的模块.

实现的过程中遇到一个问题,如果根据namespace获得对应的action.java呢??

找了些资料,并没有发现直接回答这个问题的.只要自己来找吧.

打开FilterDispatcher.java来看看doFilter都组了什么.

 

//根据URI地址获得当前mapping
mapping = actionMapper.getMapping(request, dispatcher.getConfigurationManager());
 
//利用mapping执行action
            dispatcher.serviceAction(request, response, servletContext, mapping);

 以上两个是关键点..首先struts2会根据当前的uri获得mapping..实现的原理和我处理页面URL的差不多.有时间我贴出来给大家看..然后又通过mapping和必要的参数开始执行action的方法..那我需要的一个字第二部里了.点击Ctrl进入看看吧.

这个时候打开了Dispatcher.java

 

Configuration config = configurationManager.getConfiguration();
            //通过namespace+name+method+extracontext执行action
            ActionProxy proxy = config.getContainer().getInstance(ActionProxyFactory.class).createActionProxy(
                    namespace, name, method, extraContext, true, false);

 嘿嘿找到了.原来是在ActionProxy上啊.这就简单了.打开我的Action开始测试一下.

		Dispatcher dispatcher = Dispatcher.getInstance();
		ConfigurationManager configurationManager = dispatcher.getConfigurationManager();
		Configuration config = configurationManager.getConfiguration();
		Container container = config.getContainer();
		ActionProxyFactory actionProxyFactory = container.getInstance(ActionProxyFactory.class);
        //针对当前需求,这里用到的只有"/system/module"和第二个"module"有用.,其他参数没有实际用途.
        ActionProxy proxy = actionProxyFactory.createActionProxy("/system/module", "module", "module", null, true, false);
        Object obj = proxy.getAction();
        System.out.println(obj.getClass().getName());

  页面输出

com.wisdom.pmall.web.system.module.ModuleAction
 

可以根据命名空间和名称来获得类了...已经达到最开始预想的要求了..现在我能不能遍历所有的命名空间和名字呢?

这些东西应该是在config里的吧.

config.getPackageConfigs()

 可以返回所有的配置信息.包括了命名空间.但是没有name...看来还需要近一步跟踪...马上下班了.明天再弄吧!

2
0
分享到:
评论
2 楼 superxielei 2009-07-03  
是的。你可以在项目中查看到源码位置。
1 楼 lovit 2009-07-03  
struts2是不是基于webwork的?像Action.java和ActionSupport.java源码都在webwork中。

相关推荐

    解决struts2下载异常的jar包 struts2-sunspoter-stream-1.0.jar

    <package name="default" namespace="/" extends="struts-default"> <!-- 添加如下内容 --> <result-types> <result-type name="streamx" class=...

    struts2-json-plugin-2.3.8.jar

    Struts2 JSON Plugin是Apache Struts框架的一个重要插件,主要功能是使Struts2能够无缝地处理JSON(JavaScript Object Notation)数据。这个插件极大地增强了Struts2应用程序的可交互性和响应速度,尤其在开发Web...

    struts2-json-plugin-2.1.8jar包.zip

    Struts2 JSON Plugin是Apache Struts框架的一个扩展插件,主要功能是支持Struts2应用程序与JSON(JavaScript Object Notation)格式的数据进行交互。JSON是一种轻量级的数据交换格式,广泛用于Web服务和AJAX...

    STRUTS2:零配置插件CodeBehind

    通过该插件,Struts2能够自动扫描并识别Web应用程序中的Action类,从而推测出它们的命名空间(namespace)。此外,Zero Config还能够根据Action类的位置推断出结果视图(result view)的路径。 ##### 2.1 配置方法 在`...

    struts2集成struts-ssl-plugin插件实现https访问例子

    Struts2是一个非常流行的Java Web框架,用于构建可维护性和可扩展性良好的企业级应用程序。在Web应用中,为了确保数据传输的安全性,通常会使用HTTPS协议,它基于SSL/TLS来加密通信,保护用户的隐私信息。Struts2...

    eclipse for javaee配置web开发环境(struts2+servlet+sping)字体.doc

    <package name="HelloPackage" namespace="/" extends="struts-default"> <action name="Hello"> <result>/Hello.jsp </action> </struts> ``` 这里设置了Struts2的开发模式(devMode)为true,以便在开发...

    struts2课件----传智博客张孝祥老师最新讲解PPT

    <package name="struts2" namespace="/test" extends="struts-default"> <action name="helloworld" class="cn.struts2.action.HelloWorldAction"> <result name="success">/WEB-INF/page/hello.jsp </action> ...

    Struts2的bug----------关于Struts2中找不到Action的

    Struts2是一个流行的Java web框架,它为构建MVC(模型-视图-控制器)架构的应用程序提供了便利。然而,正如标题所示,“Struts2的bug——关于Struts2中找不到Action的”,这个问题可能困扰了许多开发者。在Struts2...

    struts2--json包

    Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展且易于管理的企业级应用程序。在Struts2中,JSON(JavaScript Object Notation)包是一个关键组件,它提供了与JSON数据格式交互的能力,使得Web应用能够...

    Groovy学习笔记 Struts2集成--Groovy类作为Action

    通常,Action类是Java编写的,但通过Struts2的插件机制,我们可以使用Groovy来创建Action,这为我们的开发工作带来了更多的灵活性。 要集成Groovy和Struts2,我们需要做以下几步: 1. **配置环境**:确保你的项目...

    (struts2-json-plugin-2.2.1)struts2 json-default配置中需要的jar包

    Struts2是一个非常流行的Java Web开发框架,它极大地简化了MVC应用的构建。JSON(JavaScript Object Notation)是用于数据交换的一种轻量级格式,它在Web服务和客户端之间传递数据时非常常见。在Struts2中,JSON支持...

    Struts2中使用JSON数据格式所需全部jar包

    当Action执行完成后,返回"success",Struts2的JSON插件会根据配置自动将`result`和`list`属性转换为JSON并发送给客户端。 总的来说,Struts2通过整合JSON,提高了Web应用的响应速度和用户体验,使得服务器与客户端...

    一个struts2的例子:彻底解决STRUTS2 错误There is no Action mapped for namespace / and action name login

    前几天在网上下载一个struts2的helloword的例子,那个作者也真够缺德的,搞个错误的程序,害得我查了一天的程序错误。 最后发现竟然是struts.xml被写成啦sturts.xml。 碰见这样的问题先鄙视下提供例子的作者, 再...

    Struts2-ActionError-ActionMessage-Example

    Struts2是一个强大的MVC(模型-视图-控制器)框架,用于构建企业级Java Web应用程序。在Struts2框架中,ActionError和ActionMessage是处理用户输入验证和错误反馈的重要组件,它们使得开发者能够优雅地管理应用程序...

    struts框架搭建

    <package name="chapter1" namespace="/chapter1" extends="struts-default"> <action name="HelloWorld" class="chapter1.action.Chapter1Action" method="execute"> <result name="success">/WEB-INF/JspPage/...

    Struts2-2.1.6一个最简单的例子,以及需要的基础jar包

    Struts2是一个流行的Java web应用程序框架,用于构建和维护可扩展、模块化且易于管理的MVC(模型-视图-控制器)应用。在本文中,我们将深入探讨Struts2框架的基本概念,以及如何利用Struts2-2.1.6版本创建一个最简单...

    去掉.action去掉.do字样 隐藏struts2 URL地址action, strus1的扩展名do也是同理.zip

    Struts2和Struts1是两个非常著名的Java Web框架,它们在处理请求时通常会在URL中显式地显示.action或.do后缀。然而,为了提供更友好的用户体验和增强安全性,有时我们需要隐藏这些扩展名。本篇文章将详细介绍如何在...

    struts2.5.16升级过程中遇到问题详述

    <package name="default" namespace="/" extends="struts-default"> <!-- 全局允许的方法 --> <global-allowed-methods>regex:.*</global-allowed-methods> <!-- 添加具体的Action配置 --> </struts> ``` - *...

    struts2.ppt struts2.ppt 我们老师发的PPT

    Struts2是一个流行的Java Web应用程序框架,用于构建MVC(模型-视图-控制器)架构的应用。它由Apache软件基金会维护,并且是基于XWork框架构建的。在深入讲解Struts2的知识点之前,让我们先了解如何开始一个Struts2...

    Struts2--3.Action及相关-1

    在struts.xml或struts.properties文件中,我们可以定义Action的namespace和actionName,形成完整的Action路径。这有助于组织和模块化应用的不同部分。 `Struts2_0500_ActionMethod`讲解了如何配置Action类的执行...

Global site tag (gtag.js) - Google Analytics