Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee 环境条目-javaee-Web.XML-返回空值_Jakarta Ee_Web.xml_Java Ee 7 - Fatal编程技术网

Jakarta ee 环境条目-javaee-Web.XML-返回空值

Jakarta ee 环境条目-javaee-Web.XML-返回空值,jakarta-ee,web.xml,java-ee-7,Jakarta Ee,Web.xml,Java Ee 7,我试图从Java EE web应用程序中的web.xml文件中的环境条目中检索该值。我正在将Netbeans与Glassfish服务器一起使用 这是我的web.xml文件: <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSch

我试图从Java EE web应用程序中的web.xml文件中的环境条目中检索该值。我正在将Netbeans与Glassfish服务器一起使用

这是我的web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"         
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

<env-entry>
    <description>This example uses @Resource()</description>
    <env-entry-name>com.stuff.PasswordSessionBean/password</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>SteveJobbs</env-entry-value>
</env-entry>

<servlet>
    <servlet-name>PasswordServlet</servlet-name>
    <servlet-class>com.stuff.PasswordServlet</servlet-class> 
</servlet>

<servlet-mapping>
    <servlet-name>PasswordServlet</servlet-name>
    <url-pattern>/PasswordServlet</url-pattern>
</servlet-mapping>

<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>


</web-app>

如果您自己实例化bean,您将不会从依赖项注入之类的容器服务中受益

如果您有一个servlet,并且希望将env条目注入到依赖的POJO中,只需让容器将POJO注入到您的servlet中即可。 因此,不要自己调用新的PasswordSessionBean(),而是将以下内容添加到servlet中:

@Inject
private PasswordSessionBean passwordSessionBean;
...
public void doGet(....) {
    assertEquals(passwordSessionBean.getPassword(), "SteveJobbs");
}

定义PasswordSessionBean也是一种有效的替代方法,但对于仅仅注入一个env条目来说似乎是一种过分的做法。

PasswordSessionBean是否被实例化为托管bean?它不是EJB。因此,Servlet如何访问PasswordSessionBean将是一件有趣的事情。感谢您的回复@RobertPanzer@RobertPanzer,您建议我如何修复此代码。servlet当前通过实例化一个实例,然后调用getter方法(getPassword)来访问这个“bean”。我是否只需要添加注释,如
@Stateless
@LocalBean
,使其成为EJB?只需使用
@Inject
标记并创建对bean的引用,然后在引用上调用getter方法即可。我甚至不需要你的解决方案中的额外方法。谢谢你的帮助。:)另外,有点奇怪,我不需要用
new
关键字或任何东西实例化
passwordSessionBean
引用。如果我实例化
passwordSessionBean
对象,然后调用
getPassword()
方法,它会再次返回
null
。奇怪的是,仅在
PasswordSessionBean
引用上调用该方法就可以从环境条目中检索注入值是的,这是预期的行为。只有当容器实例化了env条目时,才会将其注入bean中。如果您通过new()执行此操作,则不会应用任何容器-“magic”;-)
@Inject
private PasswordSessionBean passwordSessionBean;
...
public void doGet(....) {
    assertEquals(passwordSessionBean.getPassword(), "SteveJobbs");
}