Как вызвать локальный сервлет с URL-соединением без указания полного URL-адреса?

Я вызываю локальный сервлет из jsp, сервлет просто возвращает строку json:

URL url = new URL("http://myapp.appspot.com/myservlet");
URLConnection conn = url.openConnection();
conn.setConnectTimeout(5000);
InputStream is = conn.getInputStream();

StringWriter writer = new StringWriter();
IOUtils.copy(is, writer, "UTF-8");

String jsonStr = writer.toString();

Могу ли я сделать это с относительным путем, чтобы он работал как локально, так и на развернутом экземпляре?

2 ответа

Решение

Вы можете использовать JSTL с тегом

<c:import>   

В качестве альтернативы для вашего размещенного кода, вы можете использовать

   String requestURL = request.getRequestURL().toString();
   String servletPath = request.getServletPath();
   String serverPath = requestURL.substring(0,requestURL.indexOf(servletPath));
   URL url = new URL(serverPath + "/myservlet");

Вы имеете в виду, как это?

String urlString = "http://localhost/myservlet/";

localhost - это псевдоним 127.0.0.1, который всегда является "локальным компьютером".

ServletRequest.getServerPort () позволит вам узнать порт, к которому подключен пользователь.

В зависимости от того, где это происходит, вам действительно может понадобиться ServletRequest.getRequestDispatcher(), который обходит сетевой уровень и остается внутри контейнера сервлета.

Вы можете обернуть HttpResponse и отправить его в RequestDispatcher, а затем извлечь строку, созданную примерно так:

http://goo.gl/kRW1b
Другие вопросы по тегам