我的目标是从Java应用程序(JA)向servlet(S)发送一条简单的消息,并将其显示在浏览器页面上。我希望每次运行servlet类(刷新浏览器页面)时,我都会收到消息。
我使用BufferedWriter来流式传输S上的JA和BufferedReader以接收它,但我想我做错了。
以下是JA的代码片段:
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();
}
}
我尝试在while(true)循环中包装我的JA代码(在自己的线程中运行),但这似乎没有帮助。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:-1)
有两个错误:
JA - 从servlet发送请求和返回响应字符串:
try {
URL url = new URL("http://(/*ip address*/:8080/FirstServlet/myfirstservlet");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestProperty("Content-Type", "text/html");
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
out.write("testing");
out.flush();
out.close();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String responsePart;
StringBuilder resultString = new StringBuilder();
while ((responsePart = in.readLine()) != null) {
resultString.append(responsePart);
}
in.close();
System.out.println("Response from servlet: " + resultString);
} catch (MalformedURLException ex) {
ex.printStackTrace();
} catch (IOException iex) {
iex.printStackTrace();
}
S - 返回由JA发送回JA的字符串:
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
dummy();
PrintWriter out = res.getWriter();
BufferedReader bufferedReader = null;
StringBuilder stringBuilder = new StringBuilder();
char test = 'a';
res.setContentType("text/html");
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);
}
//Return string to JA
out.println(stringBuilder.toString());
} else {
stringBuilder.append("");
out.println("0");
}
} catch (IOException ex) {
ex.printStackTrace();
}
}