【发布时间】:2016-12-08 03:49:57
【问题描述】:
我的目标是从 Java 应用程序 (JA) 向 servlet (S) 发送一条简单消息,并将其显示在浏览器页面上。我希望每次运行 servlet 类(刷新浏览器页面)时,都会收到该消息。
我使用 BufferedWriter 在 JA 上流式传输输出,并在 S 上使用 BufferedReader 来接收它,但我想我做错了什么。
这是来自 JA 的代码 sn-p:
try{
URL url = new URL("http://(/*ip address*/:8080/FirstServlet/myfirstservlet");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
BufferedWriter out = new BufferedWriter( new OutputStreamWriter( conn.getOutputStream() ) );
out.write("testing");
out.flush();
out.close();
BufferedReader in = new BufferedReader( new InputStreamReader(conn.getInputStream()));
String response;
while( (response = in.readLine()) != null ) {
//System.out.println( response);
}
in.close();
}
catch (MalformedURLException ex) {
ex.printStackTrace();
}
catch (IOException iex) {
iex.printStackTrace();
}
这是来自 S 的代码:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class FirstServlet extends HttpServlet {
private final static String _USERNAME = "username";
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException , IOException {
PrintWriter out = res.getWriter();
BufferedReader bufferedReader = null;
StringBuilder stringBuilder = new StringBuilder();
char test = 'a';
try{
InputStream inputStream = req.getInputStream();
if (inputStream != null) {
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
char[] charBuffer = new char[128];
int bytesRead = -1;
while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
stringBuilder.append(charBuffer, 0, bytesRead);
out.println(charBuffer); //expecting this to be displayed on browser
}
} else {
stringBuilder.append("");
out.println("0");
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
我尝试将我的 JA 代码(在它自己的线程中运行)包装在一个 while(true) 循环中,但这似乎没有帮助。任何帮助,将不胜感激。谢谢!
【问题讨论】:
-
我相信你需要使用
HttpURLConnection而不是仅仅使用URLConnection,并且还要调用setRequestMethod("GET"),来发起正确的HTTP通信,这样servlet容器就知道,调用servlet的什么方法. -
@Jozef:不,OP 只是在寻找推送,但基本概念有误。 KS7X,您的 servlet 基本上是响应 Java 应用程序(在那个
response变量中),而不是您似乎期望的“浏览器页面”。其中哪一个对解决您的问题最有帮助? stackoverflow.com/q/25947790 或 stackoverflow.com/q/32426674? -
感谢@BalusC,这两个链接都为我提供了一条让我的应用程序正常工作的新途径。
标签: java html apache servlets bufferedreader