在Action的配置中,不能使用“java”启动包路径

时间:2012-03-03 09:20:21

标签: java struts2 web

<package name="default" extends="struts-default">
    <action name="loginAction" class="java.LoginAction">
        <result name="input">/login.jsp</result>
        <result name="success">/success.jsp</result>
    </action>
</package>

如果我使用以java.*开头的包路径配置位置,则会导致错误。 堆栈是

Caused by: Action class [java.LoginAction] not found.

有人可以告诉我原因吗?

3 个答案:

答案 0 :(得分:3)

您不应该将自己的类放入以java.*开头的包结构中。我相信至少有一些安全管理器会阻止这种情况,而且总的来说这是一个非常糟糕的主意:java.*包中的类应该是JRE的一部分,而不是用户创建的。

你得到的错误表明,正在使用的类加载器可能拒绝在以java.开头的包中加载clases,这是同一件事的另一种表现,基本上。

为什么希望将您的课程放在名为java的程序包中? (我假设您确实尝试过这样做。如果您只是随机决定将包名称指定为java而实际上没有一个声明该包的类,那么当然它会失败。)

举个例子,我尝试运行这个程序:

package java;

public class Test {
    public static void main(String[] args) {
        System.out.println("Woot");
    }
}

结果是这个错误:

Exception in thread "main" java.lang.SecurityException: Prohibited package name:
 java
        at java.lang.ClassLoader.preDefineClass(Unknown Source)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: java.Test.  Program will exit.

答案 1 :(得分:1)

包(.java.LoginAction之前的部分)必须与package类的LoginAction声明匹配。查看文件的顶部LoginAction.java,查看以package开头的行。

答案 2 :(得分:0)

您需要更改包名称java Struts2正在尝试从LoginAction默认JRE包中加载java