#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 и загрузчиком классов, используемым для загрузки слушателей (и классов, доступных для этого загрузчика классов).