Связь между сервлетом и апплетом не работает, когда он работал - PullRequest
0 голосов
/ 20 февраля 2011

У меня есть апплет (где пользователь входит в систему), и после нажатия кнопки входа в систему я отправляю данные для входа в свой сервлет.В моем апплете функция, отвечающая за отправку данных входа в систему сервлету и получение объекта ответа сервлета FAILS .

Моя проблема: Я неЯ знаю, почему моя функция sendObject (Object o) не работает, и я не знаю, как это исправить.Не могли бы вы помочь мне понять, что не так и почему?

Я использую Apache 7.0.Я думаю, что получение ответа (получение входного потока) от сервлета не удается, но я не знаю, почему & вход в систему работал нормально на днях, поэтому я знаю, что моя папка WEB-INF настроена нормально, и web.xml в порядке.

Моя функция (я документирую, где происходит сбой функции):

public ArrayList <Object> sendObject( Object o )
{
    try
    {
        URL servletUrl = new URL( this.getCodeBase(), "Updater" ); // "http://localhost:8080/" );
        URLConnection conn = servletUrl.openConnection();

        conn.setDoInput( true );
        conn.setDoOutput( true );
        conn.setUseCaches( false );
        conn.setRequestProperty( "Content-Type", "application/x-java-serialized-object" );

        OutputStream out = conn.getOutputStream();
        ObjectOutputStream objOut = new ObjectOutputStream( out );
        objOut.writeObject( o ); 
        objOut.flush(); 
        objOut.close();

        // receive result from servlet
        System.out.println( "Result from applet.getCodeBase()=" + this.getCodeBase() );
     // The following line is where I get the exception thrown
        InputStream instr = conn.getInputStream();              
        ObjectInputStream inputFromServlet = new ObjectInputStream(instr);
        ArrayList <Object> result = (ArrayList <Object>) inputFromServlet.readObject();
        inputFromServlet.close();
        instr.close();

        System.out.println( "Contents of output is " );
        for (int i=0; i<result.size(); i++)
        {
            System.out.println( "" + result.get(i) );
        }

        return result;
    }
    catch ( IOException e )
    {
        System.out.println( "In sendObject(): " + e );
    }
    catch ( Exception e )
    {
        System.out.println( "In sendObject(): " + e );
    }

    return null;
}    

Вывод Java-консоли:

Результат из applet.getCodeBase() = http://localhost:8080/Updater/
В sendObject (): java.io.IOException: сервер вернул код ответа HTTP: 500 для URL: http://localhost:8080/Updater/Updater

Из журнала Apache:

20.02.2011 11:15:08 org.apache.catalina.core.ApplicationContext log
ИНФОРМАЦИЯ: ContextListener: contextInitialized ()
20/02/2011 11:15:08Org.apache.catalina.core.ApplicationContext log
ИНФОРМАЦИЯ: SessionListener: contextInitialized ()
20/02/2011 11:15:23 org.apache.catalina.core.ApplicationContext log
ИНФОРМАЦИЯ:Отметить сервлет Updater как недоступный
20.02.2011 11:15:23 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: выделить исключение для сервлета Updater
java.lang.NullPointerException
в javax.servlet.GenericServlet.getServletContext (GenericServlet.java:125)
в UpdaterServlet. (UpdaterServlet.) // ОБРАТИТЕ ВНИМАНИЕ, ЧТОБЫ УВИДЕТЬ СТРОКУ 32 ЭТОГО ФАЙЛА
в sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод)
в sun.reflect.NativeConstructorAccessorImpl.newInstance (неизвестный источник)
в sun.reflectDelegatingConstructorAccessorImpl.newInstance (неизвестный источник)
в java.lang.reflect.Constructor.newInstance (неизвестный источник)
в java.lang.Class.newInstance0 (неизвестный источник)
в java.lang.Class.newInanceance(Неизвестный источник)
в org.apache.catalina.core.DefaultInstanceManager.newInstance (DefaultInstanceManager.java:119)
в org.apache.catalina.core.StandardWrapper.loadServlet (StandardWrapper.java:1048 * 1048)* в org.apache.catalina.core.StandardWrapper.allocate (StandardWrapper.java:799)
в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:135)
в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:161)
в org.apache.catalina.core.Valve.Hove.Java: 164)
в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:100)
в org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:541)
в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:118)
в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:383)
в org.apache.coyote.http11.Http11Processor.process (Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process (Http11Protocol.java:188)
at.at.cat.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:288)
в java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (неизвестный источник)
в java.util.concurrent.ThreadPoolExrutor $ Workerun (неизвестный источник)
at java.lang.Thread.run (неизвестный источник)

localhost_access_log ...:

127.0.0.1 - - [20/ Февраль / 2011: 11: 15: 12 +1100] "GET /Updater/index.html HTTP / 1.1" 304 -
127.0.0.1 - - [20 / Feb / 2011: 11: 15: 15 +1100] "GET /Updater/UpdaterApplet.class HTTP / 1.1" 304 -
127.0.0.1 - - [20 / Feb / 2011: 11: 15: 15 +1100] "GET /Updater/ContentTree.class HTTP / 1.1" 304 -
127.0.0.1 - - [20 / Feb / 2011: 11: 15: 15 +1100] "GET / Updater / ContentMap.class HTTP / 1.1 "304 -
127.0.0.1 - - [20 / Feb / 2011: 11: 15: 15 +1100]" GET /Updater/UpdaterApplet$1.class HTTP / 1.1 "304 -
127.0.0.1 - - [20 / Feb / 2011: 11: 15: 15 +1100] "GET /Updater/SQLInterface.class HTTP / 1.1" 304 -
127.0.0.1 - - [20 / Feb / 2011: 11:15:23 +1100] "GET /Updater/ObjSerializationInterface.class HTTP / 1.1" 304 -
127.0.0.1 - - [20 / Feb / 2011: 11: 15: 23 +1100] "POST / Updater / Updater HTTP/1.1 "500 3117

Это файл UpdaterServlet.java (если вы видите выше, есть ошибка в строке 32 этого файла):

public class UpdaterServlet extends HttpServlet
{
// Class Variables:
private static final long serialVersionUID = 1L;
private ArrayList <File> localDatabases;
private ArrayList <ArrayList <Object>> input;
private ArrayList <ArrayList <Object>> output;

// Class Methods:

public UpdaterServlet()
{
    getServletContext().log( "File open/created" ); // LINE 32
    localDatabases = new ArrayList <File>();

Ответы [ 3 ]

1 голос
/ 20 февраля 2011

Похоже, getServletContext() возвращает null; Вы также переопределяете метод init(ServletConfig) в UpdaterServlet? Если это так, обязательно позвоните super.init(config).

1 голос
/ 20 февраля 2011

Этот NPE означает, что ServletConfig отсутствует (откуда должен быть возвращен ServletContext). Это действительно недоступно в конструкторе сервлета. Контейнер сервлета устанавливает его после построения сервлета. Вместо этого вам нужно выполнить желаемую работу методом init().

@Override
public void init() {
    getServletContext().log( "File open/created" ); // LINE 32
    localDatabases = new ArrayList <File>();
    // ...
}

Не связанная с конкретной проблемой, трассировка стека также намекает на то, что ваш сервлет находится в пакете по умолчанию. Это будет работать только при очень определенных обстоятельствах (определенные версии Apache Tomcat в сочетании с определенными версиями JDK). Я настоятельно рекомендую поместить класс сервлета в пакет и соответственно изменить web.xml, чтобы вы больше не зависели от него.

0 голосов
/ 20 февраля 2011

Итак, ваш веб-сервер знает, что делать на /Updater/Updater? Похоже, нет. Взгляните на журнал ошибок, там должно быть больше информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...