【发布时间】:2014-12-18 22:31:22
【问题描述】:
我有一个简单的 servlet 项目: 我需要将依赖项注入到 servlet 实例。我尝试了几个注释:Default、Singlton、EJB、ManagedBean,没有任何帮助。
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>
小服务程序
@WebServlet(urlPatterns = {"/updater_servlet"},loadOnStartup = 1)
public class Updater_servlet extends HttpServlet
{
private final static org.slf4j.Logger logger = LoggerFactory.getLogger(Updater_servlet.class);
@Inject
private UpdatesModel updates;
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
...
}
模型类
@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>
我在 WEB-INF 中创建了空 beans.xml - 没有帮助 (( 我部署到 Tomcat 7。也尝试了 tomcat 8 - 没有区别((
【问题讨论】:
-
我不知道任何适用于 Servlet 的
@Model注释。 -
那我应该用什么? BTW 模型是 javax.enterprise.inject.Model
-
你要部署到什么容器?