Post an Servlet

Hi leute,

ich hab ein Servlet (Fassade) welche einen privaten Konstruktor hat (Singleton Patten) und einer public Methode um die Instanz zu holen.

Die Fassade hat die üblichen Methoden doGet / doPost etc ... das ging auch bevor ich das Singleton Pattern eingeführt hab.


bisher konnte ich Post daten senden in dem ich als action beim HTML formular action="Fassade" angegeben habe..


jetzt zeigt es mit 404 error an (wenn die Fassade nicht final ist)

wenn die fassade final ist dann
HTTP Status 500 - Error instantiating servlet class fassade.Fassade

type Exception report

message Error instantiating servlet class fassade.Fassade

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Error instantiating servlet class fassade.Fassade
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1015)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652)
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1575)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1533)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)
root cause

java.lang.IllegalAccessException: Class org.apache.catalina.core.DefaultInstanceManager can not access a member of class fassade.Fassade with modifiers "private"
sun.reflect.Reflection.ensureMemberAccess(Reflection.java:101)
java.lang.Class.newInstance(Class.java:427)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1015)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652)
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1575)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1533)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)
note The full stack trace of the root cause is available in the Apache Tomcat/8.0.3 logs.
 
Servlets dürfen nicht als Singleton implementiert werden, sondern verlangen einen Standartkonstruktor. Wann ein Servlet Objekt für einen Request zu erzeugen ist bestimmt der Servlet Container.
 
Bleibt die Frage nach dem "warum" - es sollte keinen Grund geben, ein Servlet zu bekommen. Weil: dort gehört im Idealfall keine Geschäftslogik rein. Und ich unterstelle mal, dass es eher um die geht.
Also eine "normale" Singleton-Klaesse nehmen, das Servlet greift dann auf die zu - und alle anderen Klassen auch. Bitte beachten: es liegt im Wesen des Web's, dass wahrscheinlich einige Prozesse parallel auf den Server zugreifen - das sollte irgendwie beachtet werden.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben