Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Как запустить из сервлета код из другого класса


Автор: artem_from_minsk 11.3.2011, 13:56
Есть обычний сервлет в нем нужно в модуле init запустить java логику
Код

        HttpClientTest client =new HttpClientTest();
    client.StartReadCurrency();


Где:

Код

import java.io.*;

public class HttpClientTest 
{  
    public void StartReadCurrency() throws UnsupportedEncodingException
    { 
     
        System.out.println("Hello world");    
    }
    
}


Но как обычный класс, init не работает. Как тогда к сервлету подключить логику из другого класса?

Автор: MisterCleric 11.3.2011, 15:48
Привет.
Маловато объяснений.
Может тебе достаточно так:
Код

GenericServlet servlet = new MyServlet();
servlet.init();


Метод init() вызывается автоматически сервлет-контейнером при старте web-приложения.

Автор: artem_from_minsk 11.3.2011, 17:11
Я хотел в сервлете вызвать класс вот так:
Код

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

/**
 * Servlet implementation class servl
 */
@WebServlet("/servl")
public final class servl extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public void init(ServletConfig config) throws ServletException 
       {
        HttpClientTest client =new HttpClientTest();
        client.StartReadCurrency();// в этой строчке у меня ошибка, хотя и предыдущая не правильная тоже 
    }
    public void destroy() {
        // TODO Auto-generated method stub
    }

}


Возможно если мой класс объявить как сервлет, и воспользоватся объявлением как у вас, то возможно что-то и получится. 
Жду еще варианты...
Может можно и обычный класс как-то подключить?

Автор: MisterCleric 11.3.2011, 18:08
StackTrace в студию!

Добавлено через 2 минуты и 12 секунд
или у тебя ошибка при компиляции?
Ведь UnsupportedEncodingException это не ServletException и даже не RuntimeException

Автор: artem_from_minsk 11.3.2011, 18:14
О... это идея. Объявить поток, а потом через StackTrace подключить к сервлету.  Я так вас понял?? У меня просто не как поток, а  просто класс. 

Автор: MisterCleric 11.3.2011, 18:17
StackTrace это текст Exception, который пишеться в лог при выполнении программы и возникновении такового.
Короче: покажи текст ошибки, пожалуйста

Автор: artem_from_minsk 11.3.2011, 18:57
HttpClientTest.java
Код

import java.io.*;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;

public class HttpClientTest 
{
    private static final String DEFAULT_CHARSET = "UTF-8";
    private static final String SITE_CHARSET = "CP1251";
    private static String main_massive[]={
     "usdjpy",//Маска для USD/GPY значение курса
    };
   // Этот кусок кода скачивает страницу и выдает его в string
    public String HttpClientPage(String page) throws UnsupportedEncodingException 
    {
        HttpClient httpClient = new HttpClient();
        httpClient.getParams().setContentCharset(DEFAULT_CHARSET);
        httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
        // Загрузка страницы с запросом методом GET
        GetMethod getMethod = new GetMethod(page);
        getMethod.getParams().setContentCharset(SITE_CHARSET);
        try {
            int result = httpClient.executeMethod(getMethod);
            if (result == HttpStatus.SC_OK) {
                // Выводим страницу на экран и заносим в переменную а
                String inputHTML = getMethod.getResponseBodyAsString();
                return inputHTML;
            } else {
                return "А страничка-то и не загрузилась!!!";
            }
        } catch (IOException e) {
            return "Проблемы со связью";
        } finally {
            getMethod.releaseConnection();
        } 
    }
    public void StartReadCurrency() throws UnsupportedEncodingException
    { 
     String page;
     HttpClientTest client = new HttpClientTest();
     page = client.HttpClientPage("http://finance.yahoo.com/q?s="+main_massive[1].toUpperCase()+"=X");
     System.out.println(page);    
    }    
}

Второй файл это мой сервлет
Код

import java.io.UnsupportedEncodingException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;


/**
 * Servlet implementation class servl
 */
@WebServlet("/servl")
public final class servl extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public void init(ServletConfig config) throws ServletException {
    HttpClientTestt client =new HttpClientTestt();
    try {
        client.StartReadCurrency();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    }
    public void destroy() {
    }

}


А выдает вот что:
Код

11.03.2011 17:50:03 org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
java.lang.NoClassDefFoundError: org/apache/commons/httpclient/HttpMethod
    at httpclient.my.servl.init(servl.java:18)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1133)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1087)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:799)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.httpclient.HttpMethod
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
    ... 18 more
11.03.2011 17:50:03 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet httpclient.my.servl
java.lang.ClassNotFoundException: org.apache.commons.httpclient.HttpMethod
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
    at httpclient.my.servl.init(servl.java:18)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1133)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1087)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:799)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)


Автор: MisterCleric 11.3.2011, 19:01
Как-то у тебя в classpath tomcat не вся commons-httpclient.jar лежит:
java.lang.ClassNotFoundException: org.apache.commons.httpclient.HttpMethod

Автор: artem_from_minsk 11.3.2011, 21:49
Что самое интересное, что commons-httpclient.jar лежит вся. Если создать класс вот  и потом запустить 
HttpClientTest client =new HttpClientTest();
        client.StartReadCurrency();

в нем то работает.
Код

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.sql.SQLException;

public class index {
    public static void main(String args[]) throws UnsupportedEncodingException, ClassNotFoundException, SQLException, IOException
    {
    HttpClientTest client =new HttpClientTest();
    client.StartReadCurrency();    
    }
}


Если запустить этот класс то ошибок не выдает. В чем прикол?

Автор: artem_from_minsk 11.3.2011, 22:09
А хотя может и не добавлена. У томката свои библиотеки. Как к ним тогда добавить эту библиотеку. У меня в папке Java Resource\Libraries она есть, а вот в папке Java Resource\Libraries\Apache Tomcat v7 ее нет. Только по этому? А как туда эту библиотеку добавить. Не получается что-то.

Автор: artem_from_minsk 11.3.2011, 22:52
И что означает не вся? Чего же не хватает?

Автор: artem_from_minsk 12.3.2011, 01:18
Позакидывал все библиотеки в директорию tomcat\lib и все заработало. Действительно не хватало библиотек. Спасибо. Век живи-век учись.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)