2009-06-11 2 views
2

Ich bin mit JSTL-Tag zur Zeit in einer JSP-Seite, den Inhalt einer externen Seite zu importieren:Wie kann ich Parameter für das JSTL-Import-Tag (<c:import>) buchen?

<c:import url="http://some.url.com/"> 
    <c:param name="Param1" value="<%= param1 %>" /> 
    ... 
    <c:param name="LongParam1" value="<%= longParam1 %>" /> 
</c:import> 

Leider sind die Parameter jetzt länger. Da sie als GET Parameter in der URL codiert sind, bekomme ich jetzt "Fehler 414: Request-URL zu groß". Gibt es einen Weg zu POST die Parameter der externen URL? Vielleicht mit einer anderen Tag/Tag-Bibliothek?

Antwort

3

Nach dem Durchsehen http://www.docjar.com/html/api/org/apache/taglibs/standard/tag/common/core/ImportSupport.java.html und http://www.docjar.com/html/api/org/apache/taglibs/standard/tag/el/core/ImportTag.java.html, bin ich zu der Schlussfolgerung gekommen, dass Sie keine POST-Anfrage mit dem import Tag machen können.

Ich denke, die einzige Wahl, die Sie haben, ist, ein benutzerdefiniertes Tag zu verwenden - es sollte ziemlich einfach sein, ein Apache httpclient Tag zu schreiben, das einige POST-Parameter nimmt und den Antworttext ausgibt.

1

Dafür benötigen Sie eine Servlet mit java.net.URLConnection.

Grund Beispiel:

String url = "http://example.com"; 
String charset = "UTF-8"; 
String query = String.format("Param1=%s&LongParam1=%d", param1, longParam1); 

URLConnection urlConnection = new URL(url).openConnection(); 
urlConnection.setUseCaches(false); 
urlConnection.setDoOutput(true); // Triggers POST. 
urlConnection.setRequestProperty("accept-charset", charset); 
urlConnection.setRequestProperty("content-type", "application/x-www-form-urlencoded"); 

OutputStreamWriter writer = null; 
try { 
    writer = new OutputStreamWriter(urlConnection.getOutputStream(), charset); 
    writer.write(query); 
} finally { 
    if (writer != null) try { writer.close(); } catch (IOException logOrIgnore) {} 
} 

InputStream result = urlConnection.getInputStream(); 
// Now do your thing with the result. 
// Write it into a String and put as request attribute 
// or maybe to OutputStream of response as being a Servlet behind `jsp:include`. 
Verwandte Themen