4

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);
   }
 }
4

5 に答える 5

10

あなたがしていることは、タグ<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 
于 2013-09-19T10:16:51.277 に答える
1

リスナーはタグ内にあってはならず、servlet完全修飾名を提供してはなりません

<listener>
        <listener-class>com.somePackage.ListenerClass</listener-class>
</listener> 
于 2013-09-19T10:17:49.687 に答える
1

リスナー タグは、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>
于 2013-09-19T10:22:09.110 に答える
0

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> 
于 2013-09-19T10:17:35.973 に答える