`
Ben.Sin
  • 浏览: 235791 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

【转】Spring 结合velociy/freemaker的相关配置

阅读更多

Spring Framework开发参考: 14.4. Velocity和 FreeMarker

VelocityFreeMarker 是两种模板语言,都可以做为view层技术在Spring MVC 应用中使用。 它们的语言风格和适用对象都很相似,这里把它们放在一起讨论。至于它们语义和语法上的不同,可以参考 FreeMarker 站点。

14.4.1. 需要的资源

 

使用Velocity或FreeMarker需要包含 velocity-1.x.x.jar freemarker-2.x.jar 。另外Velocity还需要 commons-collections.jar 。一般把这些jar包放在 WEB-INF/lib 下,这样可以保证J2EE Server找到它们并加到web应用的classpath下。这里同样假设你的 'WEB-INF/lib' 目录下已有 spring.jar !Spring的发布包中已经提供了最新的稳定版本的Velocity、FreeMarker和commons collections,可以从相应的 /lib/ 子目录下得到。如果你想在Velocity中使用Spring的dateToolAttribute或numberToolAttribute,那你还需 要 velocity-tools-generic-1.x.jar

 

14.4.2. Context 配置

 

通过在 '*-servlet.xml' 中增加相关的配置bean,可以初始化相应的配置,如下:

    
     <!--
     该bean使用一个存放模板文件的根路径来配置Velocity环境。你也可以通过指定一个属性文件来更精细地控制Velocity,但对基于文件的模板载入来说,默认的方式已相当健全
     -->
    

    
<bean id="velocityConfig">
  <property name="resourceLoaderPath" value="/WEB-INF/velocity/"/>
</bean>

     <!--
     也可以把ResourceBundle或XML文件配置到视图解析器中。如果你需要根据Locale来解析不同的视图,就需要使用resource bundle解析器。
     -->


    
<bean id="viewResolver">
  <property name="cache" value="true"/>
  <property name="prefix" value=""/>
  <property name="suffix" value=".vm"/>
</bean>
    
     <!-- freemarker config -->
    

    
<bean id="freemarkerConfig">
  <property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
</bean>

     <!--
     也可以把ResourceBundle或XML文件配置到视图解析器中。如果你需要根据Locale来解析不同的视图,就需要使用resource bundle解析器。
     -->


    
<bean id="viewResolver">
  <property name="cache" value="true"/>
  <property name="prefix" value=""/>
  <property name="suffix" value=".ftl"/>
</bean>

注意

对于非web应用,你需要在application context的配置文件中声明 VelocityConfigurationFactoryBean 或者 FreeMarkerConfigurationFactoryBean


14.4.3. 创建模板

 

模板文件需要存放在配置*Configurer bean时所指定的目录下,就像上面的例子所示。 这里不准备详细叙述使用这两种语言创建模板的细节,你可以参考相应的站点获取那些信息。 如果你用了我们推荐的视图解析器,你会发现从逻辑视图名到相应模板文件的映射方式与使用 InternalResourceViewResolver 处理JSP时的映射方式类似。比如若你的控制器返回了ModelAndView对象,其中包含一个叫做“welcome”的视图名,则视图解析器将试图查 找 /WEB-INF/freemarker/welcome.ftl/WEB-INF/velocity/welcome.vm 作为合适的模板。

 

14.4.4. 高级配置

 

以上着重介绍的基本配置适合大部分应用需求,然而仍然有一些不常见的或高级需求的情况,Spring提供了另外的配置选项来满足这种需求。

14.4.4.1. velocity.properties

 

这个文件是可选的,不过一旦指定,其所包含的值即影响Velocity运行时状态。只有当你要做一些高级配置时才需要这个文件,这时你可以在上面定义的 VelocityConfigurer 中指定它的位置。

     <bean id="velocityConfig"
     class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
     <property name="configLocation
     value="/WEB-INF/velocity.properties"/>
     </bean>
    

另一种方法,你可以直接在Velocity config bean的定义中指定velocity属性,来取代“configLocation”属性。

<bean id="velocityConfig">
  <property name="velocityProperties">
    <props>
      <prop key="resource.loader">file</prop>
      <prop key="file.resource.loader.class">
        org.apache.velocity.runtime.resource.loader.FileResourceLoader
      </prop>
      <prop key="file.resource.loader.path">${webapp.root}/WEB-INF/velocity</prop>
      <prop key="file.resource.loader.cache">false</prop>
    </props>
  </property>
</bean>

关于Spring中Velocity的配置请参考 API文档 或者参考Velocity自身文档中的例子和定义来了解如何配置 'velocity.properties' 文件。

 

14.4.4.2. FreeMarker

 

FreeMarker的'Settings'和'SharedVariables'配置可以通过直接设置 FreeMarkerConfigurer 的相应属性来传递给Spring管理的FreeMarker Configuration 对象,其中 freemarkerSettings 属性需要一个java.util.Properties 类型对象, freemarkerVariables 需要一个 java.util.Map 类型对象。

<bean id="freemarkerConfig">
  <property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
  <property name="freemarkerVariables">
    <map>
      <entry key="xml_escape" value-ref="fmXmlEscape"/>
    </map>
  </property>
</bean>
<bean id="fmXmlEscape"/>

关于settings和variables如何影响 Configuration 对象的细节信息,请参考FreeMarker的文档。


14.4.5. 绑定支持和表单处理

 

Spring提供了一个在JSP中使用的标签库,其中包含一个 <spring:bind/> 标签,它主要用来在表单中显示支持对象(译者注:即表单数据传输对象)的数据,并在一个 Validator (工作在Web层或业务逻辑层)校验失败时显示失败信息。 从1.1版本开始,Spring为Velocity和FreeMarker也提供了同样的功能,而且还另外提供了便于使用的宏,用来生成表单输入元素。

14.4.5.1. 用于绑定的宏

 

spring.jar 文件为这两种语言维护了一套标准宏,对于正确配置的应用,它们总是可用的。

在Spring库中定义的一些宏被认为是内部的(私有的),但当宏定义中不存在这样的范围界定时, 会使得所有的宏均是可见的,能够任意调用代码和用户模板。下面的一节将集中讨论模板中可以直接调用的宏。 如果希望直接查看宏的代码,它们分别是 org.springframework.web.servlet.view.velocity 包中的spring.vm文件和 org.springframework.web.servlet.view.freemarker 包中的spring.ftl文件。

 

14.4.5.2. 简单绑定

 

在扮演Spring表单控制器对应视图的html表单(或vm/ftl模板)里, 你可以模仿下面的代码来绑定表单数据并显示错误信息(和JSP的形式非常相似)。 注意默认情况下命令对象的名字是“command”,你可以在配置自己的表单控制器时通过设置'commandName'属性来覆盖默认值。 例子代码如下(其中的personFormVpersonFormF 是前面定义的视图):

     <!-- velocity宏自动可用 --> <html> ...
     <form action="" method="POST"> Name:
     #springBind( "command.name" ) <input type="text"
     name="${status.expression}" value="$!status.value"
     /><br> #foreach($error in
     $status.errorMessages) <b>$error</b>
     <br> #end <br> ... <input
     type="submit" value="submit"/> </form> ...
     </html>
    
     <!-- FreeMarker宏必须导入到一个名称空间,这里推荐你定义为'spring'空间
     --> <#import "spring.ftl" as spring />
     <html> ... <form action=""
     method="POST"> Name: <@spring.bind
     "command.name" /> <input type="text"
     name="${spring.status.expression}"
     value="${spring.status.value?default("")}"
     /><br> <#list
     spring.status.errorMessages as error>
     <b>${error}</b> <br>
     </#list> <br> ... <input
     type="submit" value="submit"/> </form> ...
     </html>
    

#springBind / <@spring.bind> 需要一个'path'属性,格式为命令对象的名字(默认值为'command', 除非你在配置FormController的属性时改变它)后跟圆点再加上你希望绑定到的命令对象的属性名。 你也可以使用类似“command.address.street”的格式来处理嵌套对象。使用 bind 宏时,HTML转码行为由web.xml中名为 defaultHtmlEscape 的ServletContext参数指定。

上述宏的另一种可选形式是 #springBindEscaped / <@spring.bindEscaped> ,它另外接受一个布尔型参数,显式指定了输出值或错误信息这些状态信息时是否使用HTML转码。 附加的表单处理宏简化了HTML转码的使用,只要有可能,你就应该使用它们。关于它们的细节将在下节讲述。

 

14.4.5.3. 表单输入生成宏

 

为这两种语言附加的一些很方便的宏同时简化了表单绑定和表单生成(包括显示校验错误信息)。 不需要使用这些宏来生成表单输入域,它们可以被混杂并匹配到简单HTML,或者直接调用前面讲过的spring绑定宏。

下表展示了可用的宏的VTL定义和FTL定义,以及它们需要的参数。

表 14.1. 宏定义表

macro VTL definition FTL definition
message (输出一个根据code参数选择的资源绑定字符串) #springMessage($code) <@spring.message code/>
messageText (输出一个根据code参数选择的资源绑定字符串,找不到的话输出default参数的值) #springMessageText($code $text) <@spring.messageText code, text/>
url (在URL相对路径前面添加应用上下文根路径application context root) #springUrl($relativeUrl) <@spring.url relativeUrl/>
formInput (标准表单输入域) #springFormInput($path $attributes) <@spring.formInput path, attributes, fieldType/>
formHiddenInput * (表单隐藏输入域) #springFormHiddenInput($path $attributes) <@spring.formHiddenInput path, attributes/>
formPasswordInput *(标准表单密码输入域;注意不会为这种类型的输入域装配数据) #springFormPasswordInput($path $attributes) <@spring.formPasswordInput path, attributes/>
formTextarea (大型文本(自由格式)输入域) #springFormTextarea($path $attributes) <@spring.formTextarea path, attributes/>
formSingleSelect (单选列表框) #springFormSingleSelect( $path $options $attributes) <@spring.formSingleSelect path, options, attributes/>
formMultiSelect (多选列表框) #springFormMultiSelect($path $options $attributes) <@spring.formMultiSelect path, options, attributes/>
formRadioButtons (单选框) #springFormRadioButtons($path $options $separator $attributes) <@spring.formRadioButtons path, options separator, attributes/>
formCheckboxes (复选框) #springFormCheckboxes($path $options $separator $attributes) <@spring.formCheckboxes path, options, separator, attributes/>
showErrors (简化针对所绑定输入域的校验错误信息输出) #springShowErrors($separator $classOrStyle) <@spring.showErrors separator, classOrStyle/>



* 在FTL(FreeMarker)中,这二种宏实际上并不是必需的,因为你可以使用普通的 formInput 宏,指定fieldType 参数的值为 'hidden ' 或 'password '即可 。

上面列出的所有宏的参数都具有一致的含义,如下述:

  • path:待绑定属性的名字(如:command.name)

  • 选项:一个Map,其中保存了所有可从输入域中选择的值。map中的键值(keys)代表将从表单绑定到命令对象然后提交到后台的实值(values)。 存储在Map中的与相应键值对应的对象就是那些在表单上显示给用户的标签,它们可能与提交到后台的值不同。通常这样的map由控制器以引用数据的方式提 供。你可以根据需求的行为选择一种Map实现。比如对顺序要求严格时,可使用一个 SortedMap ,如一个TreeMap 加上适当的Comparator;对要求按插入顺序返回的情况,可以使用commons-collections提供的 LinkedHashMapLinkedMap

  • 分隔符:当使用多选的时候(radio buttons 或者 checkboxes),用于在列表中分隔彼此的字符序列(如 "<br>")。

  • 属性:一个附加的以任意标签或文本构成的字符串,出现在HTML标签内。该字符串被宏照原样输出。例如:在一个textarea标签内你可能会提供 'rows="5" cols="60"'这样的属性,或者你会传递'style="border:1px solid silver"'这样的样式信息。

  • classOrStyle:供showErrors宏用来以这种样式显示错误信息,其中错误信息嵌套于使用该CSS类名的span标签内。如果不提供或内 容为空,则错误信息嵌套于<b></b>标签内。

 

宏的例子在下面描述,其中一些是FTL的,一些是VTL的。两种语言之间的用法差别在旁注中解释。

14.4.5.3.1. 输入域

 

 

       <!-- 上面提到的Name域的例子,使用VTL中定义的表单宏 -->
       ... Name: #springFormInput("command.name"
       "")<br> #springShowErrors("<br>"
       "")<br>
      

 

formInput宏接受一个path参数(command.name)和一个附加的属性参数(在上例中为空)。该宏与所有其他表单生成宏一样,对 path参数代表的属性实施一种隐式绑定,这种绑定保持有效状态直到一次新的绑定开始,所以showErrors宏不再需要传递path参数——它简单地 操作最近一次绑定的属性(field)。

showErrors宏接受两个参数:分隔符(用于分隔多条错误信息的字符串)和CSS类名或样式属性。注意在FreeMarker中可以为属性参数指定 默认值(这点儿Velocity做不到)。上面的两个宏调用在FTL中可以这么表达:

      <@spring.formInput "command.name"/>
      <@spring.showErrors "<br>"/>
     

上面展示的用于生成name表单输入域的代码片断产生的输出如下,同时还显示了输入值为空的情况下提交表单后产生的校验错误信息(校验过程由Spring 的验证框架提供)。

生成的HTML如下:

      Name: <input type="text" name="name" value=""
      > <br> <b>required</b>
      <br> <br>
     

参数(属性)用来向textarea传递样式信息或行列数属性。

 

14.4.5.3.2. 选择输入域

 

有四种用于在HTML表单中生成通用选择输入框的宏。

  • formSingleSelect

  • formMultiSelect

  • formRadioButtons

  • formCheckboxes

 

每个宏都将接受一个由选项值和选项标签的集合构成的Map,其中选项值和其标签可以相同。

下面展示了一个在FTL中使用radio按钮的例子。表单支撑对象(form backing object)提供了一个默认值'London',所以该域不需要校验。当渲染表单时,整个待展现的城市列表由模型对象的'cityMap'属性以引用数 据的方式提供。

      ... Town: <@spring.formRadioButtons
      "command.address.town", cityMap, ""
      /><br><br>
     

这将产生一行radio按钮—— cityMap 中一个值对应一个按钮,并以""分隔。没有额外的属性,因为宏的最后一个参数不存在。cityMap中所有的key-value都使用String类型 值。map中的key用作输入域的值(将被作为请求参数值提交到后台),value用作显示给用户的标签。上述示例中,表单支撑对象提供了一个默认值以及 三个著名城市作为可选值,它产生的HTML代码如下:

      Town: <input type="radio" name="address.town"
      value="London"> London <input type="radio"
      name="address.town" value="Paris"
      checked="spring.framework.ecked"> Paris <input
      type="radio" name="address.town" value="New
      York"> New York
     

如果你希望在应用中按照内部代码来处理城市,你得以适当的键值创建map,如下:

      protected Map referenceData(HttpServletRequest
      request) throws Exception { Map cityMap = new
      LinkedHashMap(); cityMap.put("LDN", "London");
      cityMap.put("PRS", "Paris"); cityMap.put("NYC",
      "New York");
      Map m = new HashMap(); m.put("cityMap",
      cityMap); return m; }
     

现在上述代码将产生出以相关代码为值的radio按钮,同时你的用户仍能看到对他们显示友好的城市名。

      Town: <input type="radio" name="address.town"
      value="LDN"> London <input type="radio"
      name="address.town" value="PRS"
      checked="spring.framework.ecked"> Paris <input
      type="radio" name="address.town" value="NYC">
      New York
     


14.4.5.4. 重载HTML转码行为并使你的标签符合XHTML

 

缺省情况下使用上面这些宏将产生符合HTML 4.01标准的标签,并且Spring的绑定支持使用web.xml中定义的HTML转码行为。为了产生符合XHTML标准的标签以及覆盖默认的HTML 转码行为,你可以在你的模板(或者模板可见的模型对象)中指定两个变量。在模板中指定的好处是稍后的模板处理中可以为表单中不同的域指定不同的行为。

要切换到符合XHTML的输出,你可以设置model/context变量xhtmlCompliant的值为true:

     ## for Velocity.. #set($springXhtmlCompliant = true)
     <#-- for FreeMarker --> <#assign
     xhtmlCompliant = true in spring>
    

在进行完这些处理之后,由Spring宏产生的所有标签都符合XHTML标准了。

类似地,可以为每个输入域指定HTML转码行为:

     <#-- 该句覆盖默认HTML转码行为 -->
     <#assign htmlEscape = true in spring> <#--
     next field will use HTML escaping -->
     <@spring.formInput "command.name" />
     <#assign htmlEscape = false in spring> <#--
     all future fields will be bound with HTML escaping
     off -->
    
分享到:
评论

相关推荐

    velocity开发必备(中文指南+精通Velociy)

    5. **与其他框架的集成**:展示了Velocity如何与Spring、Struts等Java Web框架协同工作,以及在非Web环境中如邮件生成、XML处理的应用。 6. **社区与资源**:提供了Velocity社区的信息,包括邮件列表、文档和API,...

    javaWeb应用开发之velocity模板使用

    velociy模板引擎介绍,使用example,demo。开发教程。

    分子动力学模拟方法概述

    Gear算法可以处理非线性常微分方程,Velociy-Verlet算法则可以同时得到粒子的位置、速度与加速度,保持计算精度的同时提供了速度的显式表达式。 在分子动力学模拟中,还要考虑宏观可观测量的提取,如温度、压力、热...

    基于NSGA2与熵权TOPSIS的电力系统储能选址定容优化及Matpower潮流计算研究

    内容概要:本文详细探讨了利用NSGA2算法进行电力系统中储能系统的选址和定容优化,并结合熵权TOPSIS方法选择最优解。首先介绍了使用Matpower工具包进行潮流计算的基础步骤,随后深入讨论了储能系统引入后的复杂性和优化目标设定。文中展示了如何构建目标函数,包括储能的投资成本和系统电压偏差,并详细解释了NSGA2算法的具体实现,如种群初始化、交叉变异操作以及约束条件处理。最后,通过熵权法确定权重并应用TOPSIS方法对多个优化结果进行评估,选出综合性能最佳的储能配置方案。 适合人群:从事电力系统规划、优化算法研究的专业人士,尤其是对储能系统优化感兴趣的科研人员和技术开发者。 使用场景及目标:适用于需要解决电力系统中储能系统选址和定容问题的实际工程项目。主要目标是在满足系统稳定性要求的前提下,最小化储能系统的投资成本,提高系统的经济性和可靠性。 其他说明:文章提供了详细的代码片段和理论推导,帮助读者更好地理解和实施所提出的优化方法。此外,还提到了一些实际应用中的注意事项,如SOC约束处理、参数选择等,为后续的研究和应用提供了宝贵的实践经验。

    基于python+pyqt5实现视频自动化下载、剪辑和上传系统源码+项目说明.zip

    基于python+pyqt5实现视频自动化下载、剪辑和上传系统源码+项目说明.zip 该项目是用脚本实现部分视频网站视频内容的自动化下载、剪辑以及上传,其中界面是用PyQT做的。 使用的浏览器驱动是undetected_chromedriver,可以跳过tiktok的机器人检查 使用的浏览器是91,版本:Google_Chrome_(64bit)_v91.0.4472.77 【功能】 自动从各种视频网站下载视频 支持视频剪辑和合集制作 支持自动上传视频到视频网站 技术栈 Python PyQT undetected_chromedriver

    西门子S7-1200双套三坐标6轴联动控制系统的设计与实现

    内容概要:本文详细介绍了西门子S7-1200双套三坐标6轴联动控制系统的开发与调试经验。主要内容涵盖双PLC通信机制、轴控制逻辑、安全联锁设计以及触摸屏程序绑定等方面。文中通过具体代码示例展示了如何利用SCL语言实现高效稳定的多轴联动控制,并分享了实际项目中的最佳实践和技术难点解决方案。此外,还讨论了程序结构优化、报警代码设计、数据块管理等关键环节,强调了模块化设计思想的应用及其带来的效率提升。 适合人群:从事工业自动化领域的工程师,尤其是熟悉西门子PLC编程的专业人士。 使用场景及目标:适用于需要进行复杂运动控制的自动化生产线,如汽车制造、电子装配等行业。主要目标是提高生产效率,确保设备运行的安全性和稳定性。 其他说明:文中提到的许多技术和方法不仅限于特定型号的PLC,对于其他品牌的控制器也有一定的借鉴意义。同时,提供的代码片段可以直接应用于类似项目中,帮助开发者快速搭建可靠的控制系统。

    NFC Tools Pro

    NFC Tools是一个应用程序,允许你在你的 NFC 标签和其他 RFID 兼容芯片上读取或写入或编程代码任务。NFC Tools PRO版本包括很多其他的附加功能,比如配置文件管理等。保存你的NFC标签或任务的配置文件,以便你以后重新使用它们。导出和导入很容易。NFC Tools PRO官方版允许你直接从现有的 NFC 标签导入你的记录或任务。 你可以很快编辑你的标签。此外还可以直接运行你的任务配置文件,不需要NFC 标签。

    protobuf-6.30.1-py3-none-any.whl

    该资源为protobuf-6.30.1-py3-none-any.whl,欢迎下载使用哦!

    FLAC3D中壳单元与衬砌单元内力提取及处理技巧

    内容概要:本文详细介绍了如何在FLAC3D中提取壳单元和衬砌单元的关键内力数据,如弯矩、轴力和剪力。针对壳单元,文中提供了具体的FISH命令和函数,展示了如何利用gp.extra属性提取弯矩,并强调了局部坐标系方向的重要性。对于衬砌单元,则介绍了专门的命令和注意事项,如使用liner组件提取轴力和剪力,以及如何处理弯矩数据。此外,还分享了一些实用的经验和技巧,如批量数据处理、单位换算、内力符号规则等。最后,提到了使用Python进行后处理的方法,将提取的数据转化为更直观的形式,便于进一步分析。 适合人群:从事岩土工程、隧道工程及相关领域的工程师和技术人员,尤其是对FLAC3D有一定基础的用户。 使用场景及目标:帮助用户掌握FLAC3D中壳单元和衬砌单元内力提取的具体方法,提高工作效率,确保数据分析的准确性。适用于需要进行结构内力分析、支护设计优化等项目的工程师。 其他说明:文章不仅提供了详细的命令和函数示例,还分享了许多实战经验和常见错误的规避方法,有助于初学者少走弯路。同时,强调了内力符号规则和单位换算的重要性,避免因疏忽导致的重大失误。

    ST PMSM FOC电机控制资料包2.0:全面解析STM32电机控制核心技术与实战技巧

    内容概要:本文详细介绍了ST公司发布的HL07:ST PMSM FOC电机控制资料包2.0的内容及其应用。资料包涵盖了ST芯片电机控制的全源代码、详细文档、多个工程源码、stm32库培训资料及例程源码。文中通过具体的代码示例,如GPIO初始化、PWM配置、ADC采样、Clarke变换、PID调节器、SVPWM生成等,深入剖析了电机控制的关键技术和优化技巧。此外,还揭示了一些隐藏的技术细节和调试技巧,如硬件同步、动态调整PID参数、电机参数自识别等。 适合人群:电机控制工程师、嵌入式开发人员、尤其是对STM32和FOC算法感兴趣的开发者。 使用场景及目标:帮助读者深入了解ST芯片电机控制的具体实现,掌握从硬件配置到算法优化的全过程,提高实际项目的开发效率和质量。适用于需要进行电机控制系统设计、调试和优化的工程项目。 其他说明:资料包中的代码和文档非常实用,提供了丰富的实战经验和优化建议,尤其适合初学者和有一定基础的研发人员。同时,文中提到的一些特殊技巧和注意事项有助于避免常见的开发陷阱,提升系统的稳定性和性能。

    人工智能2025年AI领袖与技术发展趋势:多模态AI、量子计算及行业应用展望

    内容概要:文章探讨了2025年AI技术发展趋势及潜在的GPT级技术突破。首先回顾了GPT系列模型的发展历程及其对自然语言处理领域的深远影响。接着,通过介绍Geoffrey Hinton、李飞飞和张晨等AI领袖的观点,阐述了AI技术在实际应用场景中的挑战与机遇。文中详细描述了AI大模型的演进,包括多模态技术的发展、轻量化趋势以及可控性和可解释性的提升。此外,还介绍了AI计算力的革命性升级,如量子计算、云计算+AI和边缘AI的发展。最后,文章分析了AI在医疗、金融、教育、自动驾驶等行业的落地应用,并指出了面临的挑战与机遇,展望了未来的技术和社会影响。 适合人群:对AI技术感兴趣的从业者、研究人员、企业家及政策制定者。 使用场景及目标:①了解AI技术的最新进展和未来趋势;②探索AI技术在各行业的应用前景;③评估AI技术带来的挑战与机遇,为相关决策提供参考。 阅读建议:本文内容涵盖广泛,既有技术细节又有宏观展望,建议读者结合自身背景选择感兴趣的部分深入阅读,重点关注与自身行业或研究方向相关的章节。

    基于樽海鞘算法优化的极限学习机回归预测及其与BP、GRNN、ELM的性能对比研究

    内容概要:本文详细探讨了基于樽海鞘算法(SSA)优化的极限学习机(ELM)在回归预测任务中的应用,并与传统的BP神经网络、广义回归神经网络(GRNN)以及未优化的ELM进行了性能对比。首先介绍了ELM的基本原理,即通过随机生成输入层与隐藏层之间的连接权重及阈值,仅需计算输出权重即可快速完成训练。接着阐述了SSA的工作机制,利用樽海鞘群体觅食行为优化ELM的输入权重和隐藏层阈值,从而提高模型性能。随后分别给出了BP、GRNN、ELM和SSA-ELM的具体实现代码,并通过波士顿房价数据集和其他工业数据集验证了各模型的表现。结果显示,SSA-ELM在预测精度方面显著优于其他三种方法,尽管其训练时间较长,但在实际应用中仍具有明显优势。 适合人群:对机器学习尤其是回归预测感兴趣的科研人员和技术开发者,特别是那些希望深入了解ELM及其优化方法的人。 使用场景及目标:适用于需要高效、高精度回归预测的应用场景,如金融建模、工业数据分析等。主要目标是提供一种更为有效的回归预测解决方案,尤其是在处理大规模数据集时能够保持较高的预测精度。 其他说明:文中提供了详细的代码示例和性能对比图表,帮助读者更好地理解和复现实验结果。同时提醒使用者注意SSA参数的选择对模型性能的影响,建议进行参数敏感性分析以获得最佳效果。

    工业自动化中汇川PLC与基恩士PLC基于EIP通讯的联机实现及应用

    内容概要:本文详细介绍了汇川PLC与基恩士PLC通过Ethernet/IP (EIP) 协议实现联机的方法及其应用场景。首先,文章解释了硬件配置,包括基恩士KV-7300 CPU搭配KV-EP21v以太网通信模块以及汇川AM-400系列PLC的网口连接。接下来,分别阐述了基恩士和汇川PLC的程序框架,涵盖初始化EIP通讯模块、设置IP地址、建立连接、数据映射及心跳检测机制等关键技术点。此外,文中提供了具体的代码示例和调试建议,如使用Wireshark抓包工具排查问题,并强调了数据同步、字节序转换、超时处理等方面需要注意的地方。最后,分享了一些实践经验,例如确保正确的IP地址分配、合理的缓冲区大小规划、良好的接地措施等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程有一定基础并希望深入了解不同品牌PLC间通讯机制的专业人士。 使用场景及目标:适用于需要将不同品牌PLC集成到同一个控制系统中的工业项目,旨在提高系统的灵活性和互操作性。通过掌握本文介绍的技术要点,可以有效减少因PLC品牌差异带来的兼容性和稳定性问题。 其他说明:文中不仅提供了理论指导,还结合实际案例进行了深入浅出的讲解,帮助读者更好地理解和应用相关技术。同时,针对可能出现的问题给出了预防和解决方案,使读者能够在实践中少走弯路。

    基于STM32F4的VESC非线性磁链观测器移植与优化

    内容概要:本文详细记录了作者将VESC项目的非线性磁链观测器移植到STM32F4开发板的过程。首先介绍了FOC技术和VESC源码的重要性和特点,然后重点阐述了非线性磁链观测器的实现方法及其核心代码。接着讨论了移植过程中遇到的技术难题,如实时性、稳定性、中断处理、电流采样等问题,并分享了解决这些问题的具体措施。最后展示了测试结果,证明了移植的成功以及观测器的良好性能。 适合人群:具有一定嵌入式开发经验的研发人员,特别是从事电机控制领域的工程师和技术爱好者。 使用场景及目标:适用于希望深入理解VESC源码和非线性磁链观测器的工作机制,掌握STM32F4平台上FOC算法实现的人群。目标是在实际项目中应用这些技术,提高电机控制系统的性能。 其他说明:文中提供了大量实用的代码片段和调试技巧,帮助读者更好地理解和解决问题。此外,作者还分享了一些个人经验和心得,增加了文章的趣味性和实用性。

    Quectel-LTE&5G-Windows-USB-Driver-V2.2.6-beta-20201230

    移远EC20 Windows驱动 操作系统 - 桌面系统 - 移远EC20 Windows驱动

    检证资料jianzhen.ppt

    检证资料jianzhen.ppt

    ### 【嵌入式开发】基于Qt的ATK-DLRK3568实战指南:从入门到项目实战题:嵌

    内容概要:本文档《ATK-DLRK3568嵌入式Qt开发实战V1.2》是正点原子出品的一份面向初学者的嵌入式Qt开发指南,主要内容涵盖嵌入式Linux环境下Qt的安装配置、C++基础、Qt基础、多线程编程、网络编程、多媒体开发、数据库操作以及项目实战案例。文档从最简单的“Hello World”程序开始,逐步引导读者熟悉Qt开发环境的搭建、常用控件的使用、信号与槽机制、UI设计、数据处理等关键技术点。此外,文档还提供了详细的项目实战案例,如车牌识别系统的开发,帮助读者将理论知识应用于实际项目中。 适合人群:具备一定Linux和C++基础,希望快速入门嵌入式Qt开发的初学者或有一定开发经验的研发人员。 使用场景及目标: 1. **环境搭建**:学习如何在Ubuntu环境下搭建Qt开发环境,包括安装必要的工具和库。 2. **基础知识**:掌握C++面向对象编程、Qt基础控件的使用、信号与槽机制等核心概念。 3. **高级功能**:理解多线程编程、网络通信、多媒体处理、数据库操作等高级功能的实现方法。 4. **项目实战**:通过具体的项目案例(如车牌识别系统),巩固

    tcl-tclxml-devel-3.2-26.el8.x64-86.rpm.tar.gz

    1、文件说明: Centos8操作系统tcl-tclxml-devel-3.2-26.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf tcl-tclxml-devel-3.2-26.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm

    C盘清理bat脚本自动清理C盘垃圾文件

    C盘清理bat脚本自动清理C盘垃圾文件

    桶排.txt

    桶排

Global site tag (gtag.js) - Google Analytics