spring amqp股票交易(四)

前面的两篇文章使用了Swing,此文将UI从Swing转回Web.此文还是用到前面大部分东东,只是不再使用main方法启动spring容器,使用servlet服务器(比如jetty)取而代之.servlet 3.0以下的入口都是从web.xml开始:
一.分析
1.web.xml.这是spring mvc的配置,还包括了ShallowEtagHeaderFilter和HiddenHttpMethodFilter两个(可参考spring api).
ShallowEtagHeaderFilter:处理响应时,用于基于内容来生成ETag.关于ETag:http://baike.baidu.com/item/ETag?fr=aladdin
HiddenHttpMethodFilter:用于转换Post参数方法为Http方法.
至于这个例子,这两个Filter我没看出在那里用上了,可以直接注释.


2.从web.xml来看,使用server-bootstrap-config.xml作为spring mvc的parent context(有人称父上下文),servlet-config.xml作为dispatcher context(有人称子上下文).两者最简单的关系:dispatcher context可引用parent context的bean,而反过来不可以.client-bootstrap-config.xml的类似内容都并入了dispatcher context.从servlet-config.xml的listener-container来看,服务器推送的股票报价信息交给了QuoteController.handleQuote(Quote)来处理,这里的处理就是将过时的报价去除,添加新的报价进来,存储在quotes这个队列里.
3.再看index.jsp和QuoteController.
a.先看文档加载完干了什么事,即看$(function () {});内容.先设置ajax不使用缓存,添加了三个click监听事件,并马上触发start事件.也为tradeForm表单添加submit事件.stop事件就是清除定时器,并停止请求.clear事件:就是将表格清空.
b.先看start事件:每隔1s向服务器拉取数据,实际就是从quotes变量过滤数据,然后返回前台页面显示.
c.至于请求--回复与前篇文章也类似,不详细分析.




二.启动jetty测试.发现报错"406 Not Acceptable",经调试,请求是可以进入到Controller方法内的,但返回时就抛错,从异常org.springframework.web.HttpMediaTypeNotAcceptableException信息及google,可猜测序列化json出问题,我也加了jackson1的包,于是我用了相对熟悉的jackson2包就发现正常了.做法:
1.将pom.xml改用jackson2包,即引入依赖
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.3.1</version>
</dependency>
2.将AbstractStockAppRabbitConfiguration注册的jsonMessageConverter Bean.改为
@Bean
public MessageConverter jsonMessageConverter() {
	return new Jackson2JsonMessageConverter();
}


注:测试过程中,觉得输出的日志太多,可以改一下log4j.properties的log4j.category.org.springframework.amqp.rabbit的级别,调高一点.

你可能感兴趣的:(spring,rabbitmq,AMQP,AMQP,股票,stock,trading)