在applet中用URLConnection访问servlet为什么没反应?同样的代码在jsp中就可以。
import java.applet.Applet;import java.io.BufferedInputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.io.Reader;import java.net.URL;import java.net.URLConnection;import javax.swing.JApplet;public class AppletTest extends JApplet {public void init(){try{String addr = "http://192.168.100.162:8080/Payment/Dser"; URL url = new URL(addr); URLConnection conn = url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false); conn.setRequestProperty("Content-Type", "application/x-java-serialized-object"); InputStream inS = conn.getInputStream(); String header = conn.getHeaderField(0); inS = new BufferedInputStream(inS); Reader r = new InputStreamReader(inS); int c; System.out.println("===================输出结果======================"); while ( (c = r.read()) != -1) System.out.print( (char) c); inS.close();}catch(Exception e){}}}?上面这是applet代码。
?
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>here</title></head><body><APPLET codebase="." code="AppletTest.class" WIDTH=200 HEIGHT=100 > </APPLET></body></html>
?
上面是页面代码。
?
package com.jhhz.test;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class Dser */public class Dser extends HttpServlet {private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Dser() { super(); // TODO Auto-generated constructor stub }/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setHeader("pragma", "no-cache");response.setHeader("cache-control", "no-cache");response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();out.print("123456789");System.out.println("in!");out.flush();out.close();}}?
上面是servlet代码。
?
把applet代码复制到jsp中测试完全成功,可是一用html调用applet,servlet就没反应,这是怎么回事呢?
?
问题解决了servlet应该这样写:
package com.jhhz.test;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class CallServlet */public class Dser extends HttpServlet {private static final long serialVersionUID = 1L;/** * @see HttpServlet#HttpServlet() */public Dser(){super();}public void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, java.io.IOException {(req.getInputStream());resp.setContentType("application/octest-stream");ByteArrayOutputStream byteout = new ByteArrayOutputStream();DataOutputStream out = new DataOutputStream(byteout);out.writeUTF("11232");out.flush();byte buf[] = byteout.toByteArray();resp.setContentLength(buf.length);ServletOutputStream servletout = resp.getOutputStream();servletout.write(buf);servletout.close();System.out.println("in!");}}?
而applet应该这样写:
import java.applet.Applet;import java.awt.Graphics;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;public class Applet2 extends Applet {/** * */private static final long serialVersionUID = -7072407105533722380L;String response;public void init() {try {String addr = "http://192.168.100.162:8080/Payment/Dser";java.net.URL url = new java.net.URL(addr);java.net.URLConnection con = url.openConnection();con.setUseCaches(true);con.setDoOutput(true);con.setDoInput(true);DataInputStream in = new DataInputStream(con.getInputStream());response = in.readUTF();in.close();} catch (Exception e) {e.printStackTrace();}}public void paint(Graphics g) {g.drawString("read from server :" + response, 10, 20);}}?