Java 模型未注入servlet

Java 模型未注入servlet,java,servlets,cdi,Java,Servlets,Cdi,我有一个简单的servlet项目: 我需要向servlet实例注入依赖关系。我尝试了几种注释:Default,Singlton,EJB,ManagedBean,没有任何帮助 POM.xml的一部分 <build> <resources> <resource> <directory>src/main/resources</directory> </resource>

我有一个简单的servlet项目: 我需要向servlet实例注入依赖关系。我尝试了几种注释:DefaultSingltonEJBManagedBean,没有任何帮助

POM.xml的一部分

<build>
    <resources>
        <resource>
          <directory>src/main/resources</directory>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>

                <compilerArguments>
                    <endorseddirs>${endorsed.dir}</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.6</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${endorsed.dir}</outputDirectory>
                        <silent>true</silent>
                        <artifactItems>
                            <artifactItem>
                                <groupId>javax</groupId>
                                <artifactId>javaee-endorsed-api</artifactId>
                                <version>7.0</version>
                                <type>jar</type>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
模范班

@Model
public class UpdatesModel implements Serializable
{
    private final static org.slf4j.Logger logger = LoggerFactory.getLogger(UpdatesModel.class);

    private final String url;
    private final String username;
    private final String password;
    private final String instpath;

    public UpdatesModel()
    {
        Properties prop = new Properties();

        try
        {
            Class.forName(driverName);
            prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"));
        }
        catch (ClassNotFoundException|IOException ex)
        {
            Logger.getLogger(UpdatesModel.class.getName()).log(Level.SEVERE, null, ex);
        }

        url          = "jdbc:mysql://" + serverName + "/" + prop.getProperty("database","");
        username     = prop.getProperty("dbuser","");
        password     = prop.getProperty("dbpassword","");

        instpath     = prop.getProperty("instpath","");
    }
“更新”字段从未初始化。它等于零。我做错了什么

更新: 依赖项:

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.7</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.7.7</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.7</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <version>1.2</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>1.10.8</version>
        <scope>test</scope>
    </dependency>
</dependencies>

javax.servlet
javax.servlet-api
3.1.0
org.slf4j
slf4j api
1.7.7
org.slf4j
jcl-over-slf4j
1.7.7
运行时
org.slf4j
slf4j-log4j12
1.7.7
运行时
javax.enterprise
CDIAPI
1.2
假如
朱尼特
朱尼特
4.12
测试
org.mockito
莫基托磁芯
1.10.8
测试
我在WEB-INF中创建了空的beans.xml-没有帮助((
我部署到Tomcat 7。也尝试了Tomcat 8-没有区别(

首先,您的
pom.xml
的块与问题完全无关;)依赖项部分会更有趣

WEB-INF
目录中创建或确保存在名为
beans.xml
的空文件

确保在
pom.xml
中定义了CDIAPI依赖项:

    <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <scope>provided</scope>
        <version>version</version>
    </dependency>

javax.enterprise
CDIAPI
假如
版本
还要确保将war部署到支持CDI的应用程序服务器(如Wildfly(JBoss))中,或者确保类路径上有所有必要的库(如果它只是像Tomcat这样的servlet容器)

向接口注入具体的实现也是一种很好的做法,因此您的
updatemodel
类应该实现一些指定其行为的接口


编辑:只有在SE环境中才需要依赖于焊接。在EE中,所有需要的都应该是
CDIAPI

我发现了如何解决这个问题。我添加了

 <dependency>
   <groupId>org.jboss.weld.servlet</groupId>
   <artifactId>weld-servlet</artifactId>
   <version>1.1.10.Final</version>
 </dependency>

我想知道我是否可以在没有额外的weld依赖性的情况下做到这一点?是否有javax替代方案?

我不知道任何可以与servlet一起使用的
@Model
注释。那么我应该使用什么呢?顺便说一句,模型是javax.enterprise.inject.Model您要部署到什么容器?如果您开始一个新项目,我建议在Github上克隆示例。她e和你需要的东西很相似
 <dependency>
   <groupId>org.jboss.weld.servlet</groupId>
   <artifactId>weld-servlet</artifactId>
   <version>1.1.10.Final</version>
 </dependency>
@WebListener
public class UpdaterRequestListener extends org.jboss.weld.environment.servlet.Listener
{
}