尝试将 applet 与 servlet 通信的协议错误
Protocol error trying to communicate applet to servlet
当我将我的名字从 applet 发送到 servlet 时遇到 "java.net.UnknownServiceException: protocol doesn't support output" 问题。
我试过 Sending object to Servlet throws an error I cant resolve 但它没有解决我的问题。
我的小程序代码是:
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class AppletToServlet extends HttpServlet {
// Getting a String object from the applet and send it back.
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
response.setContentType("application/x-java-serialized-object");
InputStream inputStream = request.getInputStream();
ObjectInputStream inputFromApplet = new ObjectInputStream(inputStream);
String string = (String) inputFromApplet.readObject();
// getting string value and passing to applet
OutputStream outputStream = response.getOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
objectOutputStream.writeObject(string);
objectOutputStream.flush();
objectOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
servlet 代码是:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class AppletToServletExample extends Applet {
private TextField inputField = new TextField(10);
private TextField resultField = new TextField(10);
public void init() {
// add input label, field and send button
add(new Label("Input Your Name", Label.RIGHT));
add(inputField);
Button sendButton = new Button("Send");
add(sendButton);
sendButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SendData();
}
});
// add output label as a non editable field
add(new Label("Output:", Label.RIGHT));
add(resultField);
resultField.setEditable(false);
}
// Get a connection to the servlet.
private URLConnection getServletConnection() throws MalformedURLException,
IOException {
URL urlServlet = new URL(getCodeBase(), "applettoservlet");
URLConnection con = urlServlet.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setRequestProperty("Content-Type",
"application/x-java-serialized-object");
return con;
}
// Send the inputField data to the servlet and show the result in the
// outputField.
private void SendData() {
try {
String input = inputField.getText();
// send data to the servlet
URLConnection con = getServletConnection();
OutputStream outputStream = con.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(outputStream);
oos.writeObject(input);
oos.flush();
oos.close();
// receive result from servlet
InputStream inputStream = con.getInputStream();
ObjectInputStream inputFromServlet = new ObjectInputStream(
inputStream);
String result = (String) inputFromServlet.readObject();
inputFromServlet.close();
inputStream.close();
// show result
resultField.setText(result);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
我几乎到处搜索但无法解决。
你运行小程序在哪里?您是否真的将它嵌入到页面上并通过某种网络服务器请求它?
代码
URL urlServlet = new URL(getCodeBase(), "applettoservlet");
只有当您从 web/application-server 提供的页面 运行 中安装小程序时,才会按预期工作。
尝试添加
System.out.println(urlServlet);
检查正在使用什么 url。
当我将我的名字从 applet 发送到 servlet 时遇到 "java.net.UnknownServiceException: protocol doesn't support output" 问题。 我试过 Sending object to Servlet throws an error I cant resolve 但它没有解决我的问题。 我的小程序代码是:
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class AppletToServlet extends HttpServlet {
// Getting a String object from the applet and send it back.
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
response.setContentType("application/x-java-serialized-object");
InputStream inputStream = request.getInputStream();
ObjectInputStream inputFromApplet = new ObjectInputStream(inputStream);
String string = (String) inputFromApplet.readObject();
// getting string value and passing to applet
OutputStream outputStream = response.getOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
objectOutputStream.writeObject(string);
objectOutputStream.flush();
objectOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
servlet 代码是:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class AppletToServletExample extends Applet {
private TextField inputField = new TextField(10);
private TextField resultField = new TextField(10);
public void init() {
// add input label, field and send button
add(new Label("Input Your Name", Label.RIGHT));
add(inputField);
Button sendButton = new Button("Send");
add(sendButton);
sendButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SendData();
}
});
// add output label as a non editable field
add(new Label("Output:", Label.RIGHT));
add(resultField);
resultField.setEditable(false);
}
// Get a connection to the servlet.
private URLConnection getServletConnection() throws MalformedURLException,
IOException {
URL urlServlet = new URL(getCodeBase(), "applettoservlet");
URLConnection con = urlServlet.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setRequestProperty("Content-Type",
"application/x-java-serialized-object");
return con;
}
// Send the inputField data to the servlet and show the result in the
// outputField.
private void SendData() {
try {
String input = inputField.getText();
// send data to the servlet
URLConnection con = getServletConnection();
OutputStream outputStream = con.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(outputStream);
oos.writeObject(input);
oos.flush();
oos.close();
// receive result from servlet
InputStream inputStream = con.getInputStream();
ObjectInputStream inputFromServlet = new ObjectInputStream(
inputStream);
String result = (String) inputFromServlet.readObject();
inputFromServlet.close();
inputStream.close();
// show result
resultField.setText(result);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
我几乎到处搜索但无法解决。
你运行小程序在哪里?您是否真的将它嵌入到页面上并通过某种网络服务器请求它?
代码
URL urlServlet = new URL(getCodeBase(), "applettoservlet");
只有当您从 web/application-server 提供的页面 运行 中安装小程序时,才会按预期工作。 尝试添加
System.out.println(urlServlet);
检查正在使用什么 url。