一、服务器处理请求过程
1、服务器启动时,会先读一系列配置文件,然后启动 SocketListener 进行监听
ApplicationServerLauncher.main(String[]) line: 59
ApplicationServer.loadApplications(File) line: 130
ApplicationServer.parseWebAppConfigFile(File) line: 231
ApplicationServer.register(ServerApplication) line: 320
SocketListener.listen(int, String) line: 181
SocketListener.<init>(int, String) line: 57

2、当得到请求时,转由 ApplicationServer 调度,然后创建并执行一个 ClientSocketTask
SocketListener.run() line: 195
ApplicationServer.dispatch(Socket) line: 388
ApplicationServer$ClientSocketTask.<init>(Socket) line: 432

3、请求最终交给新建的一个 ServerWorkerThread 线程
ApplicationServer$ClientSocketTask.run() line: 464
ApplicationPool.execute(Socket, ServerApplication) line: 48
ServerWorkerThread.<init>(Socket, ServerApplication) line: 32

4、调用 WMSServerApplication 的 doGet 方法响应请求
ServerWorkerThread.run() line: 131
WMSServerApplication(BasicServerApplication).service(Socket) line: 143
WMSServerApplication(BasicHttpServerApplication).doService(Socket) line: 62
WMSServerApplication.doGet(HTTPRequest, HTTPResponse) line: 172

5、在 doGet 中,首先根据请求类型由 WMSRequestFactory 创建请求 WMSRequest 对象,如果是空请求,会将请求重定向然后跳转到配置的 web.xml 文件中配置的 RedirectTo 页面(<property name="gov.nasa.worldwind.avkey.Server.RedirectTo" value="http://localhost:8000/wms?REQUEST=GetCapabilities"/>),在创建请求对象时,会获取服务名,如果没有得到会显示警告(严重: Malformed request )
WMSServerApplication.doGet(HTTPRequest, HTTPResponse) line: 173
WMSRequestFactory.create(HTTPRequest) line: 58

6、得到相应的请求对象后,调用请求对象的 service 方法进行响应,然后是一些收尾工作,以 GetCapabilities 请求为例,实际调用的是 WMSGetCapabilitiesRequest 的 getCapabilitiesString 方法返回了字符串
WMSServerApplication.doGet(HTTPRequest, HTTPResponse) line: 174
WMSGetCapabilitiesRequest.service(HTTPRequest, HTTPResponse) line: 92

二、地图服务的处理过程
1、程序启动过程中会读取地图服务的配置,需要在 wms.config.xml 文件中进行 mapsource 相关的配置,还会读取 GDAL 的路径,需要在 web.xml 文件中配置
ApplicationServerLauncher.main(String[]) line: 59
ApplicationServer.loadApplications(File) line: 130
ApplicationServer.parseWebAppConfigFile(File) line: 229
WMSServerApplication(BasicServerApplication).start() line: 154
WMSServerApplication.doStart() line: 83
WMSServerApplication.readConfigurationFile() line: 342
Configuration.<init>(InputStream) line: 130
Configuration.readMapSources(XPath, Document) line: 327

2、在 WorldWind 中获取地图影像的请求一般为:http://ip_address/wms?service=WMS&request=GetMap&version=1.3&srs=EPSG:4326&layers=bmng200405&styles=&transparent=TRUE&format=image/dds&width=512&height=512&bbox=left,bottom,right,top,在 create 方法中会读取响应参数,然后调用 Sector 的 fromDegrees 方法构造影像的范围,并计算跨度
WMSServerApplication.doGet(HTTPRequest, HTTPResponse) line: 173
WMSRequestFactory.create(HTTPRequest) line: 27
WMSGetMapRequest.<init>(HTTPRequest) line: 92
WMSGetMapRequest.parseBoundingBox(String, String, String[]) line: 210
Sector.fromDegrees(double, double, double, double) line: 57
Sector.<init>(Angle, Angle, Angle, Angle) line: 481

3、在 service 方法调用 buildBufferedImage 方法生成影像,中间调用了 pigeonHoleLon 和 pigeonHoleLat 得到经纬度对应的行列号,最终采用命令行方式调用 GDAL 的相关命令完成影像数据获取
WMSServerApplication.doGet(HTTPRequest, HTTPResponse) line: 174
WMSGetMapRequest.service(HTTPRequest, HTTPResponse) line: 457
BlueMarbleNG500MGenerator$BMNGServiceInstance.serviceRequest(IMapRequest) line: 140
BlueMarbleNG500MGenerator$BMNGServiceInstance.buildBufferedImage(IMapRequest) line: 200
BlueMarbleNG500MGenerator$BMNGServiceInstance.getImageFromSource(String, Sector, int, int) line: 257
GDALUtils.translate(String, String[], File, File) line: 477
GDALUtils.exec_gdal(String, List<String>) line: 233

4、获得影像数据后,根据请求影像的格式,再经过了一系列的处理,最后生成影像数据流发送回来
WMSServerApplication.doGet(HTTPRequest, HTTPResponse) line: 174
WMSGetMapRequest.service(HTTPRequest, HTTPResponse) line: 478
BufferedImageFormatter(ImageFormatter).getStreamFromMimeType(String, Properties) line: 130
BufferedImageFormatter(ImageFormatter).asDDS(Properties) line: 34
BufferedImageFormatter(ImageFormatter).intermediateToDDS(BufferedImage, Properties) line: 64

转载于:https://www.cnblogs.com/redfler/archive/2012/11/13/2768287.html

WorldWind Java 版学习:10、服务器响应相关推荐

  1. WorldWind Java 版学习:1、启动过程

    一.JOGL使用介绍 使用 JOGL,需要构造GLCapabilities.GLCanvas 和 GLEventListener 的对象,其中 GLCapabilities 对象用于构造 GLCanv ...

  2. WorldWind Java 版学习:8、事件响应

    1.在 WWPanelImpl 构造时,会调用 createView 构造一个 View 对象,此处是 BasicOrbitView 对象,在构造 BasicOrbitView 对象的时候,会构造一个 ...

  3. 20165234 [第二届构建之法论坛] 预培训文档(Java版) 学习总结

    [第二届构建之法论坛] 预培训文档(Java版) 学习总结 我通读并学习了此文档,并且动手实践了一遍.以下是我学习过程的记录~ Part1.配置环境 配置JDK 原文中提到了2个容易被混淆的概念 JD ...

  4. world wind java_WorldWind Java 版学习:1、启动过程

    一.JOGL使用介绍 使用 JOGL,需要构造GLCapabilities.GLCanvas 和 GLEventListener 的对象,其中 GLCapabilities 对象用于构造 GLCanv ...

  5. 微信公众号开发-Java版学习笔记

    微信公众号开发整体不难,主要是熟悉微信公众号常用的一些接口文档,然后会一门后端语言(比如java)即可. 罗召勇老师教程:微信公众号开发-Java版(蓝桥罗召勇) 微信公众号文档:微信公众号官方文档 ...

  6. worldwind java加载3ds_WorldWind Java 版学习:3、配置文件的读取

    1.在 WorldWindow 启动过程中,直接读取的配置文件有三个: 一个是在程序启动前,使用静态模块配置程序的配置文件 System.setProperty("gov.nasa.worl ...

  7. 微信公共号开发教程java版——请求消息,响应消息及事件消息类的封装(三)

    一:封装请求信息 当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上. 各消息类型的推送XML数据包结构如下: 查看官网详细介绍 文本消息<xml&g ...

  8. 微信公众平台深度开发JAVA版第一季 16.响应被动消息4

    回复视频消息不成功,不知道为什么.是因为视频上传不成功吗? package wx.out;import java.util.Date; import java.util.List;import wx. ...

  9. 微信公众平台深度开发JAVA版第一季 15.响应被动消息3

    微信开发难度不大,但是逻辑关系很强. 这节课主要讲微信接口,至于在J2EE平台怎么把程序构造的更好不在这节课里面讨论. package net.wxinterface; import java.io. ...

最新文章

  1. tomcat8 启动项目pom.xml配置
  2. apache禁止访问html,apache 限制目录访问
  3. 【LeetCode】198.打家劫舍
  4. 浅析DDD(领域驱动设计)
  5. Python基本数据类型(列表)
  6. php中怎么引用js变量_理解下 Go 中的引用是怎么回事
  7. OpencV使用fitEllipse拟合椭圆后,获取椭圆参数
  8. 换个安逸点儿的英文名,希望以后事业顺遂!
  9. 锂电池充电原理:充电电压电流的选择方法
  10. Linux-设置静态IP地址
  11. java工具类_16 个超级实用的 Java 工具类
  12. 无线路由器怎么改密码
  13. 解决问题Uncaught SyntaxError: The requested module ‘/node_modules/hls.js/dist/hls.js‘ does not provide
  14. deepin20.6设置默认的root密码
  15. Build过程(objc)
  16. 咪咕音乐的下载音乐存储路径(MAC)
  17. 小学计算机管理员总结,计算机管理教学个人总结范文
  18. 【PAT甲级】字符串处理及进制转换专题
  19. C/C++去小数位取整、向下取整、向上取整与四舍五入
  20. Android自定义步骤指示器

热门文章

  1. 架构的“一小步”,业务的一大步
  2. 对超线程几个不同角度的解释
  3. SSL连接并非完全问题解决
  4. Laravel+Angularjs+D3打造可视化数据,RESTful+Ajax
  5. 五种常见的PHP设计模式
  6. 三、6Gbps SAS冲锋队——Cheetah 15K.7、NS.2
  7. C:/WINDOWS/system32/x 病毒分析和解决建议
  8. MySQLmmm群集
  9. IntelliJ IDEA 添加本地xsd文件
  10. Java基础-Eclipse第三方安装包管理工具之Maven