Java 如何使用注释链接自定义拦截器

Java 如何使用注释链接自定义拦截器,java,struts2,interceptor,Java,Struts2,Interceptor,我手头有一个自定义拦截器,我希望它使用注释与一个动作类相关联。我使用struts.xml中声明的拦截器ref添加了拦截器ref,但得到的异常如下: "SEVERE: Exception starting filter Struts2 Unable to load configuration. - [unknown location]" 我的动作课如下: @Action(value = "/login", results = { @Result(name = "suc

我手头有一个自定义拦截器,我希望它使用注释与一个动作类相关联。我使用struts.xml中声明的拦截器ref添加了拦截器ref,但得到的异常如下:

 "SEVERE: Exception starting filter Struts2
Unable to load configuration. - [unknown location]" 
我的动作课如下:

@Action(value = "/login", results = {
            @Result(name = "success", location = "/Welcome.jsp"),
            @Result(name = "error", location = "/Login.jsp") },
            interceptorRefs = {
                @InterceptorRef("defaultStack"),
                 @InterceptorRef("myLogging")}
    )
    public String validateCredentials() {
        if (this.userName.equals("Raj") && this.password.equals("aspire")) {
            return "success";
        } else {
            // addActionError(getText("error.login"));
            return "error";
        }
    }
<package name="default" extends="struts-default" namespace="/">
        <interceptors>
            <interceptor name="myLogging" class="org.struts.hello.MyLoggingInterceptor"/>
        </interceptors>
    </package>
我的struts.xml如下所示

@Action(value = "/login", results = {
            @Result(name = "success", location = "/Welcome.jsp"),
            @Result(name = "error", location = "/Login.jsp") },
            interceptorRefs = {
                @InterceptorRef("defaultStack"),
                 @InterceptorRef("myLogging")}
    )
    public String validateCredentials() {
        if (this.userName.equals("Raj") && this.password.equals("aspire")) {
            return "success";
        } else {
            // addActionError(getText("error.login"));
            return "error";
        }
    }
<package name="default" extends="struts-default" namespace="/">
        <interceptors>
            <interceptor name="myLogging" class="org.struts.hello.MyLoggingInterceptor"/>
        </interceptors>
    </package>

错误堆栈:

SEVERE: Exception starting filter Struts2
Unable to load configuration. - [unknown location]
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)
    at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3838)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4488)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:519)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: Unable to find interceptor class referenced by ref-name loggingStack - [unknown location]
    at com.opensymphony.xwork2.config.providers.InterceptorBuilder.constructInterceptorReference(InterceptorBuilder.java:52)
    at org.apache.struts2.convention.DefaultInterceptorMapBuilder.buildInterceptorList(DefaultInterceptorMapBuilder.java:99)
    at org.apache.struts2.convention.DefaultInterceptorMapBuilder.build(DefaultInterceptorMapBuilder.java:90)
    at org.apache.struts2.convention.DefaultInterceptorMapBuilder.build(DefaultInterceptorMapBuilder.java:74)
    at org.apache.struts2.convention.PackageBasedActionConfigBuilder.createActionConfig(PackageBasedActionConfigBuilder.java:676)
    at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildConfiguration(PackageBasedActionConfigBuilder.java:493)
    at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:278)
    at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:52)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:200)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
    ... 21 more
Dec 22, 2011 3:30:22 PM org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
Dec 22, 2011 3:30:22 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/StrutsAnnotation] startup failed due to previous errors
严重:启动过滤器Struts2时出现异常
无法加载配置。-[未知位置]
位于com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
在org.apache.struts2.dispatcher.dispatcher.init\u预配置(dispatcher.java:360)中
位于org.apache.struts2.dispatcher.dispatcher.init(dispatcher.java:403)
位于org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)
位于org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)
位于org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
位于org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:115)
位于org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3838)
位于org.apache.catalina.core.StandardContext.start(StandardContext.java:4488)
位于org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
位于org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
位于org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
位于org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
位于org.apache.catalina.core.StandardService.start(StandardService.java:519)
位于org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
位于org.apache.catalina.startup.catalina.start(catalina.java:581)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
位于org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
原因:找不到引用名称loggingStack-[未知位置]引用的侦听器类
在com.opensymphony.xwork2.config.providers.InterceptorBuilder.ConstructorInterceptorReference(InterceptorBuilder.java:52)上
位于org.apache.struts2.convention.DefaultInterceptorMapBuilder.buildInterceptorList(DefaultInterceptorMapBuilder.java:99)
位于org.apache.struts2.convention.DefaultInterceptorMapBuilder.build(DefaultInterceptorMapBuilder.java:90)
位于org.apache.struts2.convention.DefaultInterceptorMapBuilder.build(DefaultInterceptorMapBuilder.java:74)
位于org.apache.struts2.convention.PackageBasedActionConfigBuilder.createActionConfig(PackageBasedActionConfigBuilder.java:676)
位于org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildConfiguration(PackageBasedActionConfigBuilder.java:493)
位于org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:278)
位于org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:52)
在com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:200)上
位于com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
... 还有21个
2011年12月22日下午3:30:22 org.apache.catalina.core.StandardContext开始
严重:错误筛选器开始
2011年12月22日下午3:30:22 org.apache.catalina.core.StandardContext开始
严重:由于以前的错误,上下文[/StrutsAnnotation]启动失败

我没有太多的经验使用带或不带struts2的注释,但我相信您正在使用。下面是他们对您的问题的看法的快速快照

如果您遇到诸如“找不到引用的侦听器类”之类的错误 参考名称XYZ”。这意味着要放置约定的包 您的操作不会扩展拦截器所在的包 定义也要解决这个问题

  • 使用@ParentPackage注释(或struts.convention.default.parent.package) 传递定义拦截器的包的名称
  • 用XML创建一个包,扩展定义拦截器的包, 并使用@ParentPackage(或Struts.convention.default.parent.package)指向它
  • 有关更多详细信息,请参阅此处的文档


    能否显示完整的错误控制台?