`

struts与spring如何整合(2)

阅读更多

问题:这里的plug-in标签的作用是什么?可以不写plugin-in这个标签吗?
1、其实plug-in只是为了装载Struts的ActionServlet用的,如果在web.xml的context-param中已经指定了这个Struts的ActionServlet配置文件,那么此时可以不写plug-in。
2、如果在web.xml的context-param中并没有指定这个Struts的ActionServlet配置文件,那么必须加上plug-in
3、plug-in中contextConfigLocation属性的作用是什么?可以不要这个属性吗?
如果用了plug-in,那么contextConfigLocation属性的作用是指定Struts的ActionServlet配置文件所在的位置;
如果去掉了contextConfigLocation属性,那么Struts的ActionServlet配置文件将被指定为/WEB-INF/{app}-servlet.xml文件,
({app}指的是web.xml中servlet-name的值,此处为"action"

Java代码 复制代码
  1. <!-- struts 的配置 -->   
  2.         <servlet>   
  3.             <servlet-name>action</servlet-name>   
  4.             <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>   
  5.             <init-param>   
  6.                 <param-name>config</param-name>   
  7.                 <param-value>   
  8.                     /WEB-INF/struts/struts-config.xml,   
  9.                     /WEB-INF/struts/action/fileupload-action-config.xml,   
  10.                     /WEB-INF/struts/action/demo-action-config.xml   
  11.                 </param-value>   
  12.             </init-param>   
  13.             <load-on-startup>1</load-on-startup>   
  14.         </servlet>   
  15.         <servlet-mapping>   
  16.             <servlet-name>action</servlet-name>   
  17.             <url-pattern>*.do</url-pattern>   
  18.         </servlet-mapping>  
<!-- struts 的配置 -->
	    <servlet>
	        <servlet-name>action</servlet-name>
	        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
	        <init-param>
	            <param-name>config</param-name>
	            <param-value>
	                /WEB-INF/struts/struts-config.xml,
	                /WEB-INF/struts/action/fileupload-action-config.xml,
	                /WEB-INF/struts/action/demo-action-config.xml
	            </param-value>
	        </init-param>
	        <load-on-startup>1</load-on-startup>
	    </servlet>
	    <servlet-mapping>
	        <servlet-name>action</servlet-name>
	        <url-pattern>*.do</url-pattern>
	    </servlet-mapping>


)
所以,这是就必须在/WEB-INF/下存在action-servlet.xml文件。

现在默认的/WEB-INF/action-servlet.xml文件或由plug-in的contextConfigLocation属性指定的/WEB-INF/struts/spring/demo-action.spring.xml文件内容应该结合
web.xml的struts配置中指定的config文件内容可以这样写:

Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">   
  3. <beans>   
  4.     <bean name="/demo/list" parent="baseTxService">   
  5.         <property name="target">   
  6.             <bean class="com.ramix.demo.webapp.action.DemoListAction" autowire="byName">   
  7.                 <property name="mgr" ref="parentManager"/>   
  8.             </bean>   
  9.         </property>   
  10.     </bean>   
  11.     <bean name="/demo/save" parent="baseTxService">   
  12.         <property name="target">   
  13.             <bean class="com.ramix.demo.webapp.action.DemoSaveAction" autowire="byName">   
  14.                 <property name="mgr" ref="parentManager"/>   
  15.             </bean>   
  16.         </property>   
  17.     </bean>   
  18.     <bean name="/demo/client" class="com.ramix.demo.webapp.action.DemoClientAction">   
  19.         <property name="dws" ref="demoClient"/>   
  20.     </bean>   
  21.     <bean name="/demo/send" class="com.ramix.demo.webapp.action.DemoSendAction">   
  22.         <property name="mgr" ref="mailSendManager"/>   
  23.     </bean>   
  24.   
  25.     <bean name="/demo/child/create" parent="baseTxService">   
  26.         <property name="target">   
  27.             <bean class="com.ramix.demo.webapp.action.DemoChildCreateAction" autowire="byName">   
  28.                 <property name="mgr" ref="parentManager"/>   
  29.             </bean>   
  30.         </property>   
  31.     </bean>   
  32.     <bean name="/demo/child/save" parent="baseTxService">   
  33.         <property name="target">   
  34.             <bean class="com.ramix.demo.webapp.action.DemoChildSaveAction" autowire="byName">   
  35.                 <property name="PMgr" ref="parentManager"/>   
  36.                 <property name="CMgr" ref="childManager"/>   
  37.             </bean>   
  38.         </property>   
  39.     </bean>   
  40.     <bean name="/demo/child/list" parent="baseTxService">   
  41.         <property name="target">   
  42.             <bean class="com.ramix.demo.webapp.action.DemoChildListAction" autowire="byName">   
  43.                 <property name="mgr" ref="childManager"/>   
  44.             </bean>   
  45.         </property>   
  46.     </bean>   
  47.        
  48.     <bean name="/demo/ajax/child/list" parent="baseTxService">   
  49.         <property name="target">   
  50.             <bean class="com.ramix.demo.webapp.action.DemoAjaxChildListAction" autowire="byName">   
  51.                 <property name="mgr" ref="jdbcManager"/>   
  52.             </bean>   
  53.         </property>   
  54.     </bean>   
  55.     <bean name="/demo/test" parent="baseTxService">   
  56.         <property name="target">   
  57.             <bean class="com.ramix.demo.webapp.action.Test" autowire="byName">   
  58.             </bean>   
  59.         </property>   
  60.     </bean>   
  61. </beans>  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean name="/demo/list" parent="baseTxService">
        <property name="target">
            <bean class="com.ramix.demo.webapp.action.DemoListAction" autowire="byName">
                <property name="mgr" ref="parentManager"/>
            </bean>
        </property>
    </bean>
    <bean name="/demo/save" parent="baseTxService">
        <property name="target">
            <bean class="com.ramix.demo.webapp.action.DemoSaveAction" autowire="byName">
                <property name="mgr" ref="parentManager"/>
            </bean>
        </property>
    </bean>
    <bean name="/demo/client" class="com.ramix.demo.webapp.action.DemoClientAction">
        <property name="dws" ref="demoClient"/>
    </bean>
    <bean name="/demo/send" class="com.ramix.demo.webapp.action.DemoSendAction">
        <property name="mgr" ref="mailSendManager"/>
    </bean>

    <bean name="/demo/child/create" parent="baseTxService">
        <property name="target">
            <bean class="com.ramix.demo.webapp.action.DemoChildCreateAction" autowire="byName">
                <property name="mgr" ref="parentManager"/>
            </bean>
        </property>
    </bean>
    <bean name="/demo/child/save" parent="baseTxService">
        <property name="target">
            <bean class="com.ramix.demo.webapp.action.DemoChildSaveAction" autowire="byName">
                <property name="PMgr" ref="parentManager"/>
                <property name="CMgr" ref="childManager"/>
            </bean>
        </property>
    </bean>
    <bean name="/demo/child/list" parent="baseTxService">
        <property name="target">
            <bean class="com.ramix.demo.webapp.action.DemoChildListAction" autowire="byName">
                <property name="mgr" ref="childManager"/>
            </bean>
        </property>
    </bean>
	
	<bean name="/demo/ajax/child/list" parent="baseTxService">
        <property name="target">
            <bean class="com.ramix.demo.webapp.action.DemoAjaxChildListAction" autowire="byName">
                <property name="mgr" ref="jdbcManager"/>
            </bean>
        </property>
    </bean>
    <bean name="/demo/test" parent="baseTxService">
    	<property name="target">
    		<bean class="com.ramix.demo.webapp.action.Test" autowire="byName">
    		</bean>
    	</property>
    </bean>
</beans>


其实这样配置的目的也就是为了利用spring的依赖注入,能够使得Struts的servletAction自如的使用service层的bean。

这里需要关注的一点是:
请看/WEB-INF/struts/action/demo-action-config.xml中的

Java代码 复制代码
  1. <action path="/demo/test"  
  2.         type="com.ramix.demo.webapp.action.DemoListAction"  
  3.         parameter="method"  
  4.         scope="request"  
  5.         name="globalForm">   
  6.     <forward name="test" path="/WEB-INF/page/demo/test.jsp"/>   
  7. </action>  
<action path="/demo/test"
		type="com.ramix.demo.webapp.action.DemoListAction"
		parameter="method"
		scope="request"
		name="globalForm">
	<forward name="test" path="/WEB-INF/page/demo/test.jsp"/>
</action>


和/WEB-INF/struts/spring/demo-action.spring.xml中的

Java代码 复制代码
  1. <bean name="/demo/test" parent="baseTxService">   
  2.     <property name="target">   
  3.         <bean class="com.ramix.demo.webapp.action.Test" autowire="byName">   
  4.         </bean>   
  5.     </property>   
  6. </bean>  
<bean name="/demo/test" parent="baseTxService">
	<property name="target">
		<bean class="com.ramix.demo.webapp.action.Test" autowire="byName">
		</bean>
	</property>
</bean>



当url中执行..../demo/test.do时,将会是个什么样的过程?
首先会到/WEB-INF/struts/spring/demo-action.spring.xml中去找name为"/demo/test"的bean,
1、找到了,则执行target属性中指定的bean(此bean就是ServletAction类):com.ramix.demo.webapp.action.Test的execute方法,并通过autowire="byName"对该类的set方法进行依赖注入。
2、没找到,才会去/WEB-INF/struts/action/demo-action-config.xml中去找/demo/test.do,
并执行type属性中指定的ServletAction:com.ramix.demo.webapp.action.DemoListAction的execute方法

提问:servletAction中必须要写execute方法吗?
如果真的写了execute方法,那么就失去了parameter="method"的意义,如果这样做的话,那势必每个功能(通过页面操作增删改查)都需要写一个action类,这样会导致action类数量的急剧膨胀。
其实,struts的DispatchAction的execute方法被执行时,他的机制是去获得method参数,如果该参数有值,那么会去执行这个元素对应的方法。比如url是这样的.../demo/test.do?method=test
就会去执行对应的servletAction类中的test方法;如果method参数没有值,则会去执行unspecified方法。
这样我们可以通过在servletAction中多写几个方法就能很好的解决这个action类急剧膨胀的问题,从管理上看还能更加的简介。
所以如果重写了execute方法,那么就失去了这些功能。

现在可以看看com.ramix.demo.webapp.action.Test类可以怎么写了:

Java代码 复制代码
  1. package com.ramix.demo.webapp.action;   
  2.   
  3. import javax.servlet.http.HttpServletRequest;   
  4. import javax.servlet.http.HttpServletResponse;   
  5.   
  6. import org.apache.struts.action.ActionForm;   
  7. import org.apache.struts.action.ActionForward;   
  8. import org.apache.struts.action.ActionMapping;   
  9.   
  10. import com.ramix.common.webapp.action.BaseAction;   
  11.   
  12. public class Test extends BaseAction {   
  13.     @Override  
  14.     public ActionForward unspecified(ActionMapping mapping, ActionForm form,   
  15.             HttpServletRequest request, HttpServletResponse response) {   
  16.         request.setAttribute("test""test");   
  17.         return mapping.findForward("test");   
  18.     }   
  19.   
  20.     public ActionForward test(ActionMapping mapping, ActionForm form,   
  21.             HttpServletRequest request, HttpServletResponse response) {   
  22.         request.setAttribute("test", request.getParameter("test"));   
  23.         return mapping.findForward("test");   
  24.     }   
  25. }  
package com.ramix.demo.webapp.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.ramix.common.webapp.action.BaseAction;

public class Test extends BaseAction {
	@Override
	public ActionForward unspecified(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		request.setAttribute("test", "test");
		return mapping.findForward("test");
	}

	public ActionForward test(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		request.setAttribute("test", request.getParameter("test"));
		return mapping.findForward("test");
	}
}



unspecified是不带method参数是执行的方法
test是method参数值为test是执行的方法

当然如果应用很简单的,你并不需要parameter="method"的话,你非要写上execute方法也没有关系,就像下面代码这样:

Java代码 复制代码
  1. package com.ramix.demo.webapp.action;   
  2.   
  3. import javax.servlet.http.HttpServletRequest;   
  4. import javax.servlet.http.HttpServletResponse;   
  5.   
  6. import org.apache.struts.action.ActionForm;   
  7. import org.apache.struts.action.ActionForward;   
  8. import org.apache.struts.action.ActionMapping;   
  9.   
  10. import com.ramix.common.webapp.action.BaseAction;   
  11.   
  12. public class Test extends BaseAction {   
  13.   
  14.     public ActionForward execute(ActionMapping mapping, ActionForm form,   
  15.             HttpServletRequest request, HttpServletResponse response)   
  16.             throws Exception {   
  17.         System.out.println("ok");   
  18.         System.out.println("ok1");   
  19.         return null;   
  20.     }   
  21. }   
  22.   
  23.   
  24.   
  25. 说明:这里的BaseAction只是对org.springframework.web.struts.DispatchActionSupport做了封装,代码如下:   
  26.   
  27. package com.ramix.common.webapp.action;   
  28.   
  29. import com.ramix.common.util.RequestParamUtil;   
  30. import org.apache.log4j.Logger;   
  31. import org.apache.struts.action.ActionForward;   
  32. import org.apache.struts.action.ActionMapping;   
  33. import org.springframework.context.ApplicationContext;   
  34. import org.springframework.web.context.support.WebApplicationContextUtils;   
  35. import org.springframework.web.struts.DispatchActionSupport;   
  36.   
  37. import javax.servlet.http.HttpServletRequest;   
  38. import javax.servlet.http.HttpSession;   
  39. import java.util.Map;   
  40.   
  41. /**  
  42.  * 基础的Action,提供一些action中最基本的方法  
  43.  *  
  44.  * @author: Feng  
  45.  * @since: 2007-11-30  
  46.  */  
  47. public class BaseAction extends DispatchActionSupport {   
  48.     // 用来输出log。   
  49.     protected final Logger log = Logger.getLogger(this.getClass());   
  50.   
  51.     // 默认分页个数   
  52.     protected static final int DEF_PAGE_SIZE = 10;   
  53.   
  54.     // 默认错误页   
  55.     protected static final String DEF_VIEW_PAGE = "view";   
  56.   
  57.     // 默认错误页   
  58.     protected static final String DEF_ERROR_PAGE = "globalError";   
  59.   
  60.     // 默认成功页   
  61.     protected static final String DEF_SUCCESS_PAGE = "globalSuccess";   
  62.   
  63.     // 令牌名称   
  64.     protected static final String TOKEN_KEY = "RIMAX_TOKEN";   
  65.   
  66.     /**  
  67.      * 用来得到spring注入的bean。  
  68.      *  
  69.      * @param beanName 在spring配置文件中定义的bean的名字。  
  70.      * @return 从ApplicationContext中得到的bean对象。  
  71.      */  
  72.     protected Object getBean(String beanName) {   
  73.         ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servlet.getServletContext());   
  74.         return ctx.getBean(beanName);   
  75.     }   
  76.   
  77.     /**  
  78.      * 从request取得目标页码,没有设置,默认显示第一页  
  79.      *  
  80.      * @param request HttpServletRequest  
  81.      * @return 目标页码  
  82.      */  
  83.     protected int getPageNum(HttpServletRequest request) {   
  84.         return RequestParamUtil.getIntParam(request, "pageNum"1);   
  85.     }   
  86.   
  87.     /**  
  88.      * 从request取得目标页码,没有设置,默认显示第一页  
  89.      *  
  90.      * @param request HttpServletRequest  
  91.      * @return 目标页码  
  92.      */  
  93.     protected int getPageSize(HttpServletRequest request) {   
  94.         return RequestParamUtil.getIntParam(request, "pageSize", DEF_PAGE_SIZE);   
  95.     }   
  96.   
  97.     /**  
  98.      * 转向错误页面  
  99.      *  
  100.      * @param mapping ActionMapping  
  101.      * @param request HttpServletRequest  
  102.      * @param message 显示信息  
  103.      * @param url     目标地址  
  104.      * @return ActionForward  
  105.      */  
  106.     protected ActionForward toGobalError(ActionMapping mapping, HttpServletRequest request, String message, String url) {   
  107.         request.setAttribute("url", url);   
  108.         request.setAttribute("message", message);   
  109.         return mapping.findForward(DEF_ERROR_PAGE);   
  110.     }   
  111.   
  112.     /**  
  113.      * 转向全局成功页面  
  114.      *  
  115.      * @param mapping ActionMapping  
  116.      * @param request HttpServletRequest  
  117.      * @param message 显示信息  
  118.      * @param url     目标地址  
  119.      * @return ActionForward  
  120.      */  
  121.     protected ActionForward toGobalSuccess(ActionMapping mapping, HttpServletRequest request, String message, String url) {   
  122.         request.setAttribute("url", url);   
  123.         request.setAttribute("message", message);   
  124.         return mapping.findForward(DEF_SUCCESS_PAGE);   
  125.     }   
  126.   
  127.     /**  
  128.      * 验证当前提交的令牌,并不重置令牌  
  129.      *  
  130.      * @param request HttpServletRequest  
  131.      * @return 令牌是否有效  
  132.      */  
  133.     protected boolean validCurToken(HttpServletRequest request) {   
  134.         HttpSession session = request.getSession();   
  135.         if (session == null) {   
  136.             return false;   
  137.         }   
  138.         Map map = (Map) session.getAttribute(TOKEN_KEY);   
  139.         if (map == null) {   
  140.             return true;   
  141.         }   
  142.         String strToken = request.getParameter(TOKEN_KEY);   
  143.         if (strToken == null) {   
  144.             return false;   
  145.         }   
  146.         return map.containsKey(strToken);   
  147.     }   
  148.   
  149.     /**  
  150.      * 删除当前令牌  
  151.      *  
  152.      * @param request HttpServletRequest  
  153.      */  
  154.     protected void removeCurToken(HttpServletRequest request) {   
  155.         HttpSession session = request.getSession();   
  156.         if (session == null) {   
  157.             return;   
  158.         }   
  159.         Map map = (Map) session.getAttribute(TOKEN_KEY);   
  160.         if (map == null) {   
  161.             return;   
  162.         }   
  163.         String strToken = request.getParameter(TOKEN_KEY);   
  164.         if (strToken == null) {   
  165.             return;   
  166.         }   
  167.         map.remove(strToken);   
  168.     }   
分享到:
评论
1 楼 wangchao_0625 2009-05-19  

相关推荐

    基于ssm的网络教学平台(有报告)。Javaee项目,ssm项目。

    重点:所有项目均附赠详尽的SQL文件,这一细节的处理,让我们的项目相比其他博主的作品,严谨性提升了不止一个量级!更重要的是,所有项目源码均经过我亲自的严格测试与验证,确保能够无障碍地正常运行。 1.项目适用场景:本项目特别适用于计算机领域的毕业设计课题、课程作业等场合。对于计算机科学与技术等相关专业的学生而言,这些项目无疑是一个绝佳的选择,既能满足学术要求,又能锻炼实际操作能力。 2.超值福利:所有定价为9.9元的项目,均包含完整的SQL文件。如需远程部署可随时联系我,我将竭诚为您提供满意的服务。在此,也想对一直以来支持我的朋友们表示由衷的感谢,你们的支持是我不断前行的动力! 3.求关注:如果觉得我的项目对你有帮助,请别忘了点个关注哦!你的支持对我意义重大,也是我持续分享优质资源的动力源泉。再次感谢大家的支持与厚爱! 4.资源详情:https://blog.csdn.net/2301_78888169/article/details/144929660 更多关于项目的详细信息与精彩内容,请访问我的CSDN博客!

    2024年AI代码平台及产品发展简报-V11.pdf

    2024年AI代码平台及产品发展简报-V11

    蓝桥杯JAVA代码.zip

    蓝桥杯算法学习冲刺(主要以题目为主)

    QPSK调制解调技术研究与FPGA实现:详细实验文档的探索与实践,基于FPGA实现的QPSK调制解调技术:实验文档详细解读与验证,QPSK调制解调 FPGA设计,有详细实验文档 ,QPSK调制解调;

    QPSK调制解调技术研究与FPGA实现:详细实验文档的探索与实践,基于FPGA实现的QPSK调制解调技术:实验文档详细解读与验证,QPSK调制解调 FPGA设计,有详细实验文档 ,QPSK调制解调; FPGA设计; 详细实验文档,基于QPSK调制的FPGA设计与实验文档

    PID、ADRC和MPC轨迹跟踪控制器在Matlab 2018与Carsim 8中的Simulink仿真研究,PID、ADRC与MPC轨迹跟踪控制器在Matlab 2018与Carsim 8中的仿真研

    PID、ADRC和MPC轨迹跟踪控制器在Matlab 2018与Carsim 8中的Simulink仿真研究,PID、ADRC与MPC轨迹跟踪控制器在Matlab 2018与Carsim 8中的仿真研究,PID, ADRC和MPC轨迹跟踪控制器Simulink仿真模型。 MPC用于跟踪轨迹 ADRC用于跟踪理想横摆角 PID用于跟踪轨迹 轨迹工况有双移线,避障轨迹,正弦轨迹多种 matlab版本为2018,carsim版本为8 ,PID; ADRC; MPC; 轨迹跟踪控制器; Simulink仿真模型; 双移线; 避障轨迹; 正弦轨迹; MATLAB 2018; CarSim 8,基于Simulink的PID、ADRC与MPC轨迹跟踪控制器仿真模型研究

    基于Springboot的个性化图书推荐系统。Javaee项目,springboot项目。

    重点:所有项目均附赠详尽的SQL文件,这一细节的处理,让我们的项目相比其他博主的作品,严谨性提升了不止一个量级!更重要的是,所有项目源码均经过我亲自的严格测试与验证,确保能够无障碍地正常运行。 1.项目适用场景:本项目特别适用于计算机领域的毕业设计课题、课程作业等场合。对于计算机科学与技术等相关专业的学生而言,这些项目无疑是一个绝佳的选择,既能满足学术要求,又能锻炼实际操作能力。 2.超值福利:所有定价为9.9元的项目,均包含完整的SQL文件。如需远程部署可随时联系我,我将竭诚为您提供满意的服务。在此,也想对一直以来支持我的朋友们表示由衷的感谢,你们的支持是我不断前行的动力! 3.求关注:如果觉得我的项目对你有帮助,请别忘了点个关注哦!你的支持对我意义重大,也是我持续分享优质资源的动力源泉。再次感谢大家的支持与厚爱! 4.资源详情:https://blog.csdn.net/2301_78888169/article/details/144486173 更多关于项目的详细信息与精彩内容,请访问我的CSDN博客!

    Matlab实现Transformer-Adaboost时间序列预测的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文档详细介绍了一个利用Matlab实现Transformer-Adaboost结合的时间序列预测项目实例。项目涵盖Transformer架构的时间序列特征提取与建模,Adaboost集成方法用于增强预测性能,以及详细的模型设计思路、训练、评估过程和最终的GUI可视化。整个项目强调数据预处理、窗口化操作、模型训练及其优化(包括正则化、早停等手段)、模型融合策略和技术部署,如GPU加速等,并展示了通过多个评估指标衡量预测效果。此外,还提出了未来的改进建议和发展方向,涵盖了多层次集成学习、智能决策支持、自动化超参数调整等多个方面。最后部分阐述了在金融预测、销售数据预测等领域中的广泛应用可能性。 适合人群:具有一定编程经验的研发人员,尤其对时间序列预测感兴趣的研究者和技术从业者。 使用场景及目标:该项目适用于需要进行高质量时间序列预测的企业或机构,比如金融机构、能源供应商和服务商、电子商务公司。目标包括但不限于金融市场的波动性预测、电力负荷预估和库存管理。该系统可以部署到各类平台,如Linux服务器集群或云计算环境,为用户提供实时准确的预测服务,并支持扩展以满足更高频率的数据吞吐量需求。 其他说明:此文档不仅包含了丰富的理论分析,还有大量实用的操作指南,从项目构思到具体的代码片段都有详细记录,使用户能够轻松复制并改进这一时间序列预测方案。文中提供的完整代码和详细的注释有助于加速学习进程,并激发更多创新想法。

    液滴穿越障碍:从文献到案例的复现研究,液滴破裂与障碍物穿越:文献复现案例研究,液滴生成并通过障碍物破裂 该案例是文献复现,文献与案例一起 ,液滴生成; 障碍物破裂; 文献复现; 案例研究,液滴破

    液滴穿越障碍:从文献到案例的复现研究,液滴破裂与障碍物穿越:文献复现案例研究,液滴生成并通过障碍物破裂。 该案例是文献复现,文献与案例一起。 ,液滴生成; 障碍物破裂; 文献复现; 案例研究,液滴破裂:障碍挑战的文献复现案例

    蓝桥杯练习题_2.zip

    蓝桥杯算法学习冲刺(主要以题目为主)

    蓝桥杯笔记,用于个人学习进步.zip

    蓝桥杯算法学习冲刺(主要以题目为主)

    基于最小递归二乘法的MPC自适应轨迹跟踪控制优化 针对轮胎刚度时变特性提升模型精度与鲁棒性,仿真验证满足车辆低速高精度跟踪与高速稳定性提升 ,基于变预测时域MPC自适应轨迹跟踪控制与轮胎侧偏刚度优化提

    基于最小递归二乘法的MPC自适应轨迹跟踪控制优化 针对轮胎刚度时变特性提升模型精度与鲁棒性,仿真验证满足车辆低速高精度跟踪与高速稳定性提升。,基于变预测时域MPC自适应轨迹跟踪控制与轮胎侧偏刚度优化提升模型精度和鲁棒性,基于变预测时域的MPC自适应轨迹跟踪控制,针对轮胎刚度时变的特点造成控制模型精度降低,基于最小递归二乘法(RLS)估算的轮胎侧偏刚度,提升了模型的控制精度和鲁棒性,通过carsim与simulink联合仿真结果发现,改进后的轨迹跟踪控制器既满足了车辆低速行驶下的轨 迹跟踪精度,也一定程度上克服了高速下车辆容易失去稳定性的问题。 有详细的lunwen分析说明和资料,以及本人的,仿真包运行。 ,基于变预测时域的MPC; 自适应轨迹跟踪控制; 轮胎刚度时变; 控制模型精度降低; 最小递归二乘法(RLS)估算; 模型控制精度和鲁棒性提升; carsim与simulink联合仿真; 轨迹跟踪控制器; 车辆稳定性。,基于变预测时域MPC的轮胎刚度自适应轨迹跟踪控制策略研究

    GMSK调制解调技术研究:基于FPGA设计与实验详解,GMSK调制解调技术详解:基于FPGA设计的实验文档与实践应用,GMSK调制解调 FPGA设计,有详细实验文档 ,GMSK调制解调; FPGA设计

    GMSK调制解调技术研究:基于FPGA设计与实验详解,GMSK调制解调技术详解:基于FPGA设计的实验文档与实践应用,GMSK调制解调 FPGA设计,有详细实验文档 ,GMSK调制解调; FPGA设计; 详细实验文档; 实验结果分析,GMSK调制解调技术:FPGA设计与实验详解

    (源码)基于Arduino和Python的Cansat卫星系统.zip

    # 基于Arduino和Python的Cansat卫星系统 ## 项目简介 本项目是一个Cansat卫星系统,旨在设计和实现一个小型卫星模型,通过火箭发射至1公里高空,并使用地面站接收其传输的数据。项目涉及Arduino编程、Python数据处理和可视化。 ## 主要特性和功能 1. 硬件组件 使用Arduino Nano作为Cansat的微控制器。 搭载BMP 280温度和压力传感器、ATGM336H GPS模块、LoRa通信模块等。 地面站使用Arduino Uno和LoRa通信模块接收数据。 2. 数据处理 使用Python进行数据处理和可视化,包括数据清洗、计算风速、绘制温度、压力、风速和海拔随时间变化的图表等。 3. 通信与控制 通过LoRa模块实现Cansat与地面站之间的数据传输。 提供实时监视和记录数据的脚本。 ## 安装和使用步骤 ### 1. 硬件准备

    LongSung-USB-Drivers-V2.0-for-Windows

    U9300C 龙尚4G模块安装后模块才能正常使用,win7 win10驱动程序,支持USB转接板。

    (源码)基于Arduino平台的物联网温湿度监控系统.zip

    # 基于Arduino平台的物联网温湿度监控系统 ## 项目简介 这是一个基于Arduino平台的物联网温湿度监控项目,旨在通过简单的硬件设备实现环境数据的实时监测与远程管理。该项目适用于智能家居、农业种植等领域。 ## 项目的主要特性和功能 1. 温湿度数据采集通过Arduino板连接温湿度传感器,实时采集环境数据。 2. 数据传输将采集到的数据通过无线网络模块发送到服务器或远程终端。 3. 数据可视化可在电脑或移动设备端展示实时的温湿度数据。 4. 报警功能当温湿度数据超过预设阈值时,自动触发报警通知。 ## 安装使用步骤 前提假设用户已经下载了本项目的源码文件。以下是简单明了的安装使用步骤 1. 环境准备安装Arduino开发环境,配置必要的硬件接口。 2. 硬件连接将Arduino板与温湿度传感器、无线网络模块连接。 3. 代码上传将本项目提供的Arduino代码上传至Arduino板。

    基于需求响应与清洁能源接入的配电网重构优化:综合成本与混合整数凸规划模型分析(matlab实现),基于需求响应与清洁能源接入的配电网重构算法研究:网损与成本优化的仿真分析,高比例清洁能源接入下计及需求

    基于需求响应与清洁能源接入的配电网重构优化:综合成本与混合整数凸规划模型分析(matlab实现),基于需求响应与清洁能源接入的配电网重构算法研究:网损与成本优化的仿真分析,高比例清洁能源接入下计及需求响应的配电网重构(matlab代码) 该程序复现《高比例清洁能源接入下计及需求响应的配电网重构》,以考虑网损成本、弃风弃光成本和开关操作惩罚成本的综合成本最小为目标,针对配电网重构模型的非凸性,引入中间变量并对其进行二阶锥松弛,构建混合整数凸规划模型,采用改进的 IEEE33 节点配电网进行算例仿真,分析了需求响应措施和清洁能源渗透率对配电网重构结果的影响。 该程序复现效果和出图较好(详见程序结果部分),注释清楚,方便学习 ,高比例清洁能源; 需求响应; 配电网重构; 二阶锥松弛; 综合成本最小化; MATLAB代码; IEEE33节点配电网; 复现效果; 出图; 注释清楚。,Matlab代码复现:高比例清洁能源接入下的配电网重构模型与需求响应分析

    (源码)基于C++的RapidJSON库测试项目.zip

    # 基于C++的RapidJSON库测试项目 ## 项目简介 本项目是一个基于C++的RapidJSON库测试项目,主要用于测试RapidJSON库的功能正确性、性能以及稳定性。RapidJSON是一个高效的C++ JSON解析生成库,广泛应用于各种场景。本项目通过编写一系列的单元测试,覆盖了RapidJSON库的主要功能点,包括JSON解析、生成、内存管理、编码转换等,以确保RapidJSON库在各种情况下都能正确、稳定地工作。 ## 项目的主要特性和功能 1. 单元测试框架使用Google Test测试框架进行单元测试,确保测试的可靠性和可扩展性。 2. 全面测试覆盖覆盖了RapidJSON库的主要功能点,包括JSON解析、生成、内存管理、编码转换等,以及针对各种输入数据的测试。 3. 性能测试通过性能基准测试,评估RapidJSON库在处理不同规模和类型的JSON数据时的性能表现。

    蓝桥杯单片机十一届试题.zip

    蓝桥杯算法学习冲刺(主要以题目为主)

    vmware虚拟机安装教程.docx

    内容概要:本文详细介绍如何安装和初步使用 VMware 虚拟机,从下载安装 VMware 到创建和配置新的虚拟机。主要内容包括:软件选择和安装步骤、虚拟机的新建配置、操作系统安装及初始化设置、安装 VMware Tools 提升性能以及一些常用的 VMWare 功能,如虚拟网络的不同连接方式及其应用场景。同时介绍了 VMware 软件在网络连接管理和服务配置方面的一些要点,确保虚拟机正常运行。 适用人群:计算机操作较为熟练、有意搭建不同操作系统测试环境的技术人员,以及想要了解虚拟机基本概念及应用的学生。 使用场景及目标:适合于个人用户进行系统兼容性和安全性的验证;适用于企业或开发者做软件测试、模拟复杂环境下作业,确保不影响宿主机正常工作的前提下完成多种任务;适用于教学培训环境中部署实验平台。此外,还可以用来隔离特定业务流程(比如银行工具)、探索不同类型操作系统的特点。 其他说明:需要注意的是,为了避免安装过程中出现问题,建议暂时关闭杀毒软件和防火墙。安装 VMware 需要接受许可协议,同时可以选择安装路径和安装类型(典型/自定义)。最后,对于网络设置,默认提供的三种模式——桥接模式、仅主机模式和 NAT 模式,可以帮助用户根据不同需求灵活调整网络连接方式。

    java毕业设计之网上校友录设计源码.zip

    java毕业设计源码

Global site tag (gtag.js) - Google Analytics