本文主要想通过一个WEB示例展示ActiveMQ在具体应用程序中是如何使用的,顺便简单介绍以下如何通过Eclipse搭建一个SpringMVC框架和Maven项目开发框架。下面首先展示一下项目最终的运行效果:

  首先在浏览器网址栏输入网址:http://127.0.0.1:8080/activeMQSpring/welcome 页面显示如下:

  然后点击Send Messages 进入消息发送界面:

  点击Submit按钮将会将MessageText框中当前时间发送给ActiveMQ服务器并返回至Welcome界面,点击RETURN HOME 将直接返回到Welcome界面。

  当点击Submit后,页面将直接跳转至Welcome界面,然后点击Get Message From Queue,将会从ActiveMQ服务器中获取一条消息:

  从图中可以看出,获得的消息正好是刚才发送的消息。

  下面展示一下项目结构:

  本示例开发环境:

  • 开发工具:Eclipse Neon Release (4.6.0)
  • jdk: 1.7.0_79
  • Spring framework 版本:4.3.6.RELEASE
  • ActiveMQ 版本:5.14.3
  • Jboss 版本:jboss-as-7.1.1.Final

Maven+Spring框架搭建

  Maven+Spring框架搭建的基本思想是首先大家Maven Web开发框架,然后通过Maven pom.xml文件引入Spring MVC框架所需要的依赖包。

  首先打开Eclipse,新建Maven项目:

  选择 Maven Project,点击next:

  选择 Use Default WorkSpace Location,点击next:

  Catalog选择“All Catalogs”,在下面的大选择框里面选择“org.apache.maven.archetypes maven-archetype-webapp 1.0”,点击next:

  由于Maven项目是可以采用三维坐标(groupid、artifactid and version)来确定具体项目的,所以,这三个信息为必填项。填写完成后点击Finish,此时在Project Explorer 中出现了我们刚刚新建的activeMQSpring项目。

  右键点击项目,选择“Properties”:

  在左侧选择框中选择“Java Build Path”,在右侧选择“Order and Export”,发现出现了两个相同的错误:activeMQSpring/src/main/java和activeMQSpring/src/test/java missing,由于我们要在activeMQSpring/src/main/java路径下写java文件,所以这个问题必须解决,解决方案如下:

  在“Java Build Path” 中选择 “Source”,在地下选择框中选择报错的那两个文件路径选项,点击“ Allow output folders for source folders ”前面的单选框,点击Apply,点击OK,此时,我们可以从项目结构中对应路径下看到缺失的两个文件夹。

  右键点击项目,选择Properties,在Properties中左侧栏选择“Java Compiler”,将左侧栏中的可选择的信息修改成1.7,点击OK。

  到目前为止,Maven框架搭建完成。

  下面通过Maven pom.xml文件实现Spring MVC 开发环境的搭建,编辑pom.xml文件内容如下:

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.unionpay.demo</groupId>
<artifactId>activeMQSpring</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>activeMQSpring Maven Webapp</name>
<url>http://maven.apache.org</url> <properties>
<springframework>4.3.6.RELEASE</springframework>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency> <dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency> <!-- spring --> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${springframework}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springframework}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springframework}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springframework}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${springframework}</version>
</dependency> <!-- xbean --> <dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>3.16</version>
</dependency> <dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.3.1</version>
</dependency> <!-- activemq --> <dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.14.3</version>
</dependency> </dependencies>
<build>
<finalName>activeMQSpring</finalName>
</build>
</project>

  编写完成后进行保存,然后右键项目,选择“Maven”->"Update Project":

  选择项目,点击OK。然后就可以在项目结构中看到项目中已经包含了开发所需要的Spring依赖包:

  这时,Spring MVC所需的jar包引用也已经完成啦。

  下面编写web.xml配置文件,内容如下:

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>activeMQSpring</display-name>
  <!-- contextConfigLocation 参数定义了要装入的 Spring 配置文件。 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring-root.xml;
classpath:activemq.xml
</param-value>
</context-param> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc-dispatch.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> <filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>

  编写spring-mvc-dispatch.xml文件,内容如下:

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> <!-- 将base-package 目录下java文件中的所有@Component @Controller@Service等这些注解的类,则把这些类注册为bean -->
<context:component-scan base-package="com.unionpay.demo.mvc.controller" />
<!-- 自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。 -->
<mvc:annotation-driven /> <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>

  下面编写activemq.xml文件,内容如下:

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:jms="http://www.springframework.org/schema/jms"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-4.1.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.12.1.xsd"
> <context:component-scan base-package="com.unionpay.demo.activemq" />
<mvc:annotation-driven /> <amq:connectionFactory id="amqConnectionFactory"
brokerURL="tcp://127.0.0.1:61616"
userName="admin"
password="admin" /> <!-- 配置JMS连接工长 -->
<bean id="connectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg ref="amqConnectionFactory" />
<property name="sessionCacheSize" value="100" />
</bean> <!-- 定义消息队列(Queue) -->
<bean id="demoQueueDestination" class="org.apache.activemq.command.ActiveMQQueue">
<!-- 设置消息队列的名字 -->
<constructor-arg>
<value>unionpay.demo</value>
</constructor-arg>
</bean> <!-- 配置JMS模板(Queue),Spring提供的JMS工具类,它发送、接收消息。 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="defaultDestination" ref="demoQueueDestination" />
<property name="receiveTimeout" value="10000" />
<!-- true是topic,false是queue,默认是false,此处显示写出false -->
<property name="pubSubDomain" value="false" />
</bean> <bean id="producerService" class="com.unionpay.demo.activemq.producer.ProducerService">
</bean> <bean id="consumerService" class="com.unionpay.demo.activemq.consumer.ConsumerService">
</bean> </beans>

  下面在目录/src/main/java下建立三个Package包: “com.unionpay.demo.activemq.producer”、 "com.unionpay.demo.activemq.consumer"、 "com.unionpay.demo.mvc.controller":

  建立完成后会在src/main/java/目录下看见这三个包:

  然后在“....producer”包中新建类ProducerService.java,内容如下:

 package com.unionpay.demo.activemq.producer;

 import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session; import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service; @Service
public class ProducerService { @Resource(name="jmsTemplate")
private JmsTemplate jmsTemplate; public void sendMessage(Destination destination,final String msg){
System.out.println("Send " + msg + " to Destination " + destination.toString()); MessageCreator messageCreator = new MessageCreator(){ public Message createMessage(Session session) throws JMSException { return session.createTextMessage(msg);
} }; jmsTemplate.send(destination, messageCreator);
} public void sendMessage(final String msg){ String destination = jmsTemplate.getDefaultDestinationName().toString();
System.out.println("Send " + msg + " to Destination " + destination);
MessageCreator messageCreator = new MessageCreator(){ public Message createMessage(Session session) throws JMSException {
// TODO Auto-generated method stub
return session.createTextMessage(msg);
} }; jmsTemplate.send(messageCreator);
}
}

  然后在“....consumer”包中添加类文件ConsumerService.java,内容如下:

 package com.unionpay.demo.activemq.consumer;

 import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.TextMessage; import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service; @Service
public class ConsumerService { @Resource(name = "jmsTemplate")
private JmsTemplate jmsTemplate; public TextMessage receive(Destination destination) {
TextMessage tm = (TextMessage) jmsTemplate.receive(destination);
if (tm != null) {
try {
System.out.println("Get Message: " + tm.getText() + " from Destination " + destination.toString());
} catch (JMSException e) {
e.printStackTrace();
}
}
return tm;
} }

  然后在“...mvc.controller”包中添加WelcomeController.java文件,内容如下:

 package com.unionpay.demo.mvc.controller;

 import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView; @Controller
public class WelcomeController { @RequestMapping(value="/welcome",method=RequestMethod.GET)
public ModelAndView welcome(){
System.out.println("-------------welcome-----------");
ModelAndView mv = new ModelAndView();
mv.setViewName("welcome");
return mv;
}
}

  然后在“....mvc.controller”包中添加类DemoController.java,内容如下:

 package com.unionpay.demo.mvc.controller;

 import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date; import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.TextMessage;
import javax.management.MBeanServerConnection;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView; import com.unionpay.demo.activemq.consumer.ConsumerService;
import com.unionpay.demo.activemq.producer.ProducerService; @Controller
public class DemoController { @Resource(name = "demoQueueDestination")
private Destination demoQueueDestination; @Resource(name = "producerService")
private ProducerService producer; @Resource(name = "consumerService")
private ConsumerService consumer; @RequestMapping(value = "/producer", method = RequestMethod.GET)
public ModelAndView producer() {
System.out.println("--------------go producer"); Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = sdf.format(now); System.out.println(time); ModelAndView mv = new ModelAndView(); mv.addObject("time", time);
mv.setViewName("jms_producer");
return mv;
} @RequestMapping(value = "/onsend", method = RequestMethod.POST)
public ModelAndView producer(@RequestParam("message") String message) {
System.out.println("---------send to jms");
ModelAndView mv = new ModelAndView();
producer.sendMessage(demoQueueDestination, message);
mv.setViewName("welcome");
return mv;
} @RequestMapping(value = "/receive", method = RequestMethod.GET)
public ModelAndView queue_receive() throws JMSException {
System.out.println("-----------receive message");
ModelAndView mv = new ModelAndView(); TextMessage tm = consumer.receive(demoQueueDestination); if (tm == null) {
mv.addObject("textMessage", "Queue is Empty");
} else {
mv.addObject("textMessage", tm.getText());
}
mv.setViewName("jms_receiver");
return mv;
} public ModelAndView jmsManager() throws IOException {
System.out.println("--------------jms manager");
ModelAndView mv = new ModelAndView(); mv.setViewName("welcome"); JMXServiceURL url = new JMXServiceURL(""); JMXConnector connector = JMXConnectorFactory.connect(url);
connector.connect();
MBeanServerConnection connection = connector.getMBeanServerConnection(); return mv;
} }

  在Spring MVC中,Model 和 Controller 部分我们已经编写完成,下面就该编写View部分了。

  在WEB-INF目录下新建views文件夹,然后在该文件夹中添加welcome.jsp文件:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Welcome</title>
</head>
<body> <h1>Welcome!!!</h1>
<h2><a href="producer">Send Messages</a></h2>
<h2><a href="receive">Get Message From Queue</a></h2>
</body>
</html>

  在views文件夹下添加jms_producer.jsp文件:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JMS-Producer</title>
</head>
<body> <h1>JMS-Producer!!!</h1>
<form action="onsend" method="post">
MessageText:<textarea name="message">${time}</textarea>
<input type="submit" value="Submit">
</form> <h2><a href="welcome">RETURN HOME</a></h2> </body>
</html>

  在views目录下添加jms_receiver.jsp文件:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JMS-Reciever</title>
</head>
<body>
<h1>JMS-Recever!!!</h1>
<h2>${textMessage}</h2>
<h2><a href="welcome">RETURN HOME</a></h2>
</body>
</html>

  到目前为止,整个项目建立完成。

  那么下面将该项目添加到Jboss容器中,具体操作过程这里就不介绍啦,很简单的。

  然后启动activeMQ服务器:

  然后通过Eclipse启动Jboss服务器,启动成功后终端显示如下:

  出现"Deployed "activeMQSpring.war" "说明部署成功,下面在浏览器中输入网址:http://127.0.0.1:8080/activeMQSpring/welcome,显示welcome界面,与本文开始项目展示描述一致,说明项目运行成功啦。

  源代码下载:activeMQSpring.zip

参考文献

  1. Spring mvc + ActiveMQ整合

  

ActiveMQ+SpringMVC+Maven应用示例的更多相关文章

  1. Kafka+SpringMVC+Maven应用示例

    本文借助主流SpringMVC框架向大家介绍如何在具体应用中简单快捷的使用kafka.kafka.maven以及SpringMVC在现在的企业级应用中都占据着非常重要的地位,所以本文将三者结合起来也可 ...

  2. springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置

    Log4j由三个重要的组件构成: 日志信息的优先级 日志信息的输出目的地 日志信息的输出格式 日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度 ...

  3. springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目

    一个简单的用户登录系统 用户有账号密码,登录ip,登录时间 打开登录页面,输入用户名密码 登录日志,可以记录登陆的时间,登陆的ip 成功登陆了的话,就更新用户的最后登入时间和ip,同时记录一条登录记录 ...

  4. springmvc 项目完整示例02 项目创建-eclipse创建动态web项目 配置文件 junit单元测试

    包结构 所需要的jar包直接拷贝到lib目录下 然后选定 build path 之后开始写项目代码 配置文件 ApplicationContext.xml <?xml version=" ...

  5. springmvc 项目完整示例03 小结

    利用spring 创建一个web项目 大致原理 利用spring的ioc 原理,例子中也就是体现在了配置文件中 设置了自动扫描注解 配置了数据库信息等 一般一个项目,主要有domain,dao,ser ...

  6. springmvc 项目完整示例04 整合mybatis mybatis所需要的jar包 mybatis配置文件 sql语句 mybatis应用

    百度百科: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBat ...

  7. springmvc 项目完整示例05 日志 --log4j整合 配置 log4j属性设置 log4j 配置文件 log4j应用

    log4j 就是log for java嘛,老外都喜欢这样子,比如那个I18n  ---internationalization  不就是i和n之间有18个字母... http://logging.a ...

  8. springmvc 项目完整示例07 设置配置整合springmvc springmvc所需jar包springmvc web.xml文件配置

    前面主要是后台代码,spring以及mybatis的整合 下面主要是springmvc用来处理请求转发,展现层的处理 之前所有做到的,完成了后台,业务层和持久层的开发完成了 接下来就是展现层了 有很多 ...

  9. springmvc 项目完整示例08 前台页面以及知识点总结

    至此已经基本测试成功了,我们稍作完善,让它成为一个更加完整的项目 我们现在重新规划下逻辑 两个页面 一个登录页面 一个欢迎页面 登陆页面输入账号密码,登陆成功的话,跳转登陆成功 欢迎页面 并且,更新用 ...

随机推荐

  1. 为什么说Kindle难圆“中国梦”? 支撑Kindle模式成功的要素,在当下中国并不太具备

    http://www.huxiu.com/article/12993/1.html 6月7日更新:Kindle入华终于尘埃落定,苏宁将在下午4点在北京30家店面同时销售,首批产品为Kindle Pap ...

  2. 使用jq Deferred防止代码被回调函数分解分解的支离破碎

    //移动人物 function moveInterval(stopPosotion){ var dtd = $.Deferred(); // 生成Deferred对象 var yidong= wind ...

  3. NPOI(2.1.3)向excel中插入图片,xls文档图片插入成功,xlsx文档图片插入失败

    众所周知,NPOI对xls和xlsx两个版本的excel文档的操作并没有一个统一的支持, 程序若想兼容这两个版本的操作,必须根据excel版本分别去调用HSSF和XSSF这两套操作库, 之前一直不明白 ...

  4. NoSQL(四)

    mongodb介绍 https://www.yiibai.com/mongodb/mongodb_drop_collection.html 1.文档性数据库类似于json对象,分布式 mongodb安 ...

  5. pandas drop_duplicates

    函数 : DataFrame.drop_duplicates(subset=None, keep='first', inplace=False) 参数:这个drop_duplicate方法是对Data ...

  6. host文件配置 了解

    https://blog.csdn.net/CJF_iceKing/article/details/7702694 hosts文件位于" C:\Windows\System32\driver ...

  7. Powershell - 获取OS版本信息和catpion信息

    Environment  获取 OSversion: $OSVersion = [System.Environment]::OSVersion.Version WMI获取Caption: $OSCap ...

  8. wpf 帧动画

    帧动画实现很简单 <ImageBrush x:Key="speed_s" Stretch="Fill" ImageSource="/images ...

  9. urllib3学习

    urllib3.connectionpool.connection_from_url(url, **kw) Given a url, return an ConnectionPool instance ...

  10. unity shader(二)