HttpServletRequest-instanz in servlet und JSP unterschiedlich?

ruutaiokwu

Top Contributor
hallo zusammen,

mir liegt folgender code vor:

Java:
import java.util.Map;

import com.aastra.ch.commons.collections.sorting.SortMap;

@SuppressWarnings("unchecked")
public class RequestAnalyzer
{
    public static void printFields(Object request)
    {
        System.out.println(RequestAnalyzer.getFields(request));
    }

    public static String getFields(Object request)
    {
        Map parameterMap = null;

        final StringBuilder sb = new StringBuilder();

        try
        {
            parameterMap = (Map) request.getClass().getMethod("getParameterMap").invoke(request, (Object[]) null);
        }
        catch (final Exception e)
        {
            e.printStackTrace();
        }

        final Map<String, String[]> sortedParameterMap = (Map<String, String[]>) SortMap.getTreeMapAsMap(parameterMap);

        for (final Map.Entry<String, String[]> entry : sortedParameterMap.entrySet())
        {
            final String key = entry.getKey();
            final String[] value = entry.getValue();
            sb.append("Key: " + key + ", Value: " + value[0] + "\r\n");
        }

        return sb.toString();
    }
}


anmerkung: reflection verwendet ich nur, weil ich das ganze teil einer library ist, wo ist servlet-engine (javax.servlet)-abhängigkeit nicht aufgelöst ist. persönlich mag ich das gar nicht, libraries zu packen, wo abhängigkeiten zur beim kompilieren nicht aufgelöst werden können. dass meine strategie auch nachteile hat, braucht mir niemand zu erklären. z.b. die das problem warum ich hier nachfrage:

wenn ich meine methode in einem servlet verwende (doGet, doPost oder service-funktionen) funktioniert das. wenn ich die methode in einem JSP verwende (mit der request-"konstante"...) geht das nicht, dann erhalte ich folgende meldung:

java.lang.IllegalAccessException: Class com.aastra.ch.commons.http.debug.RequestAnalyzer can not access a member of class org.apache.catalina.core.ApplicationHttpRequest with modifiers "public"
at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.aastra.ch.commons.http.debug.RequestAnalyzer.getFields(RequestAnalyzer.java:23)
at org.apache.jsp.WEB_002dINF.presentation.jsf.test.ERBDataJSP_jsp._jspService(ERBDataJSP_jsp.java:444)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at com.aastra.ch.commons.http.request.PageResolver.gotoPage(PageResolver.java:34)
at tests.jmarti.jsf.ERBDataServlet.processRequest(ERBDataServlet.java:59)
at com.aastra.ch.sls.commons.servlets.SLSDispatcher.myService(SLSDispatcher.java:321)
at com.aastra.ch.sls.commons.servlets.SLSDispatcher.doPost(SLSDispatcher.java:466)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at com.aastra.ch.sls.commons.servlets.SLSDispatcher.service(SLSDispatcher.java:353)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527)
at java.lang.Thread.run(Unknown Source)




...im moment kann ich nichts anderes machen, als die HttpServletRequest-instanz vom servlet her per request-dispatch (!) an das JSP weiterzuleiten, dort wieder zu holen und dann der getFields()-funktion mitzugeben...


grüsse, jan
 
M

maki

Gast
anmerkung: reflection verwendet ich nur, weil ich das ganze teil einer library ist, wo ist servlet-engine (javax.servlet)-abhängigkeit nicht aufgelöst ist.
Hä?

Wieso nicht die Servlet API mit in den Classpath nehmen?
 

ruutaiokwu

Top Contributor
@maki: später dann schon, mag aber keine anderen libraries in meinem eigenen library-projekt. habe die philisophie dass meine libraries WENN MÖGLICH keine anderen libraries verwenden müssen, sonst hat man später möglicherweise das totale chaos.

und wenn es mal nicht anders geht, verwende ich reflection. in meinem library-projekt will ich

1. keine weiteren libraries haben
2. keine zur kompilierzeit nicht aufgelösten abhängigkeiten haben

...darum das ganze! ob das jetzt gut oder schlecht ist, ist mir eigentlich egal. (ja, ich mache mir teilweise selbst probleme -> konkret z.b. die frage, welche ich stelle ;-)) das war nicht das thema, danke für's verständtnis.
 

tagedieb

Top Contributor
Die Klasse org.apache.catalina.core.ApplicationHttpRequest scheint in deinem Applikationserver nicht als public deklariert zu sein, deswegen ist der Zugriff via Reflection verboten und erzeugt eine Fehlermeldung.

Ich hab das ganze mit Glassfish3 getestet, da funktioniert dein Code einwandfrei. Allerdings ist die Klasse ApplicationHttpRequest in meiner Library als public deklariert.


Eventuell muss du mal deinen Applikationsserver updaten oder auf einen andern umsteigen.
Alternativ kannst du auch in deinem JSP den HttpServletRequestWrapper verwenden.

Java:
<%=RequestAnalyzer.getFields(new HttpServletRequestWrapper(request))%>


PS. Deine Philisophie kann ich nicht wirklich verstehen. Deine Klasse gehoert eigentlich ein ein Webprojekt, aber jeder darf sich selber das Leben schwer machen wie er will :D
 
M

maki

Gast
@maki: später dann schon, mag aber keine anderen libraries in meinem eigenen library-projekt.
Ganz ehrlich: Du bist in Java falsch. Nicht böse gemeint.
In Java werden Erweiterungen schon immer als externe Library (Jars) hinzugefügt, die Sprache ändert sich höchstens minimal, so verhält es sich nicht nur mit JEE, sondern eigentlich mit allem in Java.

habe die philisophie dass meine libraries WENN MÖGLICH keine anderen libraries verwenden müssen, sonst hat man später möglicherweise das totale chaos.
Deine Philosophie hört sich für mich eher nach unerfahrenheit an.

und wenn es mal nicht anders geht, verwende ich reflection. in meinem library-projekt will ich
Das ist definitiv der falsche Weg.

Sieh es mal so: Du nutzt die Servlet API, diese Abhängigkeit wirst du immer haben, egal ob mit oder ohne Reflection.

Reflection dazu zu missbrauchen klingt für mich so, als ob du dir eine Hand abhackst um deine Fingernägel nicht mehr schneiden zu müssen ;)

Tatsache ist, dass du die Serlvet API brauchst, und jeder der deine Lib verwenden will auch.
Dann wäre es nur richtig diese als explizite Abhängigkeit zu führen.

Dein Problem: Du versuchst dich an der Servlet API, einen Standard, nutzt diesen aber falsch.
 

ruutaiokwu

Top Contributor
hallo zusammen,

wenn schon getFields(Map parameterMap)

in angewandter form: Map m = getFields(request.getParameterMap())

so löst sich die abhängigkeit von der servlet api...

(keine ahnung, was ich mir vorher dabei überlegt habe...)


grüsse, jan
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Servlet getSession(false) in HttpServletRequest gibt nie null zurück Web Tier 3
M Servlet Filter und HttpServletRequest Web Tier 2
H MVC in Java pur / Controller als Instanz? / Theorie! Web Tier 4
G Eine Instanz pro Managed Bean? Web Tier 2
E Java Servlet doPost request, Mehrere Parameter mit demselben Namen aus Tabellenzeilen Web Tier 2
R servlet-mapping führt zu 404-Fehlern Web Tier 0
B Servlet mit TomCat9 Web Tier 0
A redirect mit servlet-mapping in web.xml Web Tier 4
J Wie Mouse Event in Servlet einbinden? Web Tier 1
D JSF Servlet Mapping Web Tier 3
J Session Servlet - JavaScript Web Tier 6
D Servlet 1 Servlet für alles - Wie Cookies per Ajax? Web Tier 1
S Problem mit Checkboxen im Servlet erkennen Web Tier 3
Todesbote Servlet MVC Design Pattern Web Tier 1
A Anfänger-Frage Servlet/Applet/JSP Web Tier 0
Shams Allgemeine Verständnisfrage zum Thema Servlet (in Vaadin) Web Tier 2
H File Output Servlet Web Tier 6
I vTiger Astersik Connector: NO JSP Support for , did not find org.apache.jasper.servlet.JspServlet Web Tier 0
OnDemand Servlet oder JSP Web Tier 12
H Servlet/JSP und OSGI Web Tier 2
L Servlet Datenbank Web Tier 0
D Java EE Servlet login Problem Web Tier 1
W Servlet SPEICHERN UNTER-Dialog für mehrere Dateien Web Tier 4
A Faces Context nicht mehr erreichbar nach Servlet Aufruf Web Tier 1
S Java Bean und Java Servlet Web Tier 2
D Servlet Servlet Weiterleitung static html Web Tier 5
G GWT 404 - Servlet nicht gefunden Web Tier 6
H Applet wirft AccessControlException bei File von Servlet Web Tier 3
H Servlet lässt sich nicht deployen Web Tier 7
C Kommunkation Servlets/Browseraufruf Servlet Web Tier 4
F.S.WhiTeY Servlet Servlet wird nicht angesprochen Web Tier 3
J Servlet Zugriff Servlet Web Tier 11
A JSON von JavaScript an Servlet Web Tier 9
K Servlet + JSP: JSP-Seite ein Array/ArrayList überliefern vom Controller-Servlet Web Tier 8
0 Servlet.Properties Web Tier 3
P Servlet Wo gibt es das javax.servlet.Servlet? Web Tier 2
H Servlet Servlet nimmt HTTP-GET mit Parameter entgegen Web Tier 2
5 Bild Pfad Servlet Web Tier 2
D Datenbankzugriff im Servlet Web Tier 5
H Servlet Apache Geronimo: Servlet nicht erreichbar Web Tier 2
S Ich brauche Buchempfehlung über JSP und Servlet Web Tier 2
A Parameterübergabe an Servlet und Aufruf von Servlets per Java Code Web Tier 7
S Auswahl eine Zeile von einer HTML Tabelle im Servlet Web Tier 4
K Servlet URL Mapping Web Tier 3
S ClassPath für Servlet Web Tier 3
reibi Servlet Logging - Standard Servlet Web Tier 5
K Portlet, Servlet doGet und doPost Web Tier 4
reibi Servlet Alleinlaufendes Servlet bauen Web Tier 6
P Servlet wird nicht gefunden - HTTP Error 503 Web Tier 7
lukas24680 Servlet pro Request Web Tier 2
C Pageing mit JSp&Servlet Web Tier 5
D JSP JSP integriert ein Servlet... Wie? Web Tier 7
I Servlet vor Browser URL-Direktzugriff schützen Web Tier 3
N Servlet ausführen Web Tier 26
B statische Html Seite als response erhalten (Servlet) Web Tier 3
A javax/servlet/jsp/jstl/core/Config Web Tier 1
F Servlet mapping ;-) Web Tier 3
H Servlet Mapping mit JSF Web Tier 8
B (JSP)+(Struts2)+(Servlet) Konfiguration web.xml Web Tier 2
W MVC mit Bean, JSP und Servlet Web Tier 6
T Button im Servlet - Werte übergeben Web Tier 2
J werte per post an servlet übergeben und auswerten Web Tier 3
T Bild durch anderes Bild ersetzen mit Servlet Web Tier 3
E Mein erstes Servlet Web Tier 8
S Servlet automatisch aufrufen Web Tier 2
J Kommunikation zwischen Servlet und EJB Web Tier 6
C Image in Servlet Web Tier 2
S Servlet File Upload (API oder JSPSmart download) Web Tier 4
N API Nutzung SERVLET Web Tier 12
J Memory Leak in Servlet nach längere Laufzeit Web Tier 6
ruutaiokwu template engine gesucht ohne abhängigkeit zum servlet container Web Tier 2
G Servlet Ausgabe richtig benutzen Web Tier 4
W Servlet auf sich selbst verweisen lassen (Anfängerfrage) Web Tier 6
M Servlet Ausführungsfehler Web Tier 4
D Servlet alle 6h ausführen Web Tier 5
M Servlet & JSP Organisation Web Tier 2
J seltsames Auslastungsproblem bei Servlet Web Tier 7
ruutaiokwu JSF - läuft ausserhalb des servlet-containers? Web Tier 5
R Direkten Servlet-Aufruf verhindern (JSP) Web Tier 3
K Formularweiterleitung an Servlet Web Tier 5
N Servlet: Problem mit getParameterValues Web Tier 4
J Dateiupload- Servlet Web Tier 14
H Probleme beim Aufrufen von Java- oder Servlet-Methoden aus Javascript Web Tier 2
G Kommunikation Servlet + Applikation Web Tier 4
megachucky Welche Servlet-Version benötigt GWT 2.0? Web Tier 13
X Servlet Select box Web Tier 6
S Java Servlet Content Type Web Tier 3
E Servlet zum speichern einer Datei in einer Datenbank Web Tier 3
M Servlet neuladen Web Tier 2
H Wie wurde ein Servlet aufgerufen Web Tier 2
J Servlet soll XML ausgeben und Javascript soll dieses einlesen Web Tier 3
H servlet fehlermeldung Web Tier 3
W JSP/Servlet Web Applikation programmierung Web Tier 9
J Faces response aus einem anderen Servlet heraus rendern Web Tier 4
E Servlet mit einem Link aufrufen? Web Tier 13
D Servlet FacesServlet is not available und Web Tier 3
S servlet bedienen mit get und post parameter Web Tier 10
S Laden von globalen Resourcen im Servlet Container..? Web Tier 3
T JBoss + Servlet + HTML Fileupload + Encoding Web Tier 1
2 Servlet: Pfad zu Webcontent Web Tier 6

Ähnliche Java Themen

Neue Themen


Oben