【freemarker】网页静态化

方案

静态化时机:添加商品生成静态页面

静态页面保存位置:保存磁盘的任意目录

静态页面访问:使用nginx访问(tomcat性能较差)

 

流程

  1. 添加商品后发送给MQ;

  2. 订阅消息的多个工程生成以商品id为文件名的静态html;

  3. 配置nginx访问各工程生成的静态html;

  4. 配置反向代理服务器nginx转发请求访问各nginx服务器;

 

操作步骤

1.修改jsp为freemarker模板

2.监听MQ,根据freemarker模板创建静态html

public class HtmlGenListener implements MessageListener {

    @Autowired
    private ItemService itemService;
    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;
    @Value("${HTML_GEN_PATH}")
    private String HTML_GEN_PATH;

    @Override
    public void onMessage(Message message) {
        try {
            //创建一个模板,参考jsp
            //从消息中取商品id
            TextMessage textMessage = (TextMessage) message;
            String text = textMessage.getText();
            Long itemId = new Long(text);
            //等待事务提交
            Thread.sleep(1000);
            //根据商品id查询商品信息,商品基本信息和商品描述。
            TbItem tbItem = itemService.getItemById(itemId);
            Item item = new Item(tbItem);
            //取商品描述
            TbItemDesc itemDesc = itemService.getItemDescById(itemId);
            //创建一个数据集,把商品数据封装
            Map data = new HashMap<>();
            data.put("item", item);
            data.put("itemDesc", itemDesc);
            //加载模板对象
            Configuration configuration = freeMarkerConfigurer.getConfiguration();
            Template template = configuration.getTemplate("item.ftl");
            //创建一个输出流,指定输出的目录及文件名。
            Writer out = new FileWriter(HTML_GEN_PATH + itemId + ".html");
            //生成静态页面。
            template.process(data, out);
            //关闭流
            out.close();

        } catch (Exception e) {
            // TODO: handle exception
        }
    }
}

3.配置applicationContext-activemq.xml


<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="tcp://192.168.21.80:61616" />
bean>

<bean id="connectionFactory"
    class="org.springframework.jms.connection.SingleConnectionFactory">
    
    <property name="targetConnectionFactory" ref="targetConnectionFactory" />
bean>

<bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
    <constructor-arg value="itemAddTopic" />
bean>

<bean id="htmlGenListener" class="cn.e3mall.item.listener.HtmlGenListener"/>
<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="destination" ref="topicDestination" />
    <property name="messageListener" ref="htmlGenListener" />
bean>

4.复制静态HTML文件需要的css、js到对应的文件夹

你可能感兴趣的:(【,Java,】,………freemarker)