arcIMS的客户端开发模式分HTML Viewer和Java Viewer两种,Java Viewer由于需要在客户端安装JRE,在webGIS开发中已经被一棒打死。而arcIMS提供的HTML Viewer中,大量处理地图的代码都是用JavaScript编写,界面代码和业务处理代码大量的混杂在一起,调试起来很不方便。利用struts对arcIMS请求代码进行封装,实现了业务代码和界面代码的分离。进行JSP开发时,利用可中MVC框架使得开发起来非常便利。比较有名的MVC框架有struts,spring等。简单,快捷的Struts是应用最广泛的一个。
(1)在struts中新建一个action
<action-mappings >
<action
attribute="requestMapForm"
input="/index1.jsp"
name="requestMapForm"
path="/requestMap"
scope="request"
type="com.suzhou.struts.action.RequestMapAction" />
</action-mappings>
(2)在map.jsp中新建一个form,对应这个action,记住,struts的<url-pattern>必须设置成*.do的格式(在web.xml中设置),如果设置成/do/*格式,多次请求这个action会出现找不到action的错误。 字串2
<FORM action="requestMap.do" name="requestMapForm">
<INPUT type="submit" value="确定"/>
</FORM>
(3)编写action代码
字串8
代码
package com.suzhou.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; 字串9
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
字串3
import com.esri.aims.mtier.io.ConnectionProxy;
import com.esri.aims.mtier.model.map.Map;
import com.suzhou.struts.form.RequestMapForm;
/** */ /** 字串2
* MyEclipse Struts
* Creation date: 03-29-2006
*
* XDoclet definition:
* @struts.action path="/requestMap" name="requestMapForm" input="jspForm.jsp" scope="request" validate="true"
*/
public class RequestMapAction extends Action
{ 字串1
// --------------------------------------------------------- Instance Variables
// --------------------------------------------------------- Methods
/** */ /** 字串3
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward 字串9
*/
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) { 字串9
RequestMapForm requestMapForm = (RequestMapForm) form;
String strAction = requestMapForm.getAction();
ConnectionProxy conn = new ConnectionProxy();
conn.setHost( " menglikun " ); // ArcIMS服务器的名称或者IP 字串3
conn.setConnectionType(conn.TCP);
conn.setPort( 5300 ); // ArcIMS服务器的端口
conn.setService( " zixian " ); // 需要调用的ArcIMS服务器的服务名称
conn.setDisplayMessages( false ); 字串6
// 使用Map对象的访问方式
/**/ /*
Map map=(Map)request.getSession().getAttribute("gongzhongMap");
if(map==null){ 字串3
//如果Map对象为空,新建一个Map对象
map=new Map();
try{
map.initMap(conn,0,false,false,false,false);
map.refresh();
request.setAttribute("mapURL",map.getMapOutput().getURL()); 字串5
request.getSession().setAttribute("gongzhongMap",map);
return mapping.getInputForward();
}catch(Exception ex){
System.out.println(ex.getMessage());
ex.printStackTrace(); 字串8
}
}else{
map.refresh();
request.setAttribute("mapURL",map.getMapOutput().getURL());
request.getSession().setAttribute("gongzhongMap",map);
return mapping.getInputForward(); 字串7
}
*/
/**/ /*
* 不使用Map对象,直接通过arcXML进行请求的访问方式。
* 这种方式的好处是可以使用arcXML所有的功能,功能非常强大。 字串3
* 但要自己写代码处理arcIMS返回的结果。
*/
String strArcXML = " <?xml version=\ " 1.0 \ " encoding=\ " UTF - 8 \ " ?> " 字串5
+ " <ARCXML version=\ " 1.1 \ " > "
+ " <REQUEST> "
+ " <GET_IMAGE> " 字串9
+ " <PROPERTIES> "
+ " <ENVELOPE minx=\ " - 13.62 \ " miny=\ " 33.91 \ " maxx=\ " 53.62 \ " maxy=\ " 73.33 \ " /> " 字串7
+ " <IMAGESIZE width=\ " 600 \ " height=\ " 400 \ " /> "
+ " </PROPERTIES> " 字串2
+ " <LAYER type=\ " acetate\ " name=\ " acetate\ " id=\ " acetate\ " > "
+ " <OBJECT units=\ " pixel\ " > " 字串6
+ " <NORTHARROW type=\ " 4 \ " coords=\ " 20 30 \ " shadow=\ " 32 , 32 , 32 \ " size=\ " 15 \ " /> " 字串8
+ " </OBJECT> "
+ " </LAYER> "
+ " </GET_IMAGE> " 字串9
+ " </REQUEST> "
+ " </ARCXML> " ;
try { 字串9
conn.send(strArcXML);
return mapping.getInputForward();
} catch (Exception ex) {
System.out.println(ex.getMessage()); 字串5
ex.printStackTrace();
}
102 return null ;
103 }
104 }
上一篇:
用OpenLayers解析GML文件 下一篇:
ARCIMS 和TOMCAT的配置教程
收藏本文: