[英]How do I put listener in web.xml java?
我已經創建了Web應用程序,我想知道在哪里將我的監聽器放在web.xml中。
<servlet>
<servlet-name>ProcessReg</servlet-name>
<servlet-class>ProcessReg</servlet-class>
<init-param>
<param-name>pract123</param-name>
<param-value>jdbc:odbc:practODBC</param-value>
</init-param>
<listener>
<listener-class>config</listener-class>
</listener>
</servlet>
我收到的錯誤消息是:
cvc-complex-type.2.4.a: Invalid content was found starting with element 'listener'. One of '{"http://java.sun.com/xml/ns/javaee":init-param, "http://java.sun.com/xml/ns/javaee":load-on-startup, "http://java.sun.com/xml/ns/javaee":run-as, "http://java.sun.com/xml/ns/javaee":security-role-ref}' is expected. [17]
這是我的配置文件:
public class config implements ServletContextListener {
private static final String ATTRIBUTE_NAME = "config";
private DataSource dataSource;
@Override
public void contextInitialized(ServletContextEvent event) {
ServletContext servletContext = event.getServletContext();
String databaseName = servletContext.getInitParameter("pract123");
try {
dataSource = (DataSource) new InitialContext().lookup("java:/comp /env/jdbc/TestDB");
} catch (NamingException e) {
throw new RuntimeException("Config failed: datasource not found", e);
}}
@Override
public void contextDestroyed(ServletContextEvent event) {
// NOOP.
}
public DataSource getDataSource() {
return dataSource;
}
public static config getInstance(ServletContext servletContext) {
return (config) servletContext.getAttribute(ATTRIBUTE_NAME);
}
}
你正在做的是混合<servlet>
和<listener>
標簽。它們應該是分開的。
那應該是
<servlet>
<servlet-name>ProcessReg</servlet-name>
<servlet-class>ProcessReg</servlet-class>
<init-param>
<param-name>pract123</param-name>
<param-value>jdbc:odbc:practODBC</param-value>
</init-param>
</servlet>
<listener>
<listener-class>fully.qaulified.path.ContextListener</listener-class>
</listener>
要么
<listener>
<listener-class>fully.qaulified.path.ContextListener</listener-class>
</listener>
<servlet>
<servlet-name>ProcessReg</servlet-name>
<servlet-class>ProcessReg</servlet-class>
<init-param>
<param-name>pract123</param-name>
<param-value>jdbc:odbc:practODBC</param-value>
</init-param>
</servlet>
在你的班上
package fully.qaulified.path;
public class ContextListener implements ServletContextListener {
..
..
作為旁注:
在Java中,類名以大寫字母開頭。 public class config
應該是
public class Config
監聽器不應位於servlet
標記內,並提供完全限定的名稱
<listener>
<listener-class>com.somePackage.ListenerClass</listener-class>
</listener>
正如您在wep-app的內容模型中看到的:
Content Model : (((description*, display-name*, icon*)) | distributable | context-param | filter | filter-mapping |
listener | servlet | servlet-mapping | session-config | mime-mapping | welcome-file-list | error-page | jsp-config |
security-constraint | login-config | security-role | ((env-entry*, ejb-ref*, ejb-local-ref*, ((service-ref*)), resource-
ref*, resource-env-ref*, message-destination-ref*, persistence-context-ref*, persistence-unit-ref*, post-
construct*, pre-destroy*)) | message-destination | locale-encoding-mapping-list)*
它是servlet
的兄弟,而不是孩子:
<servlet>
<servlet-name>ProcessReg</servlet-name>
<servlet-class>ProcessReg</servlet-class>
<init-param>
<param-name>pract123</param-name>
<param-value>jdbc:odbc:practODBC</param-value>
</init-param>
</servlet>
<listener>
<listener-class>config</listener-class>
</listener>
應在web-app標記下定義監聽器標記。
<web-app>
<display-name>MyListeningApplication</display-name>
<listener>
<listener-class>config</listener-class>
</listener>
<servlet-name>ProcessReg</servlet-name>
<servlet-class>ProcessReg</servlet-class>
<init-param>
<param-name>pract123</param-name>
<param-value>jdbc:odbc:practODBC</param-value>
</init-param>
</web-app>
web.xml將是
<listener>
<listener-class>com.my.ServletContextClass</listener-class>
</listener>
<context-param>
<param-name>pract123</param-name>
<param-value>jdbc:odbc:practODBC</param-value>
</context-param>
和com.my.ServletContextClass.java會
public class ServletContextClass implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
String value = context.getInitParameter("pract123");
System.out.println("value: " + value);
}
}
享受編碼:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.