浅析Swing客户端知识

开发 后端
本文主要介绍如何使用Swing客户端去连接已经存在的Servlet应用。以及介绍Struts结构和The URLConnection class等。

1.简介

Jakarta Struts是基于MVC模式创建servlet应用程序的框架。大部分的Struts应用程序都是使用浏览器作为客户端,实际上Struts足够的开放,它可以使用其它的客户端模式。在这里我将在我 "Coding your second Jakarta Struts Application"这篇文章里的一个浏览器应用实例改成Swing客户端模式,只需要修改一点代码。

这篇文章主要介绍如何使用Swing客户端去连接已经存在的Servlet应用。如果你打算开发一个java应用程序,既能够使用浏览器做客户端也可以用Swing做客户端,你就需要根据你程序的需要灵活的选择构架,如EJB或web service,他们提供了简单的接口。

2.Struts结构

在我们开始之前,先看看浏览器如何和Struts应用通信的。这些将在我们的Swing应用程序中体现。
◆Struts应用程序是由servlet接受到GET或POST请求开始的。
◆servlet决定调用哪个"action",是从URL中获得信息的。
◆实现了Action的java类是在struts-config.xml中配置的。
◆ Struts的输出由jsp来显示,jsp的名字也在struts-config.xml文件中指定。
所以***个非浏览器应用需要能够给servlet发送一个请求,并且能从jsp页面得到响应。

3.The URLConnection class

使用URLConnection类能够很简单的使用java编写servlet请求代码。这个类很有趣,因为它有一些奇怪的设计。如果你想看看它的实现,我建议你读一读"Dodge the traps hiding in the URLConnection class".
如果想发送一个带有"list"action的请求,并接受打印响应,你需要这样写代码:

  1. URL url = new URL("http://myserver/project/list.do");    
  2.  URLConnection conn = url.openConnection();    
  3.         
  4.   BufferedReader in =     
  5.    new BufferedReader(new InputStreamReader(conn.getInputStream()));  
  6. String line;      
  7.   while ((line = in.readLine()) != null) {    
  8.  System.out.println(line);    
  9. }   

一般来讲你通常需要在请求的同时发送一些数据--就像提交表单那样。这些数据需要在你读取响应前发送过去。

  1. URL url = new URL("http://myserver/project/list.do");    
  2.     URLConnection conn = url.openConnection();    
  3.     conn.setDoOutput(true);    
  4.     conn.setRequestProperty("user-agent","SWING");      
  5.         
  6.     BufferedWriter out =    
  7.        new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));    
  8.     out.write("name1=value1&name2=value2");    
  9.     out.flush();    
  10.    out.close();    
  11.        
  12.    String c = conn.getHeaderField("Set-Cookie");    
  13.    BufferedReader in =     
  14.       new BufferedReader(new InputStreamReader(conn.getInputStream()));    
  15.   String line;      
  16.   while ((line = in.readLine()) != null) {    
  17.      System.out.println(line);    
  18.   }   

这个例子同时也显示了如何读写HTTP头信息。
***个例子使用GET方法与HTTP通信,而第二个例子使用POST方法通信。你同样可以使用GET方法来给servlet传送数据,但是就必须要把数据加到URL里,像这样:

  1. URL url = new URL("http://myserver/project/list.do?name1=value1&name2=value2"); 

4.Identifying the client

现在我们知道怎么发送和请求数据了,但是我们怎么接受数据呢?如果响应是给浏览器的,那响应里就包含了HTML或者还有JavaScript和样式。对于我们的Swing客户端,我们只需要数据。这将带来一个新问题:Struts应用程序如何能识别出客户端是一个浏览器,是个Swing还是其它什么呢?
一种解决办法是在每个请求里添加参数时其能间鉴别出是哪种客户端。我在第二个例子里已经使用了user-agent这个头信息来使其识别出是个Swing客户端。
当Struts应用程序准备好给客户端返回数据时,它就会检测user-agent的值,然后选择适合客户端的jsp页面。这将会替代Struts Action类设置的跳转信息。

  1. String client = (String)request.getHeader("user-agent");    
  2.    // Forward control to the list page    
  3.    if (client.equals("SWING"))     
  4.     return (mapping.findForward("swinglist"));    
  5.    else return (mapping.findForward("list"));   

【编辑推荐】

  1. Swing线程解决方案
  2. 浅析Swing项目的开发
  3. 全面比较AWT和Swing
  4. 浅谈Swing绘画的处理过程
  5. 概述JSci.swing包的核心
责任编辑:佚名 来源: 机械工业出版社
相关推荐

2011-08-25 13:42:57

IP隧道IPIPGRE

2009-08-21 15:59:22

服务端与客户端通信

2010-02-24 16:39:27

WCF客户端处理

2009-08-21 15:36:41

服务端与客户端

2009-10-15 10:46:03

PPC客户端程序VB.NET创建

2009-08-21 17:53:25

C#网络编程客户端程序

2009-08-21 17:48:43

C#网络编程

2021-09-22 15:46:29

虚拟桌面瘦客户端胖客户端

2011-08-17 10:10:59

2010-05-31 10:11:32

瘦客户端

2011-03-02 14:36:24

Filezilla客户端

2011-03-24 13:00:31

配置nagios客户端

2010-12-21 11:03:15

获取客户端证书

2011-10-26 13:17:05

2011-03-21 14:53:36

Nagios监控Linux

2011-04-06 14:24:20

Nagios监控Linux

2013-05-09 09:33:59

2009-03-04 10:27:50

客户端组件桌面虚拟化Xendesktop

2009-08-21 16:37:54

C#客户端程序

2010-02-22 09:03:22

零客户端瘦客户端VDI终端
点赞
收藏

51CTO技术栈公众号