本文主要想通过一个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. flashback database(drop tablespace)

    1.首先记录时间 select to_char(systimestamp,'yyyy-mm-dd HH24:MI:SS') from dual;--2014-04-25 13:55:48 查看表sel ...

  2. Excel去除单元格中的汉字

    Alt+F11,插入,模块 Function RemoveChinese(rng As Range) s = Len(rng.Text) For i = 1 To s txt = StrConv(Mi ...

  3. android 关于setWidth()和setHeight()没反应的问题

      在android开发过程中,对于控件的高度,宽度,虽然在xml中用android:layout_height="match_parent"设置了 高度(match_parent ...

  4. Android中的UriMatcher、ContentUrist和ContentResolver

    因为Uri代表了要操作的数据,所以我们很经常需要解析Uri,并从Uri中获取数据.Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris .掌握它们的 ...

  5. GTD实用指南(转载)

    时间管理第一层:记录每日时间开支,认识自己的时间黑洞.你会惊讶地发现,每天的无意义时间很可能在70%以上. [避开时间黑洞的小策略:1.彻底关闭聊天工具:2.关掉邮件的到达提醒功能:3.保持办公环境的 ...

  6. 本体论与OWL

    http://semanticweb.org/wiki/Main_Page.html http://owl.man.ac.uk/documentation.shtml  https://zh.wiki ...

  7. loading数据加载的6种形式

    数据加载的几种形式及对应的交互设计 1.全屏加载 多出现在H5页面,例如微信的文章详情页.全屏加载的特点是数据一次性加载完成,内容加载完成之前界面都会停留在loading界面.进度条和有趣的动画设计, ...

  8. FreeSWITCH小结:关于export的原理介绍及应用

    FreeSWITCH小结:关于export的原理介绍及应用 Export原理 普通export用法 在dialplan中经常会用到export,如下所示: <action application ...

  9. 从零開始学android&lt;ScrollView滚动视图.十八.&gt;

    因为手机屏幕的高度有限.所以假设面对组件要显示多组信息的时候,ScrollView视图(滚动视图)能够有效的安排这些组件,浏览时能够自己主动的进行滚屏的操作. android.widget.Scrol ...

  10. Mac 學習系列之Python Challenge 11-20

    11.给你一个正整数列表 L, 如 L=[2,8,3,50], 输出L内全部数字的乘积末尾0的个数, 如例子L的结果为2.(提示:不要直接相乘,数字非常多,可能溢出) Answer: n_2 = 0 ...