服务器端的处理才是整个事件的Key,那么我们来看看整个请求,回复的过程,我们通过下面的图看看我们服务器端的代码怎么样才可以plug in进去:
Snap1.jpg (38.59 KB)
看了这个图您肯定已经明白了,我们有机会得到客户端发送过来的HTTP请求,得到这个请求,得到请求里面的参数,我们就可以捋起袖子,大干一番了。
我们用什么方式去处理呢,最简单的一个方法是自己写一个servlet,在servlet的Dopost方法里面,写上处理这个请求的代码,并且把结果以XML的方式返回回去,那么我们这里用一个简单的例子:
[Copy to clipboard]
[ - ]CODE:
throws java.io.IOException {
String action = req.getParameter("action");
String item = req.getParameter("item");
if ((action != null)&&(item != null)) {
// Add or remove items from the Cart
if ("add".equals(action)) {
cart.addItem(item);
} else if ("remove".equals(action)) {
cart.removeItems(item);
}
}
// Serialize the Cart's state to XML
String cartXml = cart.toXml();
// Write XML to response.
res.setContentType("application/xml");
res.getWriter().write(cartXml);
}
这对于了解服务器端编程的人来说,是最简单不过的了。当然,我们用了JSF框架,肯定不会再通过Servlet技术去做这件事情。我们这里用JSF的PhaseListener进行处理。什么是PhaseListener,我们来看一下PhaseListener的JavaDoc:
[Copy to clipboard]
[ - ]CODE:
extends java.util.EventListener, java.io.Serializable
An interface implemented by objects that wish to be notified at the beginning and ending of processing for each standard phase of the request processing lifecycle.
原来,这个接口捕捉到每个Request的声明周期,在请求开始处理和请求处理结束时我们可以插入我们自己的代码。这个接口的两个最重要的方法如下:
[Copy to clipboard]
[ - ]CODE:
Handle a notification that the processing for a particular phase has just been completed. void beforePhase(javax.faces.event.PhaseEvent event)
Handle a notification that the processing for a particular phase of the request processing lifecycle is about to begin.
处理结束和处理开始两个方法,我们可以在这两个方法里面写入我们自己的代码,对用户过来的请求进行处理。
比如,我们可以在afterPhase方法里面,插入下面的代码对数据进行处理:
[Copy to clipboard]
[ - ]CODE:
ExternalContext externalContext = facesContext.getExternalContext();
Map paramMap = externalContext.getRequestParameterMap();
通过paramMap里面可以得到所有的参数,当然,我们并不是对每一个请求都会进行处理,所以,在客户端Javascript发送Ajax请求得时候,可以添加一个自定义的参数,比如我们前面文档中的ajaxdemo=ajaxdemo参数,这样我们可以判断一下当前是不是我们要处理的请求:
[Copy to clipboard]
[ - ]CODE:
if (! AJAX_DEMO.equals(paramMap.get(AJAX_DEMO)))
return;
接下去的代码,就可以处理我们的各种各样的请求了,我们在这里要举的例子是如何得到当前地图的比例尺。下次讲座再深入探讨吧。
End of《ArcGIS Server Java讲座--如何在用JSF在服务器端处理Ajax请求》