学习淘淘商城第七十二课(网页静态化-业务逻辑及测试)
2017-05-19 23:01
363 查看
首先,需要在taotao-item-web工程添加对activemq的依赖,如下图所示。
依赖代码如下:
另外springmvc-activemq.xml文件也需要做些修改,修改后的代码如下
上面配置文件中配置了一个监听器,我们需要创建这么一个监听器,当监听到有添加商品的消息时便去生成静态页面,监听类如下图所示。
监听类代码如下:
代码中输出的文件路径配置在配置文件中,如下图所示。
写完了代码,下面我们来测试一下,先启动五个服务(zookeeper、image、solr、redis、activemq),然后依次启动taotao-manager、taotao-content、taotao-search、taotao-manager-web、taotao-portal-web、taotao-search-web、taotao-item-web工程。启动完后,我们在淘淘商城后台页面添加一个商品,如下图所示。
添加完商品后,我们到静态文件目录下查看生成的静态文件,如下图所示。我们双击生成的静态页面。
可以看到生成的静态页面是没有样式的,这是因为我们没有把样式文件放到相应的目录下。
为了让样式好看,我们把taotao-item-web工程的webapp目录下的css、images、js文件拷贝到"E:/freemarker"目录下也就是要与"out"目录在同一级别。
放置的目录如下图所示
要想看到页面正常效果,我们可以先使用windows版的nginx,大家可以到nginx官网下载一个windows版本的安装包,我下载的是1.8.1版本,解压后进入它的conf目录下,打开nginx.conf文件,修改location下面的root目录为"E:/freemarker/"。
修改完后,回到上一级目录,双击nginx.exe运行nginx,会看到一闪而过,这时nginx便启动了。
下面我们便使用nginx来访问我们的静态网页,在地址栏中输入http://localhost/out/149520429903365.html即可看到如下图所示界面,页面正常展示出了商品详情页面。
依赖代码如下:
<!-- activemq组件 --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> </dependency>下面我们需要把taotao-search-web工程下的applicationContext-activemq.xml文件拷贝到taotao-item-web工程下的spring目录下并且更名为springmvc-activemq.xml,要加载spring目录下的两个xml文件则需要修改taotao-item-web工程的web.xml文件,将原来扫描的springmvc.xml修改为springmvc*.xml,如下图所示。
另外springmvc-activemq.xml文件也需要做些修改,修改后的代码如下
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd"> <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 --> <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://192.168.156.30:61616" /> </bean> <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory --> <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory"> <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory --> <property name="targetConnectionFactory" ref="targetConnectionFactory" /> </bean> <!-- 配置生产者 --> <!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 --> <property name="connectionFactory" ref="connectionFactory" /> </bean> <!--这个是主题目的地,一对多的 --> <bean id="itemAddTopic" class="org.apache.activemq.command.ActiveMQTopic"> <constructor-arg value="item-add-topic" /> </bean> <!-- 配置监听器 --> <bean id="itemAddMessageListener" class="com.taotao.item.listener.ItemAddMessageListener"/> <!-- 消息监听容器 --> <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory"/> <property name="destination" ref="itemAddTopic"/> <property name="messageListener" ref="itemAddMessageListener"/> </bean> </beans>
上面配置文件中配置了一个监听器,我们需要创建这么一个监听器,当监听到有添加商品的消息时便去生成静态页面,监听类如下图所示。
监听类代码如下:
package com.taotao.item.listener; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.HashMap; import java.util.Map; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import com.taotao.item.pojo.Item; import com.taotao.pojo.TbItem; import com.taotao.pojo.TbItemDesc; import com.taotao.service.ItemService; import freemarker.template.Configuration; import freemarker.template.Template; public class ItemAddMessageListener implements MessageListener { @Autowired private ItemService itemService; @Autowired private FreeMarkerConfigurer freeMarkerConfiger; @Value("${HTML_OUT_PATH}") private String HTML_OUT_PATH; @Override public void onMessage(Message message) { try { //从消息中获取商品ID TextMessage textMessage = (TextMessage)message; String itemIdStr = textMessage.getText(); Long itemId = Long.parseLong(itemIdStr); //等待事务的提交,采用三次尝试的机会 TbItem tbItem = null; for(int i=0;i<3;i++){ //根据商品id查询商品信息及商品描述 Thread.sleep(1000); tbItem = itemService.getItemById(itemId); if(tbItem != null){ break; } } Item item = new Item(tbItem); TbItemDesc itemDesc = itemService.getItemDescById(itemId); //使用freemarker生成静态页面 Configuration configuration = freeMarkerConfiger.getConfiguration(); //创建模板并加载模板对象 Template template = configuration.getTemplate("item.ftl"); //准备模板需要的数据 Map data = new HashMap<>(); data.put("item", item); data.put("itemDesc", itemDesc); //指定输出的目录及文件名 OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(new File(HTML_OUT_PATH+itemIdStr+".html")),"UTF-8"); //生成静态页面 template.process(data, out); //关闭流 out.close(); } catch (Exception e) { e.printStackTrace(); } } }
代码中输出的文件路径配置在配置文件中,如下图所示。
写完了代码,下面我们来测试一下,先启动五个服务(zookeeper、image、solr、redis、activemq),然后依次启动taotao-manager、taotao-content、taotao-search、taotao-manager-web、taotao-portal-web、taotao-search-web、taotao-item-web工程。启动完后,我们在淘淘商城后台页面添加一个商品,如下图所示。
添加完商品后,我们到静态文件目录下查看生成的静态文件,如下图所示。我们双击生成的静态页面。
可以看到生成的静态页面是没有样式的,这是因为我们没有把样式文件放到相应的目录下。
为了让样式好看,我们把taotao-item-web工程的webapp目录下的css、images、js文件拷贝到"E:/freemarker"目录下也就是要与"out"目录在同一级别。
放置的目录如下图所示
要想看到页面正常效果,我们可以先使用windows版的nginx,大家可以到nginx官网下载一个windows版本的安装包,我下载的是1.8.1版本,解压后进入它的conf目录下,打开nginx.conf文件,修改location下面的root目录为"E:/freemarker/"。
修改完后,回到上一级目录,双击nginx.exe运行nginx,会看到一闪而过,这时nginx便启动了。
下面我们便使用nginx来访问我们的静态网页,在地址栏中输入http://localhost/out/149520429903365.html即可看到如下图所示界面,页面正常展示出了商品详情页面。
相关文章推荐
- 淘淘商城系列——网页静态化——业务逻辑及测试
- 学习淘淘商城第三十四课(在业务逻辑中添加缓存)
- 网页消息封装 业务逻辑 学习笔记
- 学习淘淘商城第七十一课(网页静态化-freemarker模板改造)
- 学习淘淘商城第七十课(网页静态化方案分析)
- 学习淘淘商城第八十六课(单点登录用户注册Controller层实现及测试)
- 学习淘淘商城第八十八课(单点登录用户登录--Controller层及测试)
- 业务逻辑学习是开发过程中的重要一环。
- 深入浅出学习Struts1框架(二):重构MVC模式代码中跳转路径和业务逻辑
- 学习淘淘商城第十九课(搭建单机版FastDFS图片服务器以及使用FastDFS-Client客户端进行简单测试)
- jsp版本2.1 servlet版本2.5 el表达式、jstl标签学习以及自定义标签(用标签实现业务逻辑和jsp页面的分离)
- 学习:如何规划面向业务逻辑的MOSS系统(转)
- 看视频学习业务流程模型介绍,学习测试有奖品
- (转)淘淘商城系列——在业务逻辑中添加缓存
- Selenium 网页测试工具和perl脚本结合,我自己记录的学习过程
- 一起写RPC框架(二十四)RPC测试篇一---基本业务逻辑的测试
- struct2 学习之——action业务逻辑的写法
- 深入浅出学习Struts1框架(二):重构MVC模式代码中跳转路径和业务逻辑
- 学习淘淘商城第十四课(服务调用测试)
- 斗地主逻辑业务实现(List,Collection的学习)