浅析Swing客户端知识
创始人
2024-04-16 06:41:43
0

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包的核心

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...