Как опубликовать параметры для тега импорта JSTL (‹c:import›)?

В настоящее время я использую тег JSTL на странице JSP для импорта содержимого внешней страницы:

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

К сожалению, параметры теперь становятся длиннее. Поскольку они закодированы как параметры GET в URL-адресе, теперь я получаю сообщение об ошибке "414: Request-URL too Large". Есть ли способ POST параметров на внешний URL? Возможно, вы используете другую библиотеку тегов/тегов?


person MrBurns    schedule 11.06.2009    source источник


Ответы (2)


После просмотра http://www.docjar.com/html/api/org/apache/taglibs/standard/tag/common/core/ImportSupport.java.html и http://www.docjar.com/html/api/org/apache/taglibs/standard/tag/el/core/ImportTag.java.html, я пришел к выводу, что вы не можете выполнять POST-запрос, используя тег import.

Я предполагаю, что единственный выбор, который у вас есть, - это использовать собственный тег - должно быть довольно легко написать тег apache httpclient, который принимает некоторый параметр POST и выводит текст ответа.

person Chii    schedule 20.10.2009

Вам понадобится Сервлет с java.net.URLConnection для этого.

Основной пример:

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`.
person BalusC    schedule 15.12.2009