如何在Jsp中使用JDBC来联结MySql

在以前的文章中,豆腐曾经讲过一种用JDBC-ODBC Bridge 来连接数据库的文章 一个 连接数据库的 javaBean(可在 Jsp 中调用),由于这样连接数据库的效率是 很低的,所以大家其实实际在使用的时候都是用的JDBC,现在我就给大家来说说如何在Win2K下使用JDBC 来连接 MySql的文章 首先是mySQL的JDBC驱动程序的下载,下载地址在:http://download.sourceforge.net/pub/mirrors/mysql/Downloads/Contrib/mm.mysql.jdbc-1.2c.tar.gz 下载结束后,把这个zip文件随意解压到任意的目录,我们假设目录是:d:jdbc,ok!下面我们来设置ClassPAth 以保证我们的WebServer能够访问到这个驱动程序 设置方法如下: 1.我的电脑->系统->设置环境变量 如果已经有ClassPAth 就编辑,否则增加一个ClassPAth 2.设置ClassPAth的值:d:jdbcmm.mysql.jdbc-1.2cmysql_comp.jar 3.重新启动 服务器 等到启动完成后,即可 JDBC 设置完成以后,很多的人可能还不是很清楚我们的JDBC 是否真正的安装成功了,我们就用一个JDBC联结MySQl的程序来检测一下 看我们是否是真正的安装成功了 代码如下: <%@ page contentType="text/html;charset=gb2312" %> <% java.sql.Connection conn; java.lang.String strConn; Class.forName("org.gjt.mm.mysql.Driver").newInstance(); sqlConn= java.sql.DriverManager.getConnection("jdbc:mysql://localhost/test","root",""); %> 代码虽然简单,但是却已经完成了我们测试MySql JDBC 安装的成功与否。 本篇文章的完成,多亏了 东方一蛇 的大力帮助,在此表示感谢。 <淘宝热门商品:
 

199.00 元  

JACK JONES专柜正品白色内绒毛设计羊毛毛

 

288.00元  

【果然瘦身】(关于减肥药)瘦脸/瘦腿/小腰(专业指导你减肥)


来源:程序员网

小小豆叮

Java Socket编程之二

Java面向连接的类 回忆一个,一个客户端向一个正在监听的服务器socket发出一个连接.客户端的sockets是用Socket类建立的.下面的程序建立了一个客户端的socket并且连接到了一个主机: Socket clientSocket = new Socket("merlin", 80); 第一个参数是你想要连接的主机的名称,第二个参数是端口号.一个主机名称指定了目的的名称.端口号指定了由哪个应用程序来接收.在我们的情况下,必须指定80,因为它是默认的HTTP协议的端口.另外的知名的端口列在表9.1中,看: 知名的端品: echo 7 daytime 13 daytime 13 ftp 21 telnet 23 smtp 25 finger 79 http 80 pop3 110 因为Socket类是面向连接的,它提供了一个可供读写的流接口.java.io包中的类可以用来访问一个已连接的socket: DataOutputStream outbound = new DataOutputStream( clientSocket.getOutputStream() ); DataInputStream inbound = new DataInputStream( clientSocket.getInputStream() ); 一旦流建立了,一般的流操作就可以做了: outbound.writeBytes("GET / HTTP/1.0\r\n\r\n); String responseLine; while ( (responseLine = inbound.readLine()) != null) { System.out.println(responseLine); } 以上的小程序请求了一个WEB页面并且把它显示出来.当程序完成之后,连接必须关闭. outbound.close(); inbound.close(); clientSocket.close(); 注意socket流必须首先关闭.所有的的socket流必须在socket关闭之前关闭.这个小程序非常地简单,但是所有的客户端程序都必须遵首下面的基本的步骤: 1.建立客户端socket连接. 2.得到socket的读和写的流. 3.利用流. 4.关闭流. 5.关闭socket. 使用一个服务器端的socket只是有一点复杂,它将在下面讲到. Java Socket编程之一 Java Socket编程之二 Java Socket编程之三 Java Socket编程之四 Java Socket编程之五 <淘宝热门商品:
 

¥:60.00 

燕窝饼店-皇冠信誉.纯中药美白.丰胸.减肥.排毒饼干.美丽吃出来

★燕窝饼店★燕窝全麦排毒饼干**排毒、养颜、美肤**

 

68.00 元  

SOCOOL时尚女包五皇冠店~美一天~每一天~批发V零售

★五皇冠-SUPER LOVER黑白奶牛个性秋时尚翻盖斜挎包-3902★


来源:程序员网

小小豆叮

Java布局管理器深入讨论

我们都知道,java的GUI界面定义是由awt类和swing类来完成的。它在布局管理上面采用了容器和布局管理分离的方案。也就是说,容器只管将其他小件放入其中,而不管这些小件是如何放置的。对于布局的管理交给专门的布局管理器类(LayoutManager)来完成。 其实,java在GUI方面应该是并不成功的。Awt类和swing类的结构非常复杂,加上充斥其间的子类继承和接口实现,使得要想掌握这两个类非常困难。这也是很多的java程序员抱怨的事情,但GUI已经成了程序发展的方向,所以这里我们也得勉为其难了。 现在我们来看java中布局管理器的具体实现。我们前面说过,java中的容器类(Container),它们只管加入小件(Meta),也就是说,它只使用自己的add()方法向自己内部加入小件。同时他记录这些加入其内部的小件的个数,可以通过container.getComponentCount()方法类获得小件的数目,通过container.getComponent(i)来获得相应小件的句柄。然后LayoutManager类就可以通过这些信息来实际布局其中的小件了。 java已经为我们提供了几个常用的布局管理器类,例如:BorderLayout、FlowLayout、GridBagLayout等等。但在实际的布局上,我们还是会有其他的需要。我在不久前的一个问题中曾经要一个垂直的流式布局,我称之为VflowLayout,其实BoxLayout和GridBagLayout可以完成类似的工作,但前者是swing类的成员,我的客户端是一个applet,不能使用,而后者必须在类生成的时候指定列数,而失去了灵活性,所以我决定重写一个自己的布局管理器来实现。经过分析,所有的LayoutManager都要实现一个接口,就是LayoutManager Inerface或者是他的一个子接口LayoutManager2 Interface,后者用于复杂的布局管理,例如GridCardLayout。LayoutManager有五个方法需要实现,分别是: 1、public void addLayoutComponent(String name, Component comp); 2、public void removeLayoutComponent(Component comp); 3、public Dimension preferredLayoutSize(Container container); 4、public Dimension minimumLayoutSize(Container container); 5、public void layoutContainer(Container container); 第一个方法其实就是你在使用container.add(String name,component comp);时调用的方法,例如BorderLayout为布局管理器时。但在FlowLayout中由于没有其他的附加信息,所以不需要填充这个方法。相应的第二个方法也就不需要填充了。真正核心的方法是第三个和第五个方法,前者是最终确定Container有多大的,而后者就是决定Container中各个小件的实际位置的了。也就是说,当我们用container.setLayout(LayoutManager)后,再加入小件后,最后系统做的工作其实是LayoutManager. layoutContainer(container);和container.setSize(LayoutManager. PreferredLayoutSize(container));。下面是我的新类:VflowLayout。 package render_account; import java.awt.*; import java.io.*; public class VFlowLayout implements LayoutManager,Serializable{ int hgap; int vgap; public VFlowLayout(){ this(5,5); } public VFlowLayout(int i,int j){ this.hgap=i; this.vgap=j; } public void addLayoutComponent(String name, Component comp){ } public void removeLayoutComponent(Component comp){ } public Dimension preferredLayoutSize(Container container){ synchronized(container.getTreeLock()){ Dimension dimension1=new Dimension(0,0); int i=container.getComponentCount(); for(int j=0;j0) dimension1.height+=vgap; dimension1.height+=dimension2.height; } } Insets insets=container.getInsets(); dimension1.height+=insets.top+insets.bottom+vgap*2; dimension1.width+=insets.left+insets.right+hgap*2; Dimension dimension=dimension1; return dimension; //return(new Dimension(50,200)); } } public Dimension minimumLayoutSize(Container container){ synchronized(container.getTreeLock()){ Dimension dimension1=new Dimension(0,0); int i=container.getComponentCount(); for(int j=0;j0) dimension1.height+=vgap; dimension1.height+=dimension2.height; } } Insets insets=container.getInsets(); dimension1.height+=insets.top+insets.bottom+vgap*2; dimension1.width+=insets.left+insets.right+hgap*2; Dimension dimension=dimension1; return dimension; } } public void layoutContainer(Container container){ synchronized(container.getTreeLock()){ Insets insets=container.getInsets(); int vSpace=container.getSize().height-(insets.top+insets.bottom+vgap*2); int componentCount=container.getComponentCount(); int left=insets.left+hgap; int totalHeight=0; int width=0; int componentStart=0; for(int i=0;i0) totalHeight+=vgap; totalHeight+=dimension.height; width=Math.max(width,dimension.width); }else{ moveComponents(container,insets.top+vgap,left,width,componentStart,i); totalHeight=0; left+=hgap+width; width=dimension.width; componentStart=i; } } } moveComponents(container,insets.top+vgap,left,width,componentStart,componentCount); } } private void moveComponents(Container container,int top,int left,int width,int componentStart,int componentEnd){ synchronized(container.getTreeLock()){ for(int i=componentStart;i
 

105.00 元 

Levi's 复古铜系列情侣款女装牛仔裤

 

¥:4.00 

蓉蓉de美女加工厂 打造淘宝最低价


来源:程序员网

小小豆叮

Java Socket编程之五

简单的WEB服务器 一个简单的WEB服务器将由列表9.2这样构建.当然,还必须要对方法和回应事件进行改进.简单的服务器不会分析和存储请求头.新的WEB服务器将分析和存储请求,为以后的处理作准备.为了达到这个目的,你必须有一个包含HTTP请求的类. HTTPrequest类 列表9.5列出了一个完整的HTTPrequest类.这个类必须包括一个请求头所需的所有信息. 列表9.5.HTTPrequest类. import java.io.*; import java.util.*; import java.net.*; import NameValue; /** * 这个类有一个HTTP请求的所有信息 */ public class HTTPrequest { public String version; public String method; public String file; public Socket clientSocket; public DataInputStream inbound; public NameValue headerpairs[]; /** * 建立一个这个类的实例 */ public HTTPrequest() { version = null; method = null; file = null; clientSocket = null; inbound = null; inbound = null; headerpairs = new NameValue[0]; } /** * 加入一个名称/值对到核心数组 */ public void addNameValue(String name, String value) { try { NameValue temp[] = new NameValue[ headerpairs.length + 1 ]; System.arraycopy(headerpairs, 0, temp, 0, headerpairs.length); temp[ headerpairs.length ] = new NameValue(name, value); headerpairs = temp; } catch (NullPointerException npe) { System.out.println("NullPointerException while adding name-value: " + npe); } } /** * 以字符串的形式归还这个类 */ public String toString() { String s = method + " " + file + " " + version + "\n"; for (int x = 0; x < headerpairs.length; x++ ) s += headerpairs[x] + "\n"; return s; } } NameValue类简单地存储了两个字符串:name 和 value.当一个新的对要被加入时,一个新的数组将被分配.新的数组接受了旧的数组和新的成员.旧的数组然后被一个新建的对象覆盖了. Java Socket编程之一 Java Socket编程之二 Java Socket编程之三 Java Socket编程之四 Java Socket编程之五 <淘宝热门商品:
 

16.00 元  

减肥极品魔芋胶

 

¥:10.00 

【北京商盟】风の轩杂货铺●小美贵族瘦身●


来源:程序员网

小小豆叮

Java Socket编程之四

重复和并发服务器 所有的这些调用都可以掷出一个UnknownHostException违例.如果一台计算机没有连接上DNS服务器,或者主机的确没有找到,这个违例就会被掷出.如果一台计算机没有一个激活的TCP/IP配置,getLocalHost()也为失败并掷出一个违例. 一旦一个地址被确定了,数据报就可以被送出了.下面的程序传输了一个字符串给目的socket: String toSend = "This is the data to send!"); byte[] sendbuf = new byte[ toSend.length() ]; toSend.getBytes( 0, toSend.length(), sendbuf, 0 ); DatagramPacket sendPacket = new DatagramPacket( sendbuf, sendbuf.length, addr, port); clientSocket.send( sendPacket ); 首先,字符串必须被转换成一个字节数组.然后,一个新的DatagramPacket实例必须被建立.注意构建器的最后两个参数.因为要发送一个包,所以地址和端口必须被给定.一个applet可能可以知道它的服务器的地址,但是服务器如何知道它的客户机的地址呢.当任何一个包被收到后,返回的地址和端口会被解压出来,并通过getAddress()和getPort()方法得到.这就是一个服务器如何回应一个客户端的包: DatagramPacket sendPacket = new DatagramPacket( sendbuf, sendbuf.length, recvPacket.getAddress(), recvPacket.getPort() ); serverSocket.send( sendPacket ); 不像面向连接的操作,数据报服务器服务器其实比数据报客户端更简单: 数据报服务器 一个数据报服务器的基本步骤: 1.在一个指定的端口上建立一个数据报socket. 2.用receive方法等待进来的包. 3.用特定的协议来回应收到的包. 4.回到第二步或继续第二步. 5.关闭数据报socket. 列表9.3演示了一人简单的数据报回应服务器.它将回应它收到的包. 列表9.3.一个简单的数据报回应服务器 import java.io.*; import java.net.*; public class SimpleDatagramServer { public static void main(String[] args) { DatagramSocket socket = null; DatagramPacket recvPacket, sendPacket; try { socket = new DatagramSocket(4545); while (socket != null) { recvPacket= new DatagramPacket(new byte[512], 512); socket.receive(recvPacket); sendPacket = new DatagramPacket( recvPacket.getData(), recvPacket.getLength(), recvPacket.getAddress(), recvPacket.getPort() ); socket.send( sendPacket ); } } catch (SocketException se) { System.out.println("Error in SimpleDatagramServer: " + se); } catch (IOException ioe) { System.out.println("Error in SimpleDatagramServer: " + ioe); Java Socket编程之一 Java Socket编程之二 Java Socket编程之三 Java Socket编程之四 Java Socket编程之五 <淘宝热门商品:
 

运动鞋 

X-2品牌时尚鞋城【郭氏鞋坊旗下】[销售出口多余产品

 

52.00 元  

【卡盟在线】

皇冠在线充|QQ黑钻腾讯黑钻地下城与勇士(DNF)黑钻3月


来源:程序员网

小小豆叮

Java Socket编程之三

服务器Sockets 服务器并不是主动地建立连接.相反地,他们是被动地监听一个客户端的连接请示然后给他们服务.服务器是由类ServerSocket来建立的.下面的程序建立了一个服务器端socket并把它绑定到80端口: ServerSocket serverSocket = new ServerSocket(80, 5); 第一个参数是服务器要监听的端口.第二个参数是可选的.API文档中说明了这是一个监听时间,但是在传统的socket程序中第二个参数是监听深度.一个服务器可以同时接收多个连接请求,但是每次只能处理一个.监听堆是一个无回答的连接请求队列.上面的请求建立一个连接来处理最后五个请求.如果省略了后面的一个参数,则默认值是50. ServerSocket serverSocket = new ServerSocket(80, 5); 一旦socket建立了并开始监听连接,进来的连接将会建立并放在监听堆.accetp()方法把在堆中的连接取出来. Socket clientSocket = serverSocket.accept(); 这个方法返回一个用来与来访者对话的客户端连接.服务器本身不可能建立对话,相反地,服务器socket会使用accept()方法来产生一个新的socket.服务器socket依旧打开并排列新的连接请求. 与客户端socket一样,下面的一步建立输入和输出流: DataInputStream inbound = new DataInputStream( clientSocket.getInputStream() ); DataOutputStream outbound = new DataOutputStream( clientSocket.getOutputStream() ); 一般的I/O操作可以在新建的流中运用.在服务器回应前它等待客户端发送一个空白的行.当会话结束时,服务器关闭流和客户端socket.如果在队列中没有请示将会出现什么情况呢?那个方法将会等待一个的到来.这个行为叫阻塞.accept()方法将会阻塞服务器线程直到一个呼叫到来.当5个连接处理完闭之后,服务器退出.任何的在队列中的呼叫将会被取消. 所有的服务器都要有以下的基本的步骤: 1.建立一个服务器socket并开始监听. 2.使用accept()方法取得新的连接. 3.建立输入和输出流. 4.在已有的协议上产生会话. 5.关闭客户端流和socket. 6.回到第二步或者到第七步. 7.关闭服务器socket. Java Socket编程之一 Java Socket编程之二 Java Socket编程之三 Java Socket编程之四 Java Socket编程之五 <淘宝热门商品:
 

¥:88.00 

綠光森林改版我型我酷☆№1价廉物美!手机客服7*24小时等候!

冲4钻!李宁专柜正品超轻透气跑鞋原价369元!特价88元!数量有限

 

6.80 元  

北欧橱窗

三冠 三角形强力吸墙角架/置物架/杂物架 承重3公斤 不伤墙面0.14


来源:程序员网

小小豆叮

Java Socket编程之一

Socket传输模式 Sockets有两种主要的操作方式:面向连接的和无连接的.面向连接的sockets操作就像一部电话,他们必须建立一个连接和一人呼叫.所有的事情在到达时的顺序与它们出发时的顺序时一样.无连接的sockets操作就像是一个邮件投递,,没有什么保证,多个邮件可能在到达时的顺序与出发时的顺序不一样. 到底用哪种模式是邮应用程序的需要决定的.如果可靠性更重要的话,用面向连接的操作会好一些.比如文件服务器需要他们的数据的正确性和有序性.如果一些数据丢失了,系统的有效性将会失去.一些服务器,比如间歇性地发送一些数据块.如果数据丢了的话,服务器并不想要再重新发过一次.因为当数据到达的时候,它可能已经过时了.确保数据的有序性和正确性需要额外的操作的内存消耗,额外的费用将会降低系统的回应速率. 无连接的操作使用数据报协议.一个数据报是一个独立的单元,它包含了所有的这次投递的信息.把它想象成一个信封吧,它有目的地址和要发送的内容.这个模式下的socket不需要连接一个目的的socket,它只是简单地投出数据报.无连接的操作是快速的和高效的,但是数据安全性不佳. 面向连接的操作使用TCP协议.一个这个模式下的socket必须在发送数据之前与目的地的socket取得一个连接.一旦连接建立了,sockets就可以使用一个流接口:打开-读-写-关闭.所有的发送的信息都会在另一端以同样的顺序被接收.面向连接的操作比无连接的操作效率更低,但是数据的安全性更高. SUN一直是网络建设的支持者,所以在Java中支持sockets就不足为奇了.实际上,Java降低了建立一个sockets程序的难度.每一个传输模式都被封装到了不同的类中.面向连接的类将会首先被我们讨论. Sockets有两种主要的操作方式:面向连接的和无连接的.面向连接的sockets操作就像一部电话,他们必须建立一个连接和一人呼叫.所有的事情在到达时的顺序与它们出发时的顺序时一样.无连接的sockets操作就像是一个邮件投递,,没有什么保证,多个邮件可能在到达时的顺序与出发时的顺序不一样. 到底用哪种模式是邮应用程序的需要决定的.如果可靠性更重要的话,用面向连接的操作会好一些.比如文件服务器需要他们的数据的正确性和有序性.如果一些数据丢失了,系统的有效性将会失去.一些服务器,比如间歇性地发送一些数据块.如果数据丢了的话,服务器并不想要再重新发过一次.因为当数据到达的时候,它可能已经过时了.确保数据的有序性和正确性需要额外的操作的内存消耗,额外的费用将会降低系统的回应速率. 无连接的操作使用数据报协议.一个数据报是一个独立的单元,它包含了所有的这次投递的信息.把它想象成一个信封吧,它有目的地址和要发送的内容.这个模式下的socket不需要连接一个目的的socket,它只是简单地投出数据报.无连接的操作是快速的和高效的,但是数据安全性不佳. 面向连接的操作使用TCP协议.一个这个模式下的socket必须在发送数据之前与目的地的socket取得一个连接.一旦连接建立了,sockets就可以使用一个流接口:打开-读-写-关闭.所有的发送的信息都会在另一端以同样的顺序被接收.面向连接的操作比无连接的操作效率更低,但是数据的安全性更高. SUN一直是网络建设的支持者,所以在Java中支持sockets就不足为奇了.实际上,Java降低了建立一个sockets程序的难度.每一个传输模式都被封装到了不同的类中.面向连接的类将会首先被我们讨论. Java Socket编程之一 Java Socket编程之二 Java Socket编程之三 Java Socket编程之四 Java Socket编程之五 <淘宝热门商品:
 

58.00 元  

淘宝生活 运动鞋专卖/正品ZIPPO热卖//淘宝职业信誉卖家

冲双钻 ADIDAS三叶草08夏季新款特价 漫画小子个性 休闲板鞋

 

120.00元  

┏◤妙妙减肥大王╭消费保障◥┗◣℡谁比我性感╰ 皇冠100%◢


来源:程序员网

小小豆叮

Web services (pdf)

小小豆叮

哪些Java集成开发工具支持Java 2?

目前流行的Java集成开发环境,如Inprise的JBuilder,Symantec的Visual Cafe, Sybase的PowerJ,都支持Java 2. <淘宝热门商品:
 

¥:78.00 

皇冠舒友阁 顶级特效美容护肤 效果才是硬道理

皇冠热销 印疤修复液 消除深浅痘印等色印、有效改善凹凸疤痕

 

IP卡/网络电话/在线影音充值 

SKYPE官方代理商在线充值


来源:程序员网

小小豆叮

在Java applet中如何实现一个模式对话框?

在Java applet中实现模式对话框的关键就是在创建一个对话框的时候 要为该对话框指定一个正确的父窗口.因为Applet是Panel类的子类,不 可以作为对话框的父窗口,所以首先要获得applet所在的窗口,作为模式 对话框的父窗口. 样例代码如下: ..... Dialog d = new Dialog( getParentWindow(comp),title); // comp为applet上的任意一个组件 .... public void getParentWindow(Component compOnApplet,String title){ Container c = compOnApplet.getParent(); while (c != null) { if (c instanceof Frame) return (Frame) c; c = c.getParent(); } return null; } <淘宝热门商品:
 

218.00 元  

2件全国包快递!韩国SHEZ~SZ超值春秋装4件

 

6.80 元  

北欧橱窗

三冠 三角形强力吸墙角架/置物架/杂物架 承重3公斤 不伤墙面0.14


来源:程序员网

小小豆叮

JSP页面是如何工作的?

JSP引擎解释标签和脚本,生成必须的内容,比如,调用一个bean,通过JDBC访问数据库或包含一个文件。然后将输出结果以HTML(或XML)的形式返回给浏览器。动态生成内容的逻辑部分封装在服务器上的标签或bean中。开发人员通过JSP的脚本将所有的一切联系在一起,普通的HTML标签动态生成的页面的格式和显示。 <淘宝热门商品:
 

88.00 元 

双皇冠 狂卖2000条!Levis 超赞牛仔裤

 

 

【化妆品大联盟】☆美丽佳人☆╯护肤·美妆~ 冲三冠特惠!


来源:程序员网

小小豆叮

JSP技术需要其它的java API吗?

JSP页面通过编译成java的servlet类。所以,JSP页面需要一个servlet规范的java虚拟机。 JSP页面是如何被激活和编译的? JSP页面的编译过程是第一次调用是完成,该页面被编译成servlet类,并保留在内存中,随后的调用就又很快的响应时间。 JSP技术中使用什么脚本语言? 有些JSP引擎可能支持其它语言,但是JSP 1.1规范只支持基于java的脚本语言。 <淘宝热门商品:
 

18.00 元 

最新版 2面圆领打底衫 精品莱卡棉

 

 

大芬村油画网上订购【画师联盟】纯手绘油画无框画装饰画四钻信誉


来源:程序员网

小小豆叮

在Java语言中,如何列出PC机文件系统中的所有驱动器名?

在Java 2版本中,java.io包中的File类新增加了方法listRoots()可以实现这一功能. <淘宝热门商品:
 

¥:59.90 

天使之城外贸服装商行(童装/女装)【双皇冠网店 实体店同步】

双皇冠!韩国安卡米文静米色提花高领毛衣,专柜236元,140码

 

136.00 元  

达人公社 专柜正品 纽巴伦 newbalance 匡威 crocs折扣 店

正品 日版纽巴伦new balance 型号:TK02 深灰黑


来源:程序员网

小小豆叮

在JSP页面中如何使用JavaBeans控件?

JSP规范中包含了用于使用bean的标准标签。useBean创建特定的JavaBeans类的实例。假如该实例存在,那么就得到该实例,否则就创建该实例。 <淘宝热门商品:
 

256.0元  

美美减肥瘦身及咨询 能为你服务是我的荣幸!

 

30.00 元 

实图12色2WAY含羊毛打底毛衣


来源:程序员网

小小豆叮

浏览器中运行Java applet时出现了错误,如何确定错误范

当java applet在浏览器中运行时,使用的是浏览器本身的缺省JVM.而不同浏览器对JDK的支持程度也不尽相同. 因此,在Netscape或IE浏览器中运行Java applet出现了错误,建议使用JDK提供的工具appletviewer或Sun公司的Hotjava浏览器来测试该applet,以确定错误的产生是与浏览器相关. 如果applet在appletviewer或Hotjava中运行一切正常,则错误的产生是由于浏览 器不完全兼容JDK而引起的. 此时,解决方法可以是使用Hotjava浏览器或者安装 Sun公司的Java Plugin. 如果applet在Hotjava浏览器或appletviewer中运行即发生错误,则应当根据错误 提示检查applet程序. <淘宝热门商品:
 

2.30 元  

【珠三角商盟】【因为专注→所以专业→天天数码世界】

A372_全新创意生活海龟集线器/小绕线器/藏线盒-既实用可爱又时尚

 

32.00 元  

卖疯了 牙亮白 7天显著洁白牙齿


来源:程序员网

小小豆叮

在Java applet中如何显示另外一个HTML页面?

通过java.applet.Applet.getAppletContext()方法可以获得与该applet相关的AppletContext, AppletContext.showDocument(URL)方法就可以使applet所在的浏览器显示另外一个网页. <淘宝热门商品:
 

 

:◤╭ Shanghai 秀卡蒂╮╰女性健康購物中心 ╯◥◣瘦身╮減肥╮

 

148.00 元  

阳鸟渔具(光威鱼竿 名牌浮漂 品质保证)面向全国团购批发

【25号新到】 Clarks/其乐 超软商务男皮鞋 不平凡AG-801


来源:程序员网

小小豆叮

假如已使用了servlet,为什么还要用JSP?

JSP页面最终被编译成servlet,所以从理论上讲,你可以用servlet来支持基于web的应用程序。然而,JSP技术在设计阶段可将表示逻辑部分与内容部分分离,以简化页面的创建。在许多应用程序中,发送回客户端的信息是模板信息和动态生成的信息的组合。在这种情况下,采用JSP页面比采用servlet要更简单。 何处可得到最新的JSP规范? JavaServer Pages 1.1的规范可从这里下载。http://java.sun.com/products/jsp/download.html#specs <淘宝热门商品:
 

3.80 元  

幸福生活 联盟津沽 种子蔬菜种子、花卉种子、园艺用品

【天津商盟】【皇冠信誉】食用草莓种子-观赏草莓种子-花种

 

 

淘宝最大 最低 女装直销╭╮


来源:程序员网

小小豆叮

JSP规范与J2EE有什么样的关系?

JSP规范是J2EE 1.2的重要部分。采用JSP和EJB(Enterprise JavaBeans)是实现基于web前端的分布式企业应用的重要方法。 那些web服务器支持JSP技术? 目前有许多针对不同web服务器的JSP技术的实现。最新的信息可以在官方支持的站点上得到: http://java.sun.com/products/jsp/industry.html. Sun提供了JSP技术的参考实现了吗? JSP 1.1的参考实现是J2EE SDK的一部分。Tomcat作为一个独立的JSP 1.1的参考实现,目前正通过Apache的开放源代码模型进行开发,可以从Apache免费下载: http://jakarta.apache.org. <淘宝热门商品:
 

0.11 元 

:麒麟电子

★麒麟电子★超高亮的led灯箱专用led白发蓝5mm圆头聚光灯珠

 

 

淘宝最大 最低 女装直销╭╮


来源:程序员网

小小豆叮

利用JAVA语言实现支持视频点播的WEB服务器

王宏志 一.项目简介:   JAVA语言是一种可移植的,简单的,健壮的嵌入式语言。并且对网络,数据库有很好的支持,基于JAVA语言的这种特性可以十分容易地建立一个小型INTERNET服务器。   本项目中,作者用JAVA语言编写了一个WEB微型服务器,对简单的HTTP请求进行响应,并通过后端数据库对用户的查询进行处理,从而动态地返回HTML页面。 二.项目实现: (一)项目具体功能分析与开发工具选择   可以利用一台较高配置的个人台式机就可以实现社区内的小型服务器,包括网页浏览,基于高速局域网的视频下载和播放,定时新闻组发布程序,邮件服务器等服务。   本软件实际上是一个HTTP协议的服务器。HTTP(Hyper Text Transfer Protocol),是一个专门为Web服务器和Web浏览器之间交换数据而设计的网络协议。它通过规定通用资源定位符(URLs)使客户端的浏览器与服务器的Web资源建立链接关系,从而奠定了用户对Internet透明访问的基础。   在本软件中通过传输HTML文件使客户端可以实现网页浏览。HTML是WWW的通用标记语言,它用来创建Web页面和控制Web信息显示格式。HTML不是编程语言,而是一种描述语言。HTML2.0得到了IETF(Internet Engineering Task Force)的支持而成为Internet国际标准。目前,HTML已经发展到3.0和4.0版,只是新版本的标准尚未完全统一,不同的商家对HTML2.0进行了一定的扩充,引入了更多新的功能。例如,Netscape公司在HTML3.0中增加了页面底图(Background Images)和表(Table)定义等标记,使得Web页面更加引人入胜。   CGI是通用网关接口(Common Gateway Interface)的简称,它是Web服务器与外部程序之间的通信接口,服务器并不关心外部应用程序是什么语言(如C、C++、Pascal、Delphi或Perl)编写的,它只是负责接收用户输入的信息,并把CGI程序所产生的结果--HTML文档或其他符合HTTP规定的文件回传给用户。事实上,CGI是动态Web页面制作的第一步,但由于CGI程序实现比较困难,而且效率不高,它已经逐渐被新的技术所取代。   网页浏览支持的网页包括HTML,JAVASCRIPT,APPLET,VBSCRIPT等编写的网页,但不支持PHP,ASP等服务器端动态程序的网页。由于服务器的规模较小,所以服务器端动态程序被集成进服务器中。但可以通过编写符合一定规则的JAVA的CGI程序实现服务器端的动态性,不过这种JAVA程序的安全性很难保证。 (二)服务器的实现   1. 处理连接策略:   对于每一个用户的连接我们采取了每次请求满足后,将用户与服务器的连接断开,这时用户如果有其他的请求,则进入请求队列重新进行资源竞争。 通常网页中的每一个图形都会被看成是一个单独的连接,也就是说对于一个图形很多的网页基于本服务器的连接策略将会进行多次请求,这样的好处是防止一个容量很大的网页独占网络资源。   2. 与数据库连接   在与数据库的连接中我们选用的后端数据库是微软的ACCESS数据库,由于本项目是面向小型社区的社区数据中心服务器,所以选用小型的数据库。由于JAVA的可移植性可以将服务器用在LINUX平台上,这时可以用本服务器提供的数据库配置程序连接到MySql等基于LINUX的小型数据库。   我们应用JDBC完成与数据库的连接。Java的一项出色能力是构建与平台无关的客户机/服务器数据库应用。在Java 1.1中,通过Java数据库连接(JDBC)实现了与各家公司之间的数据库的互连。数据库最主要的一个问题就是各家公司之间的规格大战。确实存在一种"标准"数据库语言,即"结构查询语言"(SQL-92),但各公司为了表示自己的与众不同对标准都有一些微小的改动。所以通常必须确切知道自己要和哪家数据库公司打交道,否则极易出问题,尽管存在所谓的"标准"。JDBC是面向"与平台无关"设计的,所以在编程的时候不必关心自己要使用的是什么数据库产品。和Java中的许多API一样,JDBC也做到了尽量的简化。我们发出的方法调用对应于从数据库收集数据时想当然的做法:同数据库连接,创建一个语句并执行查询,然后处理结果集,无论与我们打交道的是哪家数据库厂商的产品。   JDBC的使用:   为实现这一"与平台无关"的特点,JDBC为我们提供了一个"驱动程序管理器",它能动态维护数据库查询所需的所有驱动程序对象。所以假如要连接由数家公司开发的不同种类的数据库,就需要每个数据库的单独的驱动程序对象。驱动程序对象会在装载时由"驱动程序管理器"自动注册,并可用Class.forName()强行装载。   为打开一个数据库,必须创建一个"数据库URL",它要指定下述三方面的内容:   (1) 用"jdbc"指出要使用JDBC。   (2) "子协议":驱动程序的名字或者一种数据库连接机制的名称。由于JDBC的设计从ODBC吸收了许多灵感,所以可以选用的第一种子协议就是"jdbc-odbc桥",它用"odbc"关键字即可指定。   (3) 数据库标识符:随使用的数据库驱动程序的不同而变化,但一般都提供了一个比较符合逻辑的名称,由数据库管理软件映射(对应)到保存了数据表的一个物理目录。为使自己的数据库标识符具有任何含义,必须用自己的数据库管理软件为自己喜欢的名字注册(注册的具体过程又随运行平台的不同而变化)。 所有这些信息都统一编译到一个字串里,即"数据库URL"。本例中,我们想通过ODBC子协议同一个标识为"vod"的数据库连接,相应的数据库URL设为:    String dbUrl = "jdbc:odbc:vod"   同样如果通过一个网络连接,数据库URL也需要包含对远程机器进行标识的信息。   JDBC的连接方式:   首先,JDBC中在DriverManager中对数据库数据库驱动程序进行登记。   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");   装载JDBC- ODBC桥驱动程序,这样做是为了让DriverManager可以找到数据库驱动程序。然后利用DriverManager打开与数据库的连接。   Mycon=DriverManager.getConnection(dbUrl);   本语句的作用是,确定与由dbUrl指定的数据库的连接。DriverManager将从其中登记的驱动程序中寻找最适当的驱动程序。返回的Mycon代表了与特定的数据库之间的连接。    Mysta=Mycon.createStatement();   生成可以执行无参数SQL语句的Statement接口。 然后就可以在Mysta中用executeQuery()函数执行SQL语句从返回的ResultSet获取执行结果。   3. 网络连接:   网络本身的概念并不难。我们想获得位于其他地方某台机器上的信息,并把它们移到这儿;或者相反。这与读写文件非常相似,只是文件存在于远程机器上,而且远程机器有权决定如何处理我们请求或者发送的数据。但大多数编程语言对网络编程都较困难,而Java最出色的一个地方就是它的"无痛苦连网"概念。有关连网的基层细节已被尽可能地提取出去,并隐藏在JVM以及Java的本机安装系统里进行控制。我们使用的编程模型是一个文件的模型;事实上,网络连接(一个"套接字")已被封装到系统对象里,所以可象对其他数据流那样采用同样的方法调用。除此以外,在我们处理另一个连网问题--同时控制多个网络连接--的时候,Java内建的多线程机制也是十分方便的。 服务器的主要任务是侦听建立连接的请求,这是由我们创建的特定服务器对象完成的。而客户机的任务是试着与一台服务器建立连接,这是由我们创建的特定客户机对象完成的。一旦连接建好,那么无论在服务器端还是客户机端,连接变成了一个IO数据流对象。从这时开始,我们可以象读写一个普通的文件那样对待连接。所以一旦建好连接,我们只需使用自己熟悉的IO命令即可。   首先,server=new ServerSocket(80,acceptamount);   生成一个服务器端的套接字。其中第一个参数是表示服务器的监听端口,端口是机器内独一无二的场所。有些时候,一个IP地址并不足以完整标识一个服务器。这是由于在一台物理性的机器中,往往运行着多个服务器(程序)。由IP表达的每台机器也包含了"端口"(Port)。我们设置一个客户机或者服务器的时候,必须选择一个无论客户机还是服务器都认可连接的端口。端口并不是机器上一个物理上存在的场所,而是一种软件抽象(主要是为了表述的方便)。客户程序知道如何通过机器的IP地址同它连接,但怎样才能同自己真正需要的那种服务连接呢(一般每个端口都运行着一种服务,一台机器可能提供了多种服务,比如HTTP和FTP等等)?端口编号在这里扮演了重要的角色,它是必需的一种二级定址措施。   在HTTP协议中的默认服务端口是80,当然在小型社区中也可以使用其它的端口。本例中使用了默认服务端口。 Socket s=server.accept();   这一句的作用是使服务器监听本机上的80端口,等待客户机的连接。在没有新的连接的情况下,服务器阻塞自身。当客户机连接到服务器后函数返回一个套接字。然后,通过套接字的输入,输出流即可用读取本机文件的方法与客户机进行通信。 (三)客户端设计   在客户端,理想的装置是电视机,因为当前电视机普及率高,有线电视线路遍布各地,可重用资源广泛。但目前的电视机绝大多数是模拟电视机,它们只能接收模拟电视信号,无法接收数字电视信号,因此这种电视机的彩色图像和伴音质量并不是很高。而数字电视无论从价格,电台改造,线路改装等方面都存在很大的困难,短期内难以普及。那么能否有一种折衷方案,即使目前的模拟电视机也能接收数字电视信号呢?回答是肯定的。但它们必须附加一个被称作机顶盒(STB)的装置。   1.机顶盒概念介绍:   机顶盒(STB,Set Top Box)的概念比较广泛。从广义上说,凡是与电视机连接的网络终端设备都可称为机顶盒,主要有有线电视网络的模拟频道增补器、模拟频道解扰器,上网机顶盒、数字卫星的综合接收解码器(IRD,Integrated Receive Decoder)、数字地面机顶盒,以及有线电视数字机顶盒都可称为机顶盒。从狭义上说,我们可以将模拟设备排除在外,按主要功能将机顶盒分为上网机顶盒、 数字卫星综合接收解码器、数字地面机顶盒,以及有线电视数字机顶盒,这些设备由于具有很好的网络功能,因此也成为信息家电的代表。 机顶盒也是信号传输介质与电视机之间的一种接口,并提供附加服务,可见它是一种中间电子设备。机顶盒可以把卫星直播数字电视信号、地面数字电视信号、有线电视网数字信号甚至因特网的数字信号转换成模拟电视机可以接收的信号,使现有的模拟电视机用户也能分享数字化传媒带来的清晰,高效的科技成果。同时,它也可以实现电视广播从模拟信号向数字信号的平稳过渡,以及由于种种原因暂时不想购买电脑的人们共享因特网的信息资源和现代化的通信手段。机顶盒有模拟和数字之分,但现在人们所说的机顶盒一般指的是数字机顶盒。   2.机顶盒设计:   本设计中推荐的是上网机顶盒,这种机顶盒实际上是将电视机作为显示器构成了一个多媒体电脑,所以又称为WEB TV。   这种机顶盒主要是通过某种传输介质实现internet接入技术,其传输介质可以是电话线(电话调制解调器),有线电视网络(电缆调制解调器)等。在这种机顶盒中较著名的有微软公司的维纳斯计划,另外我国有许多企业陆续推出了该类产品,如康佳的"光元"网络机顶盒、海信的"家庭网络快车"DB-200M互联网机顶盒、海尔的"网神"网络机顶盒等。但以上的机顶盒大都采用电话调制解调器,这样做的后果是占用了用户家中几乎所有的网络资源(电话线和电视机),却只能实现上网功能随着低价位PC机的普及其市场份额必将进一步下降。同时数字有线电视机顶盒技术却表现出了很大的发展空间。由于有线电视网络较好的传输质量以及电缆调制解调器技术的成熟,使得该类机顶盒可以实现各种交互式应用,从而满足各种用户的要求。事实上,该类机顶盒可以支持几乎所有的广播和交互式多媒体应用,如数字电视广播接收、电子节目指南(EPG)、准视频点播(NVOD)、按次付费观看(PPV)、软件在线升级、数据广播、Internet接入、电子邮件、IP电话和视频点播等。   3.机顶盒中的操作系统:   应用于数字有线电视机顶盒中的操作系统与大家比较熟悉的PC的操作系统,如DOS、Windows98、Windows NT、Unix、MacOS不同,机顶盒中的操作系统不是非常的庞大,但却要求可以在实时的环境中工作,并能在较小的内存空间中运行。这种操作系统称为实时操作系统。   目前流行的实时操作系统有Wind River System公司的VxWorks、Integrated Systems Incorporated公司的pSOS、Microware公司的DAVID OS-9、ST公司的OS20、Windows CE以及专为机顶盒开发的PowerTV等。这些操作系统各有所长,在机顶盒中都有应用。其中VxWorks、pSOS、OS-9、OS20等是通用的实时操作系统,在其他的嵌入式系统中也有广泛的应用。PowerTV是专为机顶盒开发的,并将中间件集成在一起的操作系统,在美国应用较广。随着嵌入式Linux的逐渐成熟,不仅为机顶盒厂商提供了一种选择,而且由于Linux的开放性和先进的结构,会对现有的实时操作系统构成巨大的威胁。   另外,作为UNIX系统的一种变种,LINUX系统在应用软件,系统集成,以及用户开发,使用习惯上都有十分大的优势,所以我们建议使用LINUX系统作为系统平台。   4.中间件   中间件是一种将应用程序与低层的操作系统、硬件细节隔离开来的软件环境,这种分层的思想在现代系统设计中十分常见,如大名鼎鼎的TCP/IP协议。中间件通常由各种虚拟机来构成,如HTML虚拟机、JavaScript虚拟机、Java虚拟机等。   一个完整的数字机顶盒由硬件平台和软件系统组成,可以将其分为4层,从底向上分别为硬件、底层软件、中间件、应用软件。硬件提供机顶盒的硬件平台;底层软件提供操作系统内核以及各种硬件驱动程序;应用软件包括本机存储的应用和可下载的应用;中间件将应用软件与依赖于硬件的底层软件分隔开来,使应用不依赖于具体的硬件平台。这样用户可以在任何厂家的硬件平台上进行应用软件开发,和应用软件下载。不必介意任何低层的有关信息。保证了机顶盒的开发专业化。目前成熟的用于机顶盒的商用中间件产品有Opentv的EN2、Liberate的TV Navigator for DTV、Enreach的EnreachTV for DTV、Canel+ 的Mediahighway和Intellibyte的IB EPG、IB SI Manager、IB Browser等,这些产品在市场上都占有一席之地,但彼此并不兼容。   标准组织已经认识到已有中间件产品兼容性差这个事实,并且开始着手建立开放的中间件标准。DVB提出了基于Java虚拟机的中间件标准DVB-MHP(多媒体家庭平台);ATSC成立了T3/S17技术专家小组委员会,致力于机顶盒软件环境的定义,该软件环境称为DTV应用软件环境(DASE)。ATVEF(先进电视发展论坛)也创建了一种称为Advanced Television Enhancement Forum Specification for Interactive Television 的规范。   其实,任何一种分层结构都不是要求完全一丝不差的按照其结构,在中间件中我们认为JAVA虚拟机较有发展前途。因为首先,JAVA的设计初衷就是为信息家电开发提供一种简单,健壮的嵌入式语言。正是基于这样一种设计目标,JAVA具有小型化的能力可以在简单的环境下运行。而价格方面的原因使机顶盒不可能,也不必要拥有同一时代的标准配置的台式机的功能,这种相对简单的硬件环境是可以运行JAVA虚拟机的。应用JAVA虚拟机的另一个原因是,现在出现了专门运行JAVA语言的JAVA芯片如果应用这种芯片作为机顶盒的CPU,则可以使用专门的JAVAOS作为操作系统,利用JAVA语言的可移植性在台式机上进行应用层开发,借鉴台式机的调试开发经验和工具。 (四)传输压缩方式   在视频点播,网上视频观看中不可避免的要与数据压缩打交道,如何将视频数据,音频数据在一定的失真范围内用最小的数据量传输是数据压缩要研究的一个重要的课题。数字多媒体技术的发展,突破了传统的模拟化图象的应用,图象的采集以及存储、处理、显示等数字化的发展,其使我们设计的可行性大大提高。数据压缩及编码技术是设计中向数字机顶盒传输数据时的关键技术。图象压缩编码从开始系统研究至今已有近50年的历史。1988年,CCITT(现ITU-T)制定了可视电话/会议电视的H.261建议是极具代表性的标准,后来的MPEG-1、MPEG-2、H.263等图象压缩标准都是以它为基础的。声音压缩编码的标准也很多,如ITU-T制定的G.711、G.722、G.728、G.723等。限于笔者的水平我们无法对各种压缩技术进行评价,所以在这里只作简单的介绍。   视频压缩技术中数字图象的压缩是多媒体通信的关键技术,"压缩比"是评价图象压缩方法性能的重要参数之一(也可按每象素多少比特反映压缩特性),图象压缩比反应了图象压缩的困难性和可能程度,ITU-T制订的各种标准压缩比都不同。一般来说,压缩比越大,算法越复杂,实时压缩解压缩的困难程度越大,要求的硬件环境也越高。对于可视电话,若原图象格式采用QCIF(176×144),则原始图象有4.5Mb/s的数据量,若最后用28.8kb/S的MODEM在PSTN上传输,则要提供150多倍的压缩,遵循ITU-T和H.263标准可实现此压缩,另外,H.261和MPEG-1也具有较低的码率,适合于在现有网络上传输视频。MPEG-1广泛用于VIDEO-CD的播放,H.261可应用于N-ISDN可视电话、会议电视、远程医疗、远程教学等各个方面。MPEG-2具有可分级性、可扩展性和互操作性,且易于与ATM、计算机网络联结等一系列高性能,但其码率仍高达4~20Mbps,其主要目标是针对广播电视演播室图象质量和HDTV,现也应用于VOD和DVD的制作。此外,具有高级交互功能、更高图象声音质量和更大灵活性的MPEG-4标准,国际上正在研究制订之中。 三.进一步工作:   新一代数字机顶盒的主要配量CPU将进一步提高主频,其中将具备硬盘和打印控制功能、实时视频解码功能(符合MPEG、Qutik Time标准)和实时音频解码功能(符合MPEG、AC-3和Real Audio标准);以及与电视机遥控器合成一体的遥控键盘,这种键盘可以与现在的键盘接口统一。它还具有硬盘存储、在线打印、画中画、电视与WWW跨接以及电子电视节目指南,电子邮件等功能,除为了实现实时视频解码的硬件解码器外,机顶盒将越来越接近个人桌面电子计算机。它的互联网接入功能将近一步使传统的媒体供应商向网络靠拢。电视节目制作商将自己选定的节目放入WWW网点地址(URL),用户可以通过点击这个标记连接WWW网点,以获取更多的信息,下载视频节目和应用软件。同时用户可以在观看电视节目时使用网上资源。例如,一个学生在观看一段有关火星探险的电视片时,可以点击屏幕上的NASA(美国宇航局)标记,进入NASA的WWW网点浏览最新的航天科技消息,由于传统媒体供应商在媒体制作和销售等方面的经验,现阶段的网络供应商将面对更大的挑战。这种功能对于电视广告商具有极大的吸引力。画中画功能可以使用户一边看电视,一边在因特网上"冲浪",或调阅电子邮件,或进行社区内具有针对性的小范围产品推销。由上可见,Web TV与其说是机顶盒,倒不如说它更像一台具有高速率通信能力的多媒体电脑,只不过它利用现有电视机作显示器,并可将电视机作为因特网终端,而且应用了当前的有线电视技术将电视与因特网融为一体。 参考书目: 1. 数字图象压缩编码在多媒体通信中的应用 北京邮电大学 张家谋 尹昊晖 2. 多姿多彩的数字机顶盒 3. 广播电视技术发展展望杜百川 4. 基于WEB的数据库技术研究 郑成增 陈志锋 陶勇 李思忠 5. Thinking in Java Bruce Eckel <淘宝热门商品:
 

 

极限特攻-新奇产品仓库   金秋时节好礼送不停

 

288.00 元 

【原装正品】韩国恋人1.6米大抱熊


来源:程序员网

小小豆叮

能用JSP技术创建XML页面吗?

可以,JSP规范确实支持XML文档的创建。对于简单的XML的生成过程,XML的标签可以被包含在JSP页面的静态模板部分中。也可通过bean控件或定制的标签生成XML的输出来动态生成XML标签。在用JSP技术开发XML的白皮书中有详细说明。 <淘宝热门商品:
 

 

【皇冠康康美美】同仁堂保健品 协和护肤品 营养品 减肥瘦身品

 

58.00 元  

淘宝生活 运动鞋专卖/正品ZIPPO热卖//淘宝职业信誉卖家

冲双钻 ADIDAS三叶草08夏季新款特价 漫画小子个性 休闲板鞋


来源:程序员网

小小豆叮

利用UDP Sockets技术实现IP多点传送

杨绍方 摘 要 本文介绍了UDP Sockets的基本概念和IP多点传送的原理,详细讨论了Java中的相关类及使用方法,提供了一个IP多点传送的开发流程。 关键词 Java UDP Sockets    IP 多点传送 MulticastSocket 类IP多点传送(multicast delivery)是针对点到点的传送和广播传送两种方式而言的,它是指在一定的组内对其成员进行的广播,是一种有限的广播。组中的某个成员发出的信息,组中的其它所有成员都能收到。它是UDP Sockets的一个分支。   IP多点传送特别适合与高带宽的应用,例如在网络上发送视频和音频。随着网络带宽的不断提高和网络通讯质量的不断改善,IP多点传送还将广泛地被应用于网上聊天及网上会议,分布式数据存储,联机事务处理,交互式游戏等方面。另外,多点传送还可以被客户机用于在网络上寻找相应的服务器,客户机发送一个多点传送的请求,任何监听服务器都可以与客户机连接并开始一个事务。 UDP Socket基础   使用用户数据报协议(User Datagram Protocol,简称UDP)进行会话必须将信息装配成一定尺寸的小报文,当发送一条信息,接收方能否收到并返回信息永远是不确定的,如果无法收到返回信息,我们就无法确定我们发送的信息是否被接收——它可能在途中丢失,接收者返回的响应信息也可能丢失,另外,接收者也可能忽略我们的信息,因此,UDP被描述为不可靠的、无连接的和面向消息的。   创建UDP sockets非常象创建一个邮箱。邮箱是使用地址来识别的,但是,我们不需要为每个发送信息的人构造一个新的邮箱,可以在含有发送信息的明信片上写上目的地址,将其放在邮箱中并发送出去。接收者可能会长久的等待,直到含有信息的明信片到达它的邮箱,而明信片上标识了发送者的返回地址。 IP多点传送的原理   为了支持IP多点传送,某些范围的IP地址被单独留出专门用于这个目的,这些IP地址是D类地址,其地址的最高四比特的位模式为“1110”,即IP地址的范围在224.0.0.0和239.255.255.255之间。它们中的每一个IP地址都可以被引用作为一个多点传送组,任何以该IP地址编址的IP报文将被该组中的其它所有机器接收,也就是说,一个IP地址就相当于一个邮箱。另外,组中的成员是动态的并随时间而改变。   对于IP多点传送,网间网组管理协议(Internet Group Management Protocol,简称IGMP),用于管理多点传送组中的成员。支持多点传送的路由可以使用IGMP决定本地的机器是否赞成加入某个组,一个多点传送路由可以决定是否转发一个多点传送报文。   影响多点传送报文的一个重要参数是time-to-live(TTL)。TTL用于描述发送者希望传送的信息能通过多少不同的网络。当报文被路由器转发,报文中的TTL将减一,当TTL为零时,报文将不再向前发送。   在实际使用中,我们必须注意下面几点:   1.这些IP地址只能作为信宿地址使用,绝对不能出现在任何信源地址域中,也不能出现在源路径或记录路径选项中:   2.由于IP多点传送是一对多的传送,因此,不能利用差错与控制报文协议(Internet Control Message Protocol,简称ICMP)产生出错报文。   3.发送一个信息到一个组,发送主机可以不是组中的成员;   4.一些组被Internet Assigned Numbers Authority(IANA)分配,保留用于特殊的目的,详情参见:ftp://ftp.internic.net/rfc/rfc1700.txt。另外,避免使用一些保留组,从224.0.0.0到224.0.0.225仅限于本地子网使用。建议在224.0.1.27和224.0.1.225之间任意选取一个IP地址。   5.如果我们选取的组已经被使用,与其他机器的通讯将会混乱,一旦发生,可以退出应用,试试其他的地址。   6.当一个机器加入一个多点传送组,它将开始接收该IP多点传送地址的信息。如果多点传送报文分发到网络上,任何监听该信息的机器都会有机会接收它。对于IP多点传送,没有一个机制对相同网络上的机器能否加入该多点传送组加以限制。因此,安全性是我们必须考虑的问题之一。   7.选择的TTL参数应尽可能小。一个大的TTL值会不必要地占用Internet带宽。此外,还可能破坏不同区域使用相同组的其它的多点传送通讯。 Java中与IP多点传送相关的类   java.net包中含有UDP通讯所需要的工具,其中包括IP多点传送。 DatagramPacket类   我们可以使用DatagramPacket类创建一个用于发送的数据报,而当接收UDP数据报时,可以使用DatagramPacket类读取数据报中的数据,发送者及其它信息。   为了创建一个数据报并发送到远地系统,可以使用下面的构造器:   Public DatagramPacket(byte ibuf,int length,InetAddress iaddr,int iport,);   ibuf是编码信息数据的字节数组,它的长度length就是数据报放在其中的字节数组的长度,iaddr是一个InetAddress对象,存储着接收方的主机名和IP地址等信息,iport标识数据报发送到接收主机的端口。   为了接收数据报,必须使用DatagramPacket构造器,其原型为:public DatagramPacket(byte ibuf,int ilength);ibuf是指接收的数据报的数据部分, ilength是该部分数据的长度。如果 ilength 小于机器接收的UDP数据报的尺寸,多余的字节将被Java忽略。   另外,类中有一些方法(method)可以让我们得到一些相关的信息:   public int getLength(); //得到数据报中数据块的字节尺寸   public bytegetData();//得到接收数据报中的数据   public InetAddress getAddress(); //为发送者提供一个 InetAddress对象   public int getPort(); //得到UDP端口   值得注意的是,TCP sockets的编程中,我们无须将传送的数据分块,然而,当我们创建一个基于UDP的网络通讯应用程序时,必须创建一套方法,在运行时刻决定需分割的数据报的长度。对于TCP/IP,最大的数据报可以含有65507字节的数据,然而,主机仅能接收最多548字节的数据,支持8192字节的大数据报的平台是利用IP层对数据报进行分割的。如果在传送期间,任何含有IP报文的一个数据块丢失,都会造成整个UDP数据报的丢失,因此,我们在确定应用中数据报尺寸时,对其尺寸的合理性一定要谨慎。   下面就是分割数据的一个例子:   //循环地从输入流input中读一行数据   while((nextLine=input.readLine())!=null){   //定义一个空数据报,其尺寸为512   mcastBuffer=new byte[512];   //如果读入的数据的长度大于定义的数据报的长度,   //则使用定义的长度,否则使用读入数据的长度   if(nextLine.length()>mcastBuffer.length){   sendLength=mcastBuffer.length;   }else {   sendLenth=nextLine.length();   }   //将读入的数据转换为byte类型   lineData=nextLine.getBytes();   //将数据复制到用于创建数据报的byte数组   for(int i=0;i
 

¥:10.00 

【北京商盟】风の轩杂货铺●小美贵族瘦身●

 

188.00 元  

脚踏运动-专卖品牌折扣店(已加入消费者保障计划)

08款 耐克5折=nike WMNS LEGEND 板鞋 女 311958-193 包邮+赠品


来源:程序员网

小小豆叮

当用Servlet来处理http请求页面时,如何使HTML页面中的

javax.servlet.http.HttpResponse类用于产生返回页面.通过HttpResponse定义的方法getOutputStream()可以获得ServletOutputStream的实例,这样用户就可以利用ServletOutputStream.write方法向输出流中写入返回页面的内容. 但是ServletOutputStream使用的是缺省的编码方式,如果要使返回页面中的中文字 符能够正常显示,最好显示地指定所用的字符编码方式. 通常需要构造一个 OutputStreamWriter , 例程如下: public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); ServletOutputStream out = res.getOutputStream(); OutputStreamWriter ow = new OutputStreamWriter(out,"GB2312"); ow.write("这是测试"); ow.flush(); ow.close(); } <淘宝热门商品:
 

148.00 元  

阳鸟渔具(光威鱼竿 名牌浮漂 品质保证)面向全国团购批发

【25号新到】 Clarks/其乐 超软商务男皮鞋 不平凡AG-801

 

 

淘宝最大 最低 女装直销╭╮


来源:程序员网

小小豆叮

使用类PrintJob进行打印操作时,应如何设置打印机名等?

使用如下方法可以获得PrintJob的实例用于控制打印操作: Toolkit.getPrintJob(Frame f, String jobtitle, Properties prop) 那么对于打印属性的设置可以通过对prop的属性设置来实现,打印属性包括: awt.print.destination: 可以是"printer"或"file" awt.print.printer: 打印机名 awt.print.fileName: 打印文件名 awt.print.numCopies: 打印份数 awt.print.options: 打印命令的打印选项 awt.print.orientation: 打印方向,可以是"portrait"或"landscape" awt.print.paperSize: 纸张大小,可以是"letter","legal","executive"或"a4" <淘宝热门商品:
 

98.00 元 

08新款 日式V领子二件套+黑色领带假二件套 本店热销款

 

268.00 元 

绝对NO1新版mirifem魔力丰丰胸片


来源:程序员网

小小豆叮

什么是JSP(JavaServer Pages)技术?

JSP技术为创建动态的Web页面提供一种简化、快速的方式, JSP规范定义了服务器和JSP页面之间的交互,并且描述页面的格式和语法。 <淘宝热门商品:
 

 

专做VIVI昕薇瑞丽韩日女装~

 

88.00 元 

双皇冠 狂卖2000条!Levis 超赞牛仔裤


来源:程序员网

小小豆叮

什么是servlet ?

相对于浏览器中运行的小应用程序applet来说,servlet是运行在服务器端的用java语言写的应用程序。详细的信息可以在sun的站点上获得:http://java.sun.com/products/servlet <淘宝热门商品:
 

56.00 元  

有保障08新开 小米渣云南干花 家居、新居、橱窗、橱柜装饰品

云南干花 挪威早餐(马德里草粘花)餐桌、书桌、化妆台上的首选

 

 

香港恒邦充电电池/充电器专卖店


来源:程序员网

小小豆叮