文档章节

Strut2查看所有的路由mapping

喔喔兒
 喔喔兒
发布于 2017/02/16 14:11
字数 324
阅读 6
收藏 0

Strut2中,需要查看所有的action mapping时,可以使用两种方式,

1是通过继承ServletContextListener在初始化application时,动态反射,查找所有的注解;

2是通过Strut的Dispatcher中的ConfigurationManager查找;

以下是第一种方式:

private void test() {
    ClassScanner scanner = new ClassScanner();
    scanner.scanning("package to scanned", true);
    Map<String, Class<?>> classes = scanner.getClasses();
    for (Map.Entry<String, Class<?>> entry : classes.entrySet()) {
        String entryKey = entry.getKey();
        Class<?> value = entry.getValue();
        Namespace namespace = null;
        if (value.isAnnotationPresent(Namespaces.class)) {
            Namespaces namespacesAnnotation = value.getAnnotation(Namespaces.class);
            Namespace[] namespaces = namespacesAnnotation.value();
            for (int i = 0; i < namespaces.length; i++) {
                namespace = namespaces[i];
                getActionsByNamespace(namespace, value);
            }
        } else if (value.isAnnotationPresent(Namespace.class)) {
            namespace = value.getAnnotation(Namespace.class);
            getActionsByNamespace(namespace, value);
        } else {
            //no annotations
        }
    }
}
 
private void getActionsByNamespace(Namespace namespace, Class<?> type) {
    String apiName = namespace.value();
    Method[] methods = type.getDeclaredMethods();
    for (Method method : methods) {
        Action action = null;
        if (method.isAnnotationPresent(Actions.class)) {
            Actions actionsAnnotation = method.getAnnotation(Actions.class);
            Action[] actions = actionsAnnotation.value();
            for (int i = 0; i < actions.length; i++) {
                action = actions[i];
                getAction(apiName, action);
            }
        } else if (method.isAnnotationPresent(Action.class)) {
            action = method.getAnnotation(Action.class);
            getAction(apiName, action);
        }else {
            //not an action
        }
    }
}
 
private void getAction(String apiName, Action action) {
    System.out.println(apiName + "/" + action.value());
}

以下是第二种方式:

        Map<String, Map<String, ActionConfig>> configs =
                Dispatcher.getInstance().getConfigurationManager().getConfiguration().getRuntimeConfiguration().getActionConfigs();
        for (Map.Entry<String, Map<String, ActionConfig>> entry : configs.entrySet()) {
            String key = entry.getKey();
            Map<String, ActionConfig> value = entry.getValue();
            System.out.println("namespace : " + key);
            for (Map.Entry<String, ActionConfig> actionConfigEntry : value.entrySet()) {
                String actionName = actionConfigEntry.getKey();
                ActionConfig actionConfig = actionConfigEntry.getValue();
                System.out.println("action name : " + actionConfig.getName());
                System.out.println("method name : " + actionConfig.getMethodName());
                System.out.println("package name : " + actionConfig.getPackageName());
                System.out.println("class name : " + actionConfig.getClassName());
            }
        }

参考链接:

http://www.cnblogs.com/caroline/archive/2013/02/03/2890620.html 

http://blog.csdn.net/java2000_wl/article/details/7572828

http://www.programcreek.com/java-api-examples/index.php?api=org.apache.struts2.dispatcher.mapper.ActionMapping

https://struts.apache.org/maven/struts2-core/apidocs/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.html

http://blog.csdn.net/musa875643dn/article/details/45542305

© 著作权归作者所有

共有 人打赏支持
喔喔兒
粉丝 26
博文 64
码字总数 11003
作品 0
大连
程序员
私信 提问
SSH框架整合——strut2完成forword跳转

strut2固定是request的请求重定向方式进行跳转 如果界面中用forword来完成跳转: 会报请求错误的异常,所以需要在web.xml中修改strut2的配置 struts2 /* FORWORD REQUE...

夏延
2018/07/13
0
0
symfony2常用命令

app/console doctrine:database:create # 创建数据库 app/console doctrine:generate:entity --entity=AcmeDemoBundle:Article #创建Aritle初始化的Entity app/console doctrine:generate:en......

jims
2016/03/15
23
0
struts2异常处理

struts2异常处理 Struts2的异常处理机制: 任何成熟的MVC框架都应该提供成就的异常处理机制。Strut2也不例外。Struts2提供了一种声明式的异常处理方式。Struts2也是通过配置的拦截器来实现异...

00_yatou
2015/05/28
0
0
Elasticsearch之元数据(meta-fields)介绍

image.png 1. 什么是meta-fields 在Elasticsearch下,一个文档除了有数据之外,它还包含了元数据(Metadata)。每创建一条数据时,都会对元数据进行写入等操作,当然有些元数据是在创建mapping...

高广超
2017/12/29
0
0
Elasticsearch 5.4 Indices(索引) API

前言 声明:本博客根据ELasticsearch官网文档翻译整理,转载请注明出处:http://blog.csdn.net/napoay 一、索引管理 1.1 创建索引 创建索引 默认分片为5,副本为1. 创建索引并指定分片数和副...

napoay
2017/06/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxCool
42分钟前
1
0
携程Apollo统一配置中心的搭建和使用(java)

一.Apollo配置中心介绍 1、What is Apollo 1.1 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到...

morpheusWB
今天
1
0
远程获得的有趣的linux命令

使用这些工具从远程了解天气、阅读资料等。 我们即将结束为期 24 天的 Linux 命令行玩具日历。希望你有一直在看,如果没有,请回到开始,从头看过来。你会发现 Linux 终端有很多游戏、消遣和...

Linux就该这么学
今天
6
0
聊聊flink的AsyncWaitOperator

序 本文主要研究一下flink的AsyncWaitOperator AsyncWaitOperator flink-streaming-java_2.11-1.7.0-sources.jar!/org/apache/flink/streaming/api/operators/async/AsyncWaitOperator.java ......

go4it
今天
5
0
Java并发编程基础(四)

ThreadGroup 在主线程创建得线程,如果没有给他指定线程组,那么创建的线程,默认和主线程同一个线程组。线程组可以底下可以是线程,也可以实线程组。 构建线程组的方法: private ThreadGr...

chendom
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部