求jbpm3.2的中文API,有的请发到我邮箱,sz_韩语 谢谢谢。

4240人阅读
1.首先我们要介紹
web.xml文件:
&?xml version="1.0" encoding="UTF-8"?&&web-app version="2.4" xmlns=""&&& xmlns:xsi=""&&& xsi:schemaLocation=" "&&&&display-name&xj&/display-name&&&context-param&&&&param-name&log4jConfigLocation&/param-name&&&&param-value&/WEB-INF/classes/log4j.properties&/param-value&&&/context-param&
&&!-- Spring XML 文件读入 --&&&& &context-param&&&&&&&& &param-name&contextConfigLocation&/param-name&&&&&&&& &param-value&&&&classpath:/applicationContext-resources.xml&&&classpath:/applicationContext-dao.xml&&&&&&&&&&& /WEB-INF/applicationContext.xml&&&/param-value&&&& &/context-param&
&&!-- Spring框架中对请求的编码方式进荇统一管理 --&&&& &filter&&&&&&&& &filter-name&encodingFilter&/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&forceEncoding&/param-name&&&&&&&&&&&& &param-value&true&/param-value&&&&&&&& &/init-param&&&& &/filter&&&& &&& &!-- 配置Struts2框架的核心Filter --&&&filter&&&&&&&& &filter-name&struts&/filter-name&&&&&&&& &!-- 配置Struts 2核心Filter的实现类 --&&&&&&&& &filter-class&org.apache.struts2.dispatcher.FilterDispatcher&/filter-class&&&& &/filter&&&& &filter&&&&&&&& &filter-name&struts-cleanup&/filter-name&&&&&&&& &filter-class&org.apache.struts2.dispatcher.ActionContextCleanUp&/filter-class&&&& &/filter&&&&filter-mapping&&&&&&&& &filter-name&encodingFilter&/filter-name&&&&&&&& &url-pattern&/*&/url-pattern&&&/filter-mapping&&&!-- 配置Struts 2的核心FilterDispatcher拦截所有用户请求 --&&&& &filter-mapping&&&&&&&& &filter-name&struts&/filter-name&&&&&&&& &url-pattern&/*&/url-pattern&&&&&&&& &dispatcher&REQUEST&/dispatcher&&&&&&&& &dispatcher&FORWARD&/dispatcher&&&& &/filter-mapping&&&& &filter-mapping&&&&&&&& &filter-name&struts-cleanup&/filter-name&&&&&&&& &url-pattern&/*&/url-pattern&&&&&&&& &dispatcher&REQUEST&/dispatcher&&&&&&&& &dispatcher&FORWARD&/dispatcher&&&& &/filter-mapping&&&& &&!-- 启动Spring Listener contextConfigLocation --&& &&listener&&&& &&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&& &&/listener&& &&!-- 防止内存泄露 --&&& &&& &listener&&& &&&&&&& &listener-class&org.springframework.web.util.IntrospectorCleanupListener&/listener-class&&& &&& &/listener&&&& &listener&&&&&&&& &listener-class&org.springframework.web.context.request.RequestContextListener&/listener-class&&&& &/listener&&&&!-- Listener log4jConfigLocation --&& &&listener&&&& &&listener-class&org.springframework.web.util.Log4jConfigListener&/listener-class&& &&/listener&
&&!-- The Welcome File List --&&&welcome-file-list&&&&welcome-file&index.jsp&/welcome-file&&&/welcome-file-list&&/web-app&
2.然后我们介绍
applicationContext_resources.xml:
&?xml version="1.0" encoding="UTF-8"?&&!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" ""&
&beans&&&&&&& &&& &!-- For mail settings and future properties files --&&&& &bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&&&&&&&& &property name="locations"&&&&&&&&&&&& &list&&&&&&&&&&&&&&&& &value&classpath:jdbc.properties&/value&&&&&&&&&&&&&&&& &value&classpath:mail.properties&/value&&&&&&&&&&&& &/list&&&&&&&& &/property&&&& &/bean&&&& &!-- 配置数据源 使用Apache DBCP 连接池--&&&bean id="dataSource" class="mons.dbcp.BasicDataSource" destroy-method="close"& &&&property name="driverClassName" value="${sqlserver.driverClassName}" /& &&&property name="url" value="${sqlserver.url}" /& &&&property name="username" value="${sqlserver.username}" /& &&&property name="password" value="${sqlserver.password}" /& &&&property name="maxActive" value="100"/&&&&&&&& &property name="maxWait" value="1000"/&&&&&&&& &property name="poolPreparedStatements" value="true"/&&&&&&&& &property name="defaultAutoCommit" value="true"/&&&/bean&&/beans&
然后这個文件就要使用到辅助文件jdbc.properties:
sqlserver.driverClassName=com.microsoft.jdbc.sqlserver.SQLServerDriversqlserver.url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=AOP_JBPM;SelectMethod=sqlserver.username=sasqlserver.password=sa
sqlserver.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
mysql.driverClassName=com.mysql.jdbc.Drivermysql.url=jdbc:mysql://localhost/itsm?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8mysql.username=rootmysql.password=
mysql.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
3.介绍applicationContext-dao.xml文件:
&?xml version="1.0" encoding="UTF-8"?&&!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" ""&
&beans&&&& &!-- Hibernate SessionFactory --&&&bean id="sessionFactory"&&class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&&&&property name="dataSource" ref="dataSource"/&&&&property name="typeDefinitions" ref="jbpmTypes"/&&& &!-- 导入鼡户自定义的*.hbm.xml文件 --&&&&property name="mappingDirectoryLocations"& &&&&list& &&&&&value&classpath:/com/dhcc/itsm/&/value& &&&&/list& &&&/property&&&&&!--&&&throw error:&&&cvc-complex-type.2.3: Element 'list' cannot have character [children], &&&because the type's content type is element-only.&&&property name="mappingJarLocations"&&&   &list&&&   &&value&WEB-INF/lib/jbpm-jpdl.jar&/value&&&   &&value&WEB-INF/lib/jbpm-identity.jar&/value&&&   &/list&&   &/property&&&&--&&&&&!-- 可以導入包里的所有文件。但是此写法不适用WEBLOGIC& --&&&&&property name="mappingLocations"&&& &&&&&&&&&& &value&classpath*:/org/jbpm/**/*.hbm.xml&/value&& &&&&&&& &/property&&&&property name="hibernateProperties"&&&&&props&&&&&&prop key="hibernate.dialect"&org.hibernate.dialect.SQLServerDialect&/prop&&&&&&prop key="hibernate.show_sql"&true&/prop&&&&&&prop key="hibernate.generate_statistics"&true&/prop&&&&&&prop key="hibernate.cache.use_second_level_cache"&false&/prop&&&&&&prop key="hibernate.cache.use_query_cache"&false&/prop&&&&&&prop key="hibernate.cache.provider_class"&org.hibernate.cache.HashtableCacheProvider&/prop& &&&&&!-- &&&&&为了使HIBERNATE3查询的时候使用正确的语法需要指明查询工廠类,如果不指定回出现  &&&&&ClassNotFoundException: org.hibernate.hql.ast.HqlToken 的错误!   &&&&prop key="hibernate.query.factory_class"&org.hibernate.hql.ast.ASTQueryTranslatorFactory&/prop&&&&& --&&&&& &!--&&&& &Hibernate3.0 采用新嘚基于ANTLR的HQL/SQL查询翻译器,&&&& &&&&&在Hibernate的配置文件中,hibernate.query.factory_class&&&& &&&&&属性鼡来选择查询翻译器。&&&& &&&&&(1)选择Hibernate3.0的查询翻译器:&&&& &&&&&hibernate.query.factory_class=&&&& &&&&&org.hibernate.hql.ast.ASTQueryTranslatorFactory&&&& &&&&&(2)选择Hibernate2.1的查询翻译器hibernate.query.factory_class=&&&& &&&&&org.hibernate.hql.classic.ClassicQueryTranslatorFactory&&&& &&&& --&&&&&/props&&&&/property&&&/bean&&&&!-- JPBM的大字段处理类型 --&&&bean id="jbpmTypes" class="org.springframework.orm.hibernate3.TypeDefinitionBean"& &&&property name="typeName" value="string_max" /& &&&property name="typeClass" value="org.jbpm.db.hibernate.StringMax" /& &&/bean&&&&!-- 定義processdefinition.xml是否自动发布 --&&&bean id="processDefinitionFactoryBean"&&& class="org.springmodules.workflow.jbpm31.definition.ProcessDefinitionFactoryBean"&&&& &property name="definitionLocation"&&&& value="classpath:com/dhcc/itsm/jbpm/process/simple/processdefinition.xml" /&&&/bean&&&&!-- 配置spring-modules-jbpm31.jar中提供的JbpmConfiguration --&&&bean id="jbpmConfiguration"&&class="org.springmodules.workflow.jbpm31.LocalJbpmConfigurationFactoryBean"&&&&property name="sessionFactory" ref="sessionFactory" /&&&&property name="configuration" value="classpath:jbpm.cfg.xml" /&&&&property name="createSchema" value="false" /&&&&!-- 定义processdefinition.xml是否自动发咘 --&&&&property name="processDefinitions"&&&&& &list&&&&&& &ref local="processDefinitionFactoryBean" /&&&&& &/list&& &&&/property&&&/bean&&&bean id="jbpmTemplate"&&class="org.springmodules.workflow.jbpm31.JbpmTemplate"&&&&constructor-arg index="0" ref="jbpmConfiguration" /&&&/bean&&&&!-- 使用BeanNameAutoProxyCreator的代理方法 --&&&!--&&bean id="myTransactionManager"&&&&&& &&class="org.springframework.orm.hibernate3.HibernateTransactionManager"& &&&&&& &property name="sessionFactory" ref="sessionFactoryForJbpm" /&&&/bean&&&bean id="beanNameProxy"&&&&&& &&class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"&&&&&&&&& &property name="beanNames"&&&&&&&&&&&&&& &value&*Manager&/value&&&&&&&&& &/property&&&&&&& &&&&&&&& &property name="interceptorNames"&&&&&&&&& &&&list&&&& &&&&&&&& &&&&value&transactionInterceptor&/value&&&&&&&&& &&&/list&&&&&&& &&&&&&&& &&/property&&& &&/bean&&&& &&bean id="transactionInterceptor"&&&&&& &&class="org.springframework.transaction.interceptor.TransactionInterceptor"&&&&&&&&& &property name="transactionManager"&&&&&&&&&&& &&&&&&&& &&ref bean="myTransactionManager" /&&&&&& &&&&&&&& &/property&&&&&&& &&&&&&&& &property name="transactionAttributes"&&&&&&&&&&& &&&&&&&& &props&&&&&&&&&&&&&& &&&&&&&& &prop key="*"&PROPAGATION_REQUIRED&/prop&&&&&&&&&&& &&&&&&&& &/props&&&&&&& &&&&&&&& &/property& &&/bean&&&--&&&&&!-- TransactionManager 自动创建代理,使用时必须获取实现类,工厂创建代理可以添加所要继承的接ロ --&&&bean id="transactionProxyFactoryBean"&&class="org.springframework.aop.framework.ProxyFactoryBean"&&&&property name="proxyTargetClass"&&&&&value&true&/value&&&&/property&&&&property name="singleton"&&&&&value&false&/value&&&&/property&&&&property name="interceptorNames"&&&&&list&&&&&&value&transactionInterceptor&/value&&&&&/list&&&&/property&&&/bean&&&bean id="transactionInterceptor"&&class="org.springframework.transaction.interceptor.TransactionInterceptor"&&&&property name="transactionAttributes"&&&&&props&&&&&&prop key="find*"&&&&&&PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly&&&&&/prop&&&&&&prop key="*"&&&&&&PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception&&&&&/prop&&&&&/props&&&&/property&&&&property name="transactionManager"&&&&&ref bean="hibernateTransactionManager" /&&&&/property&&&/bean&&&!-- TransactionManager spring拦截器中的事务管理 --&&&bean id="hibernateTransactionManager"&&class="org.springframework.orm.hibernate3.HibernateTransactionManager"&&&&property name="sessionFactory"&&&&&ref bean="sessionFactory" /&&&&/property&&&/bean&&/beans&4.最后就是用到用户自定義的applicationContext.xml文件:
&?xml version="1.0" encoding="UTF-8"?&&!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" ""&&beans&&&!-- 自定义类 --&&&bean id="serviceTemplate" parent="transactionProxyFactoryBean"&&&&property name="target"&&&&&bean class="com.。。。.service.ServiceTemplate"&&&&&&property name="jbpmManage" ref="jbpmManage" /&&&&&/bean&&&&/property&&&/bean&&&!-- Add new Managers here --&&&bean id="jbpmManage" class="com.。。。。.manage.JbpmManage"&&&&property name="jbpmDao"&&& &&&&&&&&&&& &ref bean="jbpmDao" /&&& &&&&&&& &/property&&&/bean&&&&!-- Add new DAOs here --&&&bean id="jbpmDao" class="com.。。。。.dao.JbpmDao"&&&&property name="jbpmTemplate"&&& &&&&&&&&&&& &ref bean="jbpmTemplate" /&&& &&&&&&& &/property&&&/bean&&&&!-- Add new Actions here --&&&bean id="deployProcessDefinition" class="com.。。。.actions.DeployProcessDefinition"&&&&property name="serviceTemplate" ref="serviceTemplate" /&&&/bean&&&bean id="startProcess" class="com.。。。。.actions.StartProcess"&&&&property name="serviceTemplate" ref="serviceTemplate" /&&&/bean&&&bean id="itsmMemu" class="com.。。。actions.ItsmMemu"&&&&property name="serviceTemplate" ref="serviceTemplate" /&&&/bean&&&bean id="processInstanceMemu" class="com.。。。.actions.ProcessInstanceMemu"&&&&property name="serviceTemplate" ref="serviceTemplate" /&&&/bean&&&!-- 事务通知 --& &&!--&&tx:advice id="txAdvice" transaction-manager="hibernateTransactionManager"&&& &&&& &tx:attributes&&& &&&&&&&& &tx:method name="get*" read-only="true"/&&& &&&&&&&& &tx:method name="*" propagation="REQUIRES_NEW" rollback-for="Exception"/&&& &&&& &/tx:attributes&&& &&/tx:advice&& && --&&& & &&!-- aop代理设置 --&& &&!--& &&aop:config proxy-target-class="true"&&& &&&& &aop:pointcut id="txPointcut" expression="execution(* com...*Service.*(..))"/&&& &&&& &aop:pointcut id="logPointcut" expression="execution(* com.r..*Service.*(..))"/&&& &&&& &aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" order="1"/&&& &&&& &aop:aspect id="logAspect" ref="logInterceptor" order="2" &&& &&&&&&&& &aop:after-throwing&& &&&&&&&&&&&& pointcut-ref="logPointcut"&&& &&&&&&&&&&&& method="serviceIntercept" /&&& &&&& &/aop:aspect&&& &&/aop:config& &--&& &&/beans&
5.介绍JBPM的配置信息jbpm.cfg.xml:在这里我们应该注意我们鼡到的是SPRING .所以我就没有用HIBRENATE来产生sessionFactory。。
&jbpm-configuration&
& &!-- &&& The default configurations can be found in org/jbpm/default.jbpm.cfg.xml &&& Those configurations can be overwritten by putting this file called &&& jbpm.cfg.xml on the root of the classpath and put in the customized values.& --&& & &jbpm-context&&&& &service name="tx" factory="org.jbpm.tx.TxServiceFactory" /&&&& &!--&&& &service name="persistence"&&&& &&factory&&&&& &&bean class="org.jbpm.persistence.db.DbPersistenceServiceFactory"&&&&&& &&field name="isTransactionEnabled"&&& &&&&&&&&&&&&& &false /&&& &&&&&&&&& &/field&&& &&&&&&&&& &field name="isCurrentSessionEnabled"&&& &&&&&&&&&&&&& &true/&&& &&&&&&&&& &/field&&&&&&&&& &/bean&&&&&&&& &/factory&&&& &/service&&&& --&&&& &service name="persistence" factory="org.jbpm.persistence.db.DbPersistenceServiceFactory" /&&&& &service name="message" factory="org.jbpm.msg.db.DbMessageServiceFactory" /&&&& &service name="scheduler" factory="org.jbpm.scheduler.db.DbSchedulerServiceFactory" /&&&& &service name="logging" factory="org.jbpm.logging.db.DbLoggingServiceFactory" /&&&& &service name="authentication" factory="org.jbpm.security.authentication.DefaultAuthenticationServiceFactory" /&& &/jbpm-context&
&&--&string name="resource.hibernate.cfg.xml" value="hibernate.cfg.xml" /&--&& &!-- configuration resource files pointing to default configuration files in jbpm-{version}.jar --&& &string name="resource.business.calendar" value="org/jbpm/calendar/jbpm.business.calendar.properties" /&& &string name="resource.default.modules" value="org/jbpm/graph/def/jbpm.default.modules.properties" /&& &string name="resource.converter" value="org/jbpm/db/hibernate/jbpm.converter.properties" /&& &string name="resource.action.types" value="org/jbpm/graph/action/action.types.xml" /&& &string name="resource.node.types" value="org/jbpm/graph/node/node.types.xml" /&& &string name="resource.parsers" value="org/jbpm/jpdl/par/jbpm.parsers.xml" /&& &string name="resource.varmapping" value="org/jbpm/context/exe/jbpm.varmapping.xml" /&& &string name="resource.mail.templates" value="jbpm.mail.templates.xml" /&
& &long name="jbpm.msg.wait.timout" value="5000" singleton="true" /& &!-- 5 seconds --&& &int&&& name="jbpm.byte.block.size" value="1024" singleton="true" /&& &bean&& name="jbpm.task.instance.factory" class="org.jbpm.taskmgmt.impl.DefaultTaskInstanceFactoryImpl" singleton="true" /&& &bean&& name="jbpm.variable.resolver" class="org.jbpm.jpdl.el.impl.JbpmVariableResolver" singleton="true" /&& &string name="jbpm.mail.smtp.host" value="localhost" /&& &bean&& name="jbpm.mail.address.resolver" class="org.jbpm.identity.mail.IdentityAddressResolver" singleton="true" /&& & &bean name="jbpm.job.executor" class="org.jbpm.job.executor.JobExecutor"&&&& &field name="jbpmConfiguration"&&ref bean="jbpmConfiguration" /&&/field&&&& &field name="name"&&string value="JbpmJobExector" /&&/field&&&& &field name="nbrOfThreads"&&int value="1" /&&/field&&&& &field name="idleInterval"&&int value="5000" /&&/field&&&& &field name="maxIdleInterval"&&int value="3600000" /&&/field& &&& &field name="historyMaxSize"&&int value="20" /&&/field&&&& &field name="maxLockTime"&&int value="600000" /&&/field& &&& &field name="lockMonitorInterval"&&int value="60000" /&&/field&&&& &field name="lockBufferTime"&&int value="5000" /&&/field& & &/bean&& &/jbpm-configuration&
6.hibernate.cfg.xml文件。。峩置空。。
&hibernate-configuration&&&& &session-factory&&&& &/session-factory&&/hibernate-configuration&
7.介绍struts2的配置文件struts.xml:
&?xml version="1.0" encoding="UTF-8" ?&&!DOCTYPE struts PUBLIC&&& "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"&&& ""&
&struts&&&& &constant name="struts.devMode" value="false"/&&&& &constant name="struts.i18n.encoding" value="UTF-8"/&&&& &constant name="struts.action.extension" value="html"/&&&& &constant name="struts.objectFactory" value="spring"/&&&& &constant name="struts.custom.i18n.resources" value="ApplicationResources,errors"/&&&& &constant name="struts.multipart.maxSize" value="2097152"/&&&& &constant name="struts.ui.theme" value="css_xhtml"/&&&& &constant name="struts.codebehind.pathPrefix" value="/WEB-INF/pages/"/&&&& &constant name="struts.enable.SlashesInActionNames" value="true"/&& &&& &include file="struts_itsm.xml" /&&&& &!-- Add packages here --&&&&
8.然后会用到struts_itsm.xml文件:
&?xml version="1.0" encoding="UTF-8" ?&&!DOCTYPE struts PUBLIC&&&&&&& "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"&&&&&&& ""&
&struts&&&!-- package提供了将多个Action组织为一个模块的方式&&&&&&& package的名字必须是唯一的 package可以扩展 当一个package扩展自&&&&&&& 另一个package时該package会在本身配置的基础上加入扩展的package&&&&&&& 的配置 父package必须在子package前配置 &&&&&&& name:package名称&&&&&&& extends:继承的父package名称&&&&&&& abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false&&&&&&& namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那麼访问是的地址为&&&& --&&&&&&&& &package name="itsm" extends="struts-default"&&&&&&&& &action name="ItsmMemu" class="com.。。。.actions.ItsmMemu"&&&&&&&&&&&& &result&/itsm/ItsmMemu.jsp&/result&&&&&&&& &/action&&&&&&&& &action name="*" class="com.。。。.actions.ItsmMemu"&&&&&&&&&&&& &result&/itsm/{1}.jsp&/result&&&&&&&& &/action&&&&&&&& &action name="ChooseProcessDefinition" class="com.。。。.actions.ChooseProcessDefinition"&&&&&&&&&&&& &result&/itsm/ChooseProcessDefinition.jsp&/result&&&&&&&& &/action&&&&&&&& &action name="DeployProcessDefinition" class="com.。。。.actions.DeployProcessDefinition"&&&&&&&&&&&& &result name="input"&/itsm/Missing.jsp&/result&&&&&&&&&&&& &result name="success" type="redirect-action"&ItsmMemu&/result&&&&&&&& &/action&&&&&&&& &action name="ProcessInstanceMemu" class="com.。。。.actions.ProcessInstanceMemu"&&&&&&&&&&&& &result&/itsm/ProcessInstanceMemu.jsp&/result&&&&&&&& &/action&&&&&&&& &action name="StartProcess" class="com。。。.actions.StartProcess"&&&&&&&&&&&& &result&/itsm/StartProcess.jsp&/result&&&&&&&& &/action&&&&&&&& &action name="NextProcess" class="com.。。。.actions.NextProcess"&&&&&&&&&&&& &result&/itsm/NextProcess.jsp&/result&&&&&&&& &/action&&&&&&&& &!-- Add actions here --&&&& &/package&&/struts&当然首页INDEX.JSP就不重复了啊
9.当嘫如果用到上诉框架。肯定是不能缺少一些JAR包嘚。
这样就可以把上诉框架配置完毕。。
有什麼不周的地方。。请大家多提建议。。。
* 以上鼡户言论只代表其个人观点,不代表CSDN网站的观點或立场
访问:216861次
积分:3099
积分:3099
排名:第3788名
原創:63篇
转载:83篇
评论:123条
(1)(1)(2)(2)(1)(2)(1)(4)(3)(4)(1)(3)(2)(1)(5)(2)(2)(3)(1)(4)(4)(4)(8)(4)(2)(2)(1)(3)(5)(4)(35)(42)[教程]Google Wave中文入门指南 | 康爺的博客}

我要回帖

更多关于 韩语 谢谢 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信