Класс прослушивателя не выполняется при запуске сервера || tomcat || eclipse

#java #eclipse #tomcat

#java #eclipse #tomcat

Вопрос:

Я работаю над eclipse gallileo, struts и tomcat. ниже приведен мой web.xml файл

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>streetmall</display-name>
 <context-param>
  <param-name>imagePath</param-name>
  <param-value>D:\OrderID_images</param-value>
 </context-param>
 <listener>
  <listener-class>jaha.Customer.util.ApplicationScopeInit</listener-class>
 </listener>
 <servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
  <init-param>
   <param-name>debug</param-name>
   <param-value>3</param-value>
  </init-param>
  <init-param>
   <param-name>detail</param-name>
   <param-value>3</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet>
  <servlet-name>action_tmp</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
  <init-param>
   <param-name>debug</param-name>
   <param-value>3</param-value>
  </init-param>
  <init-param>
   <param-name>detail</param-name>
   <param-value>3</param-value>
  </init-param>
  <load-on-startup>0</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
  <welcome-file>welcome.jsp</welcome-file>
 </welcome-file-list>

 <login-config>
  <auth-method>BASIC</auth-method>
 </login-config>

  <description>MySQL Test App</description>
  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/TestDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref></web-app>
  

Моя проблема в том, что когда я запускаю свой сервер tomcat, мой класс lister не выполняется. даже я поместил некоторые System.out.println() . эти сообщения также не поступают на консоль .. пожалуйста, помогите мне, как избавиться от этого.

ранее я получал исключение class not found. но затем я создал новый проект и развернул его. теперь я в этой проблеме, спасибо

 public class ApplicationScopeInit implements ServletContextListener 
{

    public void contextInitialized(ServletContextEvent event) 
    {
        try
        {
            ClassLoader loader = Thread.currentThread().getContextClassLoader();

            System.out.println("Use context classloader to read states.properties");
            InputStream iStream = loader.getResourceAsStream("jaha/Customer/states.properties");
            Properties props = new Properties();
            System.out.println("Load the stream into the properties object directly");
            props.load(iStream);

            //Look up by key and load them into a ArrayList as NameValuePair collection
            Enumeration keyEnum = props.propertyNames();
            // Use a Sorted Set to hold the state names and values
            // Define an anonymous inner class to provide
            // the comparison algorithm to the TreeSet
            @SuppressWarnings("unchecked")
            Set stateSet = new TreeSet(
                    new Comparator() 
                    {
                        public int compare(Object a, Object b)
                        {
                            LabelValueBean nvpA = (LabelValueBean) a;
                            LabelValueBean nvpB = (LabelValueBean) b;

                            String valA = nvpA.getLabel();
                            String valB = nvpB.getLabel();
                            return valA.compareTo(valB);
                        }
                    }
            );

            LabelValueBean nvp = null;
            String keyName = null;
            String label = null;
            while (keyEnum.hasMoreElements())
            {
                keyName = (String) keyEnum.nextElement();
                label = props.getProperty(keyName);
                nvp = new LabelValueBean(label, keyName);
                stateSet.add(nvp);
            }

            System.out.println("Get ServletContext and set the properties as a application scope object");
            ServletContext context = event.getServletContext();
            context.setAttribute("STRUTS_EXAMPLE_STATES", stateSet);


            //Load Carriers - FedEx, UPS etc..
            List carrierList = new ArrayList();
            carrierList.add(new LabelValueBean("UPS", "UPS"));
            carrierList.add(new LabelValueBean("USPS", "USP"));
            carrierList.add(new LabelValueBean("FedEx", "FDX"));

            context.setAttribute("STRUTS_EXAMPLE_CARRIERS",carrierList);
            //.setAttribute("STRUTS_EXAMPLE_CARRIERS",carrierList);
        }
        catch (IOException ioe)
        {
            ioe.printStackTrace();      
        }
        try{
            System.out.println("Populating category on server startup");
            HashMap<String, ArrayList<CategorydetailObject>>  hm= CategoryManager.PopulateCategory();
            ServletContext context = event.getServletContext();

            context.setAttribute("PRODUCTS", hm);



        }
        catch(Exception e)
        {
            System.out.println("$$$$$$$$$$$$$$$$$$$$$ PROBLEM IN INITIALIZATION ALL PARAMETERS");

        }
    }

    public void contextDestroyed(ServletContextEvent event) 
    {
        event.getServletContext().removeAttribute("STRUTS_EXAMPLE_STATES");
        event.getServletContext().removeAttribute("STRUTS_EXAMPLE_CARRIERS");
        event.getServletContext().removeAttribute("PRODUCTS");

    }

}
  

Комментарии:

1. можем ли мы увидеть ваш класс слушателя?

2. Привет, я добавил класс, пожалуйста, смотрите.

3. Я использовал вашу настройку, и я могу видеть, как мое сообщение печатается при запуске сервера. Вы уверены, что сервер запускается правильно? Нет следов стека?

4. Я не нашел никакой трассировки стека в консоли. даже мой tomcat работает правильно. я также вижу свое имя класса «Applicationscopeinit» в консоли.

Ответ №1:

Щелкните правой кнопкой мыши веб-проект maven, затем в разделе сборка развертывания добавьте папку с классами прослушивателя в целевую папку.

Например, если реализация ServletContextListener присутствует в пакете com.company.listeners, сборка развертывания должна иметь следующее сопоставление папок:

 target/<applicationname>/WEB-INF/classes/com/company/listeners
  

Должен быть сопоставлен с

 WEB-INF/classes/com/company/listeners
  

Я думаю, что это связано с иерархией загрузчиков классов в tomcat и загрузчиком классов, используемым для загрузки слушателей (и классов, доступных для этого загрузчика классов).