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
分享到:
相关推荐
通过阅读《Applet与Servlet之间的通信与交互》系列文档,我们可以深入理解这两种技术的协作机制,从而更好地设计和实现动态Web应用。文档中的实例代码和解释可以帮助开发者掌握具体的实现细节,提升开发效率。同时,...
【Applet与Servlet的通信技术】是Java编程中的一种重要机制,主要应用于基于Browser/Server模式的应用系统开发。Applet是运行在用户浏览器上的小型Java应用程序,能够提供丰富的用户交互体验,而Servlet则是运行在...
同时,该方法也使用了Java API提供的与网络通信相关的类来建立Applet与Servlet之间的通信。通过这种方式,可以实现Web文本页面的保护,并防止用户随意地下载和传播文本信息。 本文还讨论了该方法的实现过程,包括...
在构建多层网络应用时,Java Applet 和 Servlet 常常被一起使用。Applet 提供了构建强大、动态的界面到应用程序的便捷方法,而 Servlet 则为我们提供了高效处理 Web 或应用服务器请求的方式。Sun 的应用编程模型推荐...
**jasperreport报表模板预览:applet与servlet通信详解** JasperReport是一款强大的开源报表工具,它允许开发者创建复杂、美观的报告,并能够轻松地集成到Java应用程序中。在JasperReport中,预览报表是开发过程中...
- **Java Socket编程**:Applet和Servlet可以通过自定义的Socket协议进行通信,这种方式灵活,但需要处理网络连接和数据编码解码的问题。 4. **实例分析** 包含的文档"Applet与Servlet通讯的四种方法及比较.doc...
由于浏览器的安全模型,Applet在与Servlet通信时面临一些限制。Applet只能与发布它的服务器进行通信,不能直接访问本地文件系统或执行本地程序,也不能创建或接受非源服务器的socket连接。这使得直接从Applet访问...
下面将详细介绍Applet与Servlet如何通过网络进行数据交换,以及涉及到的关键技术点。 ### Applet与Servlet通信概述 Applet是一种可以在Web页面上运行的小型Java应用程序。Servlet则是一种服务器端的技术,用于处理...
标题与描述概述的知识点主要集中在Applet与Servlet之间的通信机制,以及如何利用这一机制操作数据库。这涉及到Java的网络编程、数据库访问技术以及Applet与Servlet的交互方式。以下是对这些知识点的详细解析: ### ...
1. **初始化通信**:Applet通过HTTP请求与服务器上的Servlet建立连接,可能通过URL或者AJAX请求进行。 2. **数据交换**:Applet发送数据到Servlet,可能是用户输入或者Applet内部计算的结果。Servlet接收到数据后,...
理论结合实际,分门别类讲述了Servlet编程方法、会话管理、服务器端图形生成、网络编程、上传和下载文件、使用数据库、在数据库中存取图象、Servlet链、Servlet服务器端包含、Applet和Servlet通信、在Servlet中发送...
另一种方式是Applet直接通过URLConnection或HttpURLConnection与Servlet通信,发送请求并接收响应。 2. **URLConnection类**: - TestURLConnection这个文件可能是一个演示如何使用URLConnection来建立Servlet和...
1 初识Applet和Servlet网络通信 11. 2. 2 Applet和Servlet之间传递对象 11. 3 Applet和Servlet之间实现远程方法调用 11. 3. 1 远程方法调用中的设计模式 11. 3. 2 设计应用程序子协议 11. 3. 3 远程方法调用的...
本案例中,"A-S.rar_servlet applet"是一个示例项目,展示了如何利用序列化对象在Servlet和Applet之间进行通信,这对于理解Java网络编程以及Web应用程序的交互机制具有很高的学习价值。 首先,让我们深入了解一下...
本文档主要探讨的是Java Applet如何与浏览器进行通信,这是理解Web应用程序交互机制的关键部分。 一、Java Applet的基本概念 Java Applet是一种小型的Java程序,它可以被浏览器执行,提供动态的、交互式的网页内容...
本教程将深入探讨Java Servlet在处理多媒体信息、集成Java Server Pages (JSP)技术、实现Servlet与Applet的通信以及Servlet间的通信等高级主题。 1. **处理多媒体信息** 在Servlet中处理多媒体信息通常涉及到读取...
- 交互与通信:如果需要将扫描的图片上传到服务器,Applet可以通过`doGet()`或`doPost()`方法与Servlet进行通信,将图片数据作为HTTP请求的一部分发送。 5. **安全性和限制**:由于Applet运行在客户端,因此存在...
Servlet的框架设计使得开发者能够专注于业务逻辑,而无需关心低级别的网络通信细节。Servlet API还提供其他辅助方法,如获取Servlet配置信息、参数、日志记录等,极大地提高了开发效率和灵活性。 总的来说,Servlet...
容器能够确保Servlet对象对每个请求进行正确处理,从而实现高效且安全的网络通信。 #### 二、Tomcat配置与启动 Tomcat作为广为使用的开源Web服务器,基于Java语言编写,需配置特定环境才能正常运行。配置的关键...