`

applet与servlet的网络通信

阅读更多
applet与servlet的网络通信的例子

新建web项目,项目结构如下图:



package client;

import java.applet.Applet;
import java.awt.Button;
import java.awt.HeadlessException;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class NetEcho extends Applet implements ActionListener {

	TextField txtOutput;
	Button btnOutput;
	TextArea txtInput;
	Label lblOutput;
	Label lblInput;
	int turnOutput = 0;

	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub

		if (txtOutput.getText() == null || txtOutput.getText().equals("")) {
			return;
		}

		try {
			URL url = new URL(
					"http://localhost:8080/appletServlet/NetEchoServlet"); // 打开连接
			URLConnection con = url.openConnection();
			con.setUseCaches(false); // 不用浏览器缓存
			con.setDoOutput(true);
			con.setDoInput(true);
			// 设置请求消息头
			con.setRequestProperty("Content-type", "application/octet-stream");
			turnOutput += 1;
			ByteArrayOutputStream byteOut = new ByteArrayOutputStream();

			DataOutputStream out = new DataOutputStream(byteOut);
			out.writeInt(turnOutput);
			out.writeUTF(txtOutput.getText());
			out.flush();

			byte[] buff = byteOut.toByteArray();
			// 设置请求消息中数据长度
			con.setRequestProperty("Content-length", "" + buff.length);
			DataOutputStream buffout = new DataOutputStream(con
					.getOutputStream());
			buffout.write(buff); // 将缓冲区中数据发出
			buffout.flush();
			buffout.close();
			// 读取输入
			DataInputStream in = new DataInputStream(con.getInputStream());
			txtInput.append(in.readInt() + ":" + in.readUTF() + "\n");
			in.close();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public NetEcho() {
		super();
	}

	public void destroy() {
		// Put your code here
	}

	public String getAppletInfo() {
		return "This is my default applet created by Eclipse";
	}

	public void init() {
		// Put your code here
		lblOutput = new Label("发送的数据");
		lblInput = new Label("接收的数据");

		txtOutput = new TextField();
		txtOutput.setColumns(10);

		this.add(lblOutput);
		this.add(txtOutput);
		btnOutput = new Button("发送");
		this.add(btnOutput);
		txtInput = new TextArea("", 20, 30);
		this.add(lblInput);
		this.add(txtInput);
		btnOutput.addActionListener(this);

	}

	public void start() {
		// Put your code here
	}

	public void stop() {
		// Put your code here
	}

}


嵌入applet的html文件

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>applet发送至servlet例子</title>
    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
    
  </head>
  
  <body>
    
    <applet codebase="." 
            code="client.NetEcho.class" 
            name="NetEcho" 
            width="320" 
            height="240">
      
        
    </applet>
  </body>
</html>


servlet的源码:

package server;

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;

public class NetEchoServlet extends HttpServlet {

	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
//设置响应头MIME类型
		response.setContentType("application/octet-stream");
		
		DataInputStream in = new DataInputStream(request.getInputStream());
		ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
		
		DataOutputStream out = new DataOutputStream(byteOut);
		
//		读
		int i = in.readInt();
		String j = in.readUTF();
		
		out.writeInt(i); //写回客户端
		out.writeUTF(j);
		out.flush();
		
		byte[] buff = byteOut.toByteArray();
		response.setContentLength(buff.length);
		
//		取得输出流
		ServletOutputStream httpOut = response.getOutputStream();
		httpOut.write(buff); //发送
		httpOut.close();
	}

}


配置文件:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>NetEchoServlet</servlet-name>
    <servlet-class>server.NetEchoServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>NetEchoServlet</servlet-name>
    <url-pattern>/NetEchoServlet</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


在tomcat中部署后的目录结构:


其中classes目录下的结构:


双击html文件,执行结果如下:



所有源码见附件:
  • 大小: 13.1 KB
  • 大小: 18.4 KB
  • 大小: 6.5 KB
  • 大小: 15.2 KB
分享到:
评论
3 楼 zhulin0504 2015-02-06  
怎么访问NetEcho.html页面呀???
2 楼 jiao_zg22 2014-03-31  
applet到servlet之后,我想在servlet里面用session回话,为什么总是为null?
1 楼 tokay 2012-08-15  

permission java.security.AllPermission;
才可以运行

相关推荐

    深入java servlet网络编程

    理论结合实际,分门别类讲述了Servlet编程方法、会话管理、服务器端图形生成、网络编程、上传和下载文件、使用数据库、在数据库中存取图象、Servlet链、Servlet服务器端包含、Applet和Servlet通信、在Servlet中发送...

    深入Java Servlet网络编程

    1 初识Applet和Servlet网络通信 11. 2. 2 Applet和Servlet之间传递对象 11. 3 Applet和Servlet之间实现远程方法调用 11. 3. 1 远程方法调用中的设计模式 11. 3. 2 设计应用程序子协议 11. 3. 3 远程方法调用的...

    JSP訳文--工具--Java

    ASPer看过来 困扰JSP的一些问题:jsp和宏之间的争议 jsp的5个不足之处 JSP不能代替Servlet Resin中的JSP范例 JSP发送邮件 jsp如何与ejb通信 Servlet和JSP的通信 jsp与applet通信 在JSP中...

    JAVA案例开发集锦.part1

    案例3 Applet与Applet在页内的通信/13 案例4 电子相册/16 案例5 百叶窗效果/19 案例6 波浪彩虹文字/27 案例7 3D立体渐层文字/35 案例8 飞行文字/38 案例9 聚光灯效果/41 案例10 伸展文/45 本章小结/49 第2章 Java与...

    JAVA案例开发集锦.part2

    案例3 Applet与Applet在页内的通信/13 案例4 电子相册/16 案例5 百叶窗效果/19 案例6 波浪彩虹文字/27 案例7 3D立体渐层文字/35 案例8 飞行文字/38 案例9 聚光灯效果/41 案例10 伸展文/45 本章小结/49 第2章 Java与...

    JAVA案例开发集锦.part3

    案例3 Applet与Applet在页内的通信/13 案例4 电子相册/16 案例5 百叶窗效果/19 案例6 波浪彩虹文字/27 案例7 3D立体渐层文字/35 案例8 飞行文字/38 案例9 聚光灯效果/41 案例10 伸展文/45 本章小结/49 第2章 Java与...

    Java语言网络编程教学大纲

    本课程主要介绍Java程序设计的基础知识,讲解Java程序设计的一般知识,讲解Java网络编程,包括Applet、网络通信技术、Java安全技术、JavaBean组件、套接字编程、Servlet和JSP技术等。 本课程的目的是通过学习,使...

    Java案例开发锦集

    案例6 用Servlet实现页面注册和登录 案例7 运用Servlet实现BBS功能 案例8 侦听Web服务器信息 第九章 Java与网络 案例1 显示你的IP 案例2 用Socket进行客户与服务器通信 案例3 利用UDP ...

    《Java编程技巧典型案例解析》随书光盘

    实例43 用Java实现P2P网络通信 实例45 Java SMTP协议电子邮件传送剖析 实例46 Java Applet与浏览器间的通信技术 实例47 Java实现邮件群发 实例48 应用Java和JSP设计完整的文件上传系统 实例49 Java编程序...

    北大Java语言程序设计(ppt课件)

    例外处理(Exception) 第七讲 多线程 第八讲 图形用户界面与事件处理 第九讲 Java Applet 第十讲 网络通信 第十一讲 J2EE JDBC J2EE简介 Servlet JSP ...

    Java核心开发技术从入门到精通.谭贞军.扫描版.part1

    第16课到22课技术提高篇,分别讲解Java网络通信开发、HTML和XML、JSP、JavaBean和Servlet、数据库、JDBC技术和SQL语句;第23课和24课是综合应用篇,分别讲解了使用Java开发画图板和数据库项目——公司管理系统的方法...

    Java核心开发技术从入门到精通.谭贞军.扫描版.part2

    第16课到22课技术提高篇,分别讲解Java网络通信开发、HTML和XML、JSP、JavaBean和Servlet、数据库、JDBC技术和SQL语句;第23课和24课是综合应用篇,分别讲解了使用Java开发画图板和数据库项目——公司管理系统的方法...

    重庆大学java PPT 2011版

    重庆大学java PPT 2011版 杨瑞龙 第01章 Java概述 第02章 程序设计基础 第03章 数组 第04,5章 Java的面向对象特性 第06-Java标准类库-1 第06-Java标准类库-2 ...第11章-网络通信 第12-13章 Servlet与JSP

    《JSP技术大全》pdg格式

    第四部分给出使用了JavaServer Page的大量的上下文——其如何与servlet、applet、Perl脚本、FTP、CGI、ASP和其他服务器端代理进行通信。在书的最后部分还包含三个附录:Servlet API、JSP API和HTTP参考。  最后,我...

    java jdk实列宝典 光盘源代码

    applet间通信; 汉诺塔游戏, 16 j2se5.0 新特性 自动装箱和拆箱; 新的for循环; 枚举类型; 静态导入; 格式化输出; 使用ProcessBuilder执行本地命令; 泛型编程; 监控和管理虚拟机;新的线程执行架构; 线程锁; 线程条件;...

    JAVA 范例大全 光盘 资源

    实例199 JSP与Servlet之间的跳转 644 实例200 简单的JSP多人聊天室 653 实例201 Servlet生成的动态图片 658 实例202 简单的JSP上传文件 661 实例203 用Servlet获取Web服务器信息 666 实例204 可选择的图形...

    java源码包---java 源码 大量 实例

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java源码包2

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    java源码包3

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

Global site tag (gtag.js) - Google Analytics