- 浏览: 174742 次
- 性别:
- 来自: 上海
-
最新评论
-
金元宝:
HttpClient的简单例子。 -
sty00:
感谢分享
解决readLine() 不区分\r \n的问题。 -
dai_lm:
andyzhchy 写道新建一个类继承SimpleOnGest ...
丰富多彩的Android onTouch事件 -
谁说我不是会员:
我很想知道JDBCToXML是从哪里来的?是自己写的一个类吗? ...
ResultSet转换成XML (转) -
Goro:
enet_java 写道不错,不过不明白lZ为什么要通过这种方 ...
从不含package名的class名 取得 含package名的class名
下面的项目可能要用到TERASOLUNA。
为了逼自己每天都能学习点东西,特此写这个博客记录学习结果。
虽然可能性很大,但还是希望不要半途而废。
PS:Spring没学过。
【Transaction管理功能】
下例为对于以execute开头的方法,进行Transaction管理。
上面的例子是发生例外时,进行rollback。
但有时不想抛出例外,仅仅想rollback的话可以这样写。
【数据库操作】
SQL的定义等配置和iBATIS一样。
Terasoluna的QueryDAOiBatisImpl提供了以下的方法。
executeForObject (String sqlID, Object bindParams, Class clazz)
executeForObjectArray(String sqlID, Object bindParams, Class clazz)
executeForObjectArray(String sqlID, Object bindParams, Class clazz, int
beginIndex, int maxCount)
executeForObjectList(String sqlID, Object bindParams)
executeForObjectList(String sqlID, Object bindParams, int beginIndex, int
maxCount)
【Util类】
Terasoluna提供以下Util类
ClassUtil:通过指定的Class名和参数生成object。
DateUtil:日期,时间和日历相关的共同方法。 例如:日本的暦元号相关的方法。
PropertyUtil:操作Property文件的类。
StringUtil:操作String的类。
例如:
1)取文件名的扩展名 (为什么这个不是FileUtil的内容。。。)
2)byte数组 转换成16进制的String
3)日文全半角转换
4)html的escape < & > ¥" → < & > "
5)指定encode,取得String的byte长度
【Message管理和国际化】
略
【登录状态检查】
貌似终于来了一个实用点的功能。
web.xml的配置
Bean的定义。
AuthenticationController的例子
【禁止某些后缀名文件直接访问】
web.xml
system.properties
【Session同步功能】
功能说明,同一个Session只允许同时处理一个request。
防止同时处理产生的业务错误。
缺点是,可能会造成性能下降。
web.xml
threshold:同时有几个request由于同步在等待时,中断。 设为-1时,不发生中断。
interruptResponseCode:上面提到的中断时的responsecode。
例如例子里就是同时有2个request在等待时(同时有3个request被提交),向客户端返回503错误。
【增强版Form】
FormEx
DynaValidatorActionFormEx
ValidatorActionFormEx
带"_"的form名。
如果form前面指定了"_"会有以下特别的效果。
各个业务定义不同的_form后,在从1个业务迁移到另1个业务时,之前业务的_form将被删除。
例:
假设有_sampleForm 和 _helloForm
struts-config.xml
上面定义时,再迁移到/hogeSCR时, _helloForm将被删除。
指定了clearForm为true时
将会删除所有"_"开头的form。
(不清楚这个功能有什么好处 (@﹏@)~ )
Form的Reset,为了将scope为session的form的值恢复到初始值,
Terasoluna提供了ResetterImpl。
(这里也看得不是很懂。)
【CodeList】
又一个实用的功能。
web.xml
定义code。
硬code的写法。
bean的定义
从数据库里取出的写法。
code的使用
jsp时
<%@ taglib prefix="t" uri="/WEB-INF/terasoluna.tld"%>
<html><head><body>
<html:form action="/codeList">
<t:defineCodeList id="sampleCodeList"/>
<html:select property="codeListId">
<html:options collection="sampleCodeList" property="id"
labelProperty="name"/>
</html:select>
数据:<t:writeCodeCount id="sampleCodeLIst" />个
</html:form></body></html>
业务处理时使用
Bean的定义
业务处理的java代码
另外还可以动态更新codelist,好像是实现ReloadableCodeListLoader接口。
不是太懂。。。需要时再调查吧。嘿嘿。
【例外处理】
Terasoluna提供了
SystemExceptionHandler和DefaultExceptionHandler
并可以指定log的输出等级。
当然,可以在struts-config的global-exceptions里定义例外handler。
也可以在action-mappings里定义,各个action自己的例外handler。
struts-config.xml例
systemError.do对应的jsp例
SystemExceptionHandler的时候,用的PageContext.EXCEPTION
DefaultExceptionHandler的时候,用的Globals.EXCEPTION_KEY
【Session临时目录】
【文件上传和下载】
文件上传好像和普通的Struts一点点都没区别,略。
看看文件下载。
Bean的定义
BLogic的代码
注:上面的BLogicResult是继承了AbstractDownloadObject的类。
但是关于继承AbstractDownloadObject应该注意什么,怎么写教程里被略了。
要好好做的话,可以看一下Terasoluna的源代码。
其他,教程里倒是关于文件下载多浏览器对应(Encode文件名),写了不少。
实现DownloadFileNameEncoder,然后在服务器启动时,
jp.terasoluna.fw.web.struts.actions.FileDownloadUtil#setEncoder。
(但我发现FileDownloadUtil#setEncoder不是静态的,一定要用Bean定义来设。)
实现例:Firefox时用,利用Jakarta的commons-codec进行encode
【DispatchAction】
有两种Dispatch方法。
1)使用多个submit按钮
struts-config.xml
Bean定义
JSP文件
2)根据checkbox,radiobox等来选择Dispatch。
struts-config.xml
Bean定义
JSP
为了逼自己每天都能学习点东西,特此写这个博客记录学习结果。
虽然可能性很大,但还是希望不要半途而废。
PS:Spring没学过。
【Transaction管理功能】
下例为对于以execute开头的方法,进行Transaction管理。
<!-- DataSourceの設定。 --> <bean id="dataSource" class="……">……</bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 単一のJDBCデータソース向けのトランザクションマネージャ。 --> <tx:advice id="transactionInterceptor" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="execute*" propagation="REQUIRED" rollback-for="java.lang.Exception"/> </tx:attributes> </tx:advice> <!-- AOPの設定 --> <aop:config> <aop:pointcut id="blogicBeans" expression="bean(*BLogic)"/> <aop:pointcut id="serviceBeans" expression="bean(*Service)"/> <aop:advisor pointcut-ref="blogicBeans" advice-ref="transactionInterceptor"/> <aop:advisor pointcut-ref="serviceBeans" advice-ref="transactionInterceptor"/> </aop:config>
上面的例子是发生例外时,进行rollback。
但有时不想抛出例外,仅仅想rollback的话可以这样写。
if(有业务错误){ //仅仅想rollback TransactionUtil.setRollbackOnly(); }
【数据库操作】
SQL的定义等配置和iBATIS一样。
Terasoluna的QueryDAOiBatisImpl提供了以下的方法。
executeForObject (String sqlID, Object bindParams, Class clazz)
executeForObjectArray(String sqlID, Object bindParams, Class clazz)
executeForObjectArray(String sqlID, Object bindParams, Class clazz, int
beginIndex, int maxCount)
executeForObjectList(String sqlID, Object bindParams)
executeForObjectList(String sqlID, Object bindParams, int beginIndex, int
maxCount)
【Util类】
Terasoluna提供以下Util类
ClassUtil:通过指定的Class名和参数生成object。
DateUtil:日期,时间和日历相关的共同方法。 例如:日本的暦元号相关的方法。
PropertyUtil:操作Property文件的类。
StringUtil:操作String的类。
例如:
1)取文件名的扩展名 (为什么这个不是FileUtil的内容。。。)
2)byte数组 转换成16进制的String
3)日文全半角转换
4)html的escape < & > ¥" → < & > "
5)指定encode,取得String的byte长度
【Message管理和国际化】
略
【登录状态检查】
貌似终于来了一个实用点的功能。
web.xml的配置
<web-app> <filter> …… <filter-name>authenticationControlFilter</filter-name> <filter-class> jp.terasoluna.fw.web.thin.AuthenticationControlFilter </filter-class> <init-param> <param-name>controller</param-name> <param-value> sampleAuthenticationController </param-value> </init-param> </filter> …… <filter-mapping> <filter-name>authenticationControlFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> …… <error-page> <exception-type> jp.terasoluna.fw.web.thin.UnauthenticatedException </exception-type> <location>/authenticatedError.jsp</location> </error-page> ……
Bean的定义。
…… <bean id="sampleAuthenticationController" class="jp.sample.SampleAuthenticationController"/> ……
AuthenticationController的例子
package jp.terasoluna.sample; import javax.servlet.ServletRequest; import jp.terasoluna.fw.web.thin.AuthenticationController; public class SampleAuthenticationController implements AuthenticationController { // ログオン済みチェックが必要ないパス private String noCheckRequiredPath = “/sample/index.jsp”; // アクセス権限がある場合はtrueを返し、ない場合はfalseを返す public boolean isAuthenticated(String pathInfo, ServletRequest req) { // セッションを取得 HttpSession session = ((HttpServletRequest) req).getSession(); // セッションからUserValueObjectを取得 SampleUserValueObject uvo = (SampleUserValueObject) session.getAttribute(UserValueObject.USER_VALUE_OBJECT_KEY); // 例はログオンした場合のみセッションにUserValueObjectを格納するという前提なので // UserValueObjectがセッションにあった場合はログオン済みとする if (uvo != null) { return true; } return false; } // ログオン済みチェックが必要ならtrue、必要ないならfalseを返す public boolean isCheckRequired(ServletRequest req) { if (noCheckRequiredPath.equals(RequestUtil.getPathInfo(req))) { return false; } return true; } }
【禁止某些后缀名文件直接访问】
web.xml
<filter> <filter-name>extensionFilter</filter-name> <filter-class> jp.terasoluna.fw.web.thin.ExtensionFilter </filter-class> </filter> <filter-mapping> <filter-name>extensionFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
system.properties
#禁止 access.control.prohibited.extension.1=.jsp access.control.prohibited.extension.2=.htm access.control.prohibited.extension.3=.html access.control.prohibited.extension.4=.css #例外的(不禁止) restrictionEscape.1=/index.jsp restrictionEscape.2=/common.css
【Session同步功能】
功能说明,同一个Session只允许同时处理一个request。
防止同时处理产生的业务错误。
缺点是,可能会造成性能下降。
web.xml
<filter> <filter-name>sessionLockControlFilter</filter-name> <filter-class> jp.terasoluna.fw.web.thin.SessionLockControlFilter </filter-class> <init-param> <param-name>interruptResponseCode</param-name> <param-value>503</param-value> </init-param> <init-param> <param-name>threshold</param-name> <param-value>2</param-value> </init-param> </filter> <filter-mapping> <filter-name>sessionLockControlFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> …… <error-page> <error-code>503</error-code> <location>/error.jsp</location> </error-page>
threshold:同时有几个request由于同步在等待时,中断。 设为-1时,不发生中断。
interruptResponseCode:上面提到的中断时的responsecode。
例如例子里就是同时有2个request在等待时(同时有3个request被提交),向客户端返回503错误。
【增强版Form】
FormEx
DynaValidatorActionFormEx
ValidatorActionFormEx
DynaValidatorActionFormEx formEx = (FormEx) form; String[] stringArray = new String[] { "a", "b", "c" }; formEx.set("hoge", stringArray); formEx.get("hoge", 5); //虽然数组越界了,但返回null formEx.set("hoge", 3, "c"); //虽然数组越界了,增加第4个item,设为"c"
带"_"的form名。
如果form前面指定了"_"会有以下特别的效果。
各个业务定义不同的_form后,在从1个业务迁移到另1个业务时,之前业务的_form将被删除。
例:
假设有_sampleForm 和 _helloForm
struts-config.xml
<action-mappings type=” jp.terasoluna.fw.web.struts.action.ActionMappingEx”> <action path=”/hogeSCR” type=” jp.terasoluna.fw.web.struts.actions.ForwardAction” parameter="/sample/hoge.jsp" name=”_sampleForm” scope=”session” /> </action-mappings>
上面定义时,再迁移到/hogeSCR时, _helloForm将被删除。
指定了clearForm为true时
<action-mappings type=” jp.terasoluna.fw.web.struts.action.ActionMappingEx”> <action path=”/hogeSCR” type=” jp.terasoluna.fw.web.struts.actions.ForwardAction” parameter="/sample/hoge.jsp" name=”_sampleForm” scope=”session” /> <set-property property="clearForm" value="true" /> </action-mappings>
将会删除所有"_"开头的form。
(不清楚这个功能有什么好处 (@﹏@)~ )
Form的Reset,为了将scope为session的form的值恢复到初始值,
Terasoluna提供了ResetterImpl。
(这里也看得不是很懂。)
【CodeList】
又一个实用的功能。
web.xml
<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param>
定义code。
硬code的写法。
bean的定义
<bean id="sampleCodeList" class="jp.terasoluna.fw.web.codelist.MappedCodeListLoader" init-method="load"> <property name="codeListMap"> <map> <entry key="001"> <value>value001</value> </entry> <entry key="002"> <value>value002</value> </entry> <entry key="003"> <value>value003</value> </entry> </map> </property> </bean>
从数据库里取出的写法。
<bean id="sampleDBCodeList" class="jp.terasoluna.fw.web.codelist.DBCodeListLoader" init-method="load"> <property name="dataSource" ref="TerasolunaDataSource"/> <property name="sql"> <value>SELECT KEY, VALUE FROM CODE_LIST ORDER BY KEY</value> </property> </bean>
code的使用
jsp时
<%@ taglib prefix="t" uri="/WEB-INF/terasoluna.tld"%>
<html><head><body>
<html:form action="/codeList">
<t:defineCodeList id="sampleCodeList"/>
<html:select property="codeListId">
<html:options collection="sampleCodeList" property="id"
labelProperty="name"/>
</html:select>
数据:<t:writeCodeCount id="sampleCodeLIst" />个
</html:form></body></html>
业务处理时使用
Bean的定义
<bean id="sampleCodeList" class="jp.terasoluna.fw.web.codelist.MappedCodeListLoader" …… </bean> <bean id="sampleBusinessLogic" class="jp.terasoluna.sample.SampleBusinessLogic"> <property name="codeListLoader" ref="sampleCodeList"/> </bean>
业务处理的java代码
public class SampleBusinessLogic { private CodeListLoader codeListLoader = null; public void setCodeListLoader(CodeListLoader codeListLoader) { this.codeListLoader = codeListLoader; } public void someBusiness() { CodeBean[] beans = codeListLoader.getCodeBeans(); …… } }
另外还可以动态更新codelist,好像是实现ReloadableCodeListLoader接口。
不是太懂。。。需要时再调查吧。嘿嘿。
【例外处理】
Terasoluna提供了
SystemExceptionHandler和DefaultExceptionHandler
并可以指定log的输出等级。
当然,可以在struts-config的global-exceptions里定义例外handler。
也可以在action-mappings里定义,各个action自己的例外handler。
struts-config.xml例
<struts-config> ・・・ <global-exceptions> <exception key="errors.E001" path="/systemError.do" className="jp.terasoluna.fw.web.struts.action.ExceptionConfigEx" handler="jp.terasoluna.fw.web.struts.action.SystemExceptionHandler" type="jp.terasoluna.fw.exception.SystemException" > <set-property property="module" value="/sub" /> <set-property property="logLevel" value="fatal"/> /> <exception key="errors.E001" path="/systemError.do" className="jp.terasoluna.fw.web.struts.action.ExceptionConfigEx" handler="jp.terasoluna.fw.web.struts.action.DefaultExceptionHandler" type="java.lang.Exception" > <set-property property="module" value="/sub" /> <set-property property="logLevel" value="error"/> /> </global-exceptions> </struts-config>
systemError.do对应的jsp例
SystemExceptionHandler的时候,用的PageContext.EXCEPTION
<%@ taglib uri="/terasoluna-struts" prefix="ts"%> (略) <% java.lang.Exception sysExp = (java.lang.Exception) request.getAttribute(PageContext.EXCEPTION); %> <ts:errors/> <%=sysExp.getMessage()%> (略)
DefaultExceptionHandler的时候,用的Globals.EXCEPTION_KEY
<%@ taglib uri="/terasoluna-struts" prefix="ts"%> (略) <% java.lang.Exception exp = (java.lang.Exception) request.getAttribute(Globals.EXCEPTION_KEY); %> <ts:errors/> <%=exp.getMessage()%> (略)
【Session临时目录】
HttpSession session = (HttpSession) request.getSession(); boolean result = FileUtil.makeSessionDirectory(session.getId());
【文件上传和下载】
文件上传好像和普通的Struts一点点都没区别,略。
看看文件下载。
Bean的定义
<bean name="/downloadBLogic" class="jp.terasoluna.fw.web.struts.actions.DownloadBLogicAction" scope="singleton"> <property name="businessLogic" ref="downloadBLogic"/> </bean> <bean id="downloadBLogic" class="jp.sample.project.blogic.DownloadBLogic" scope="singleton"/>
BLogic的代码
public class DownloadBLogic implements BLogic { public BLogicResult execute(DownloadInput param) { BLogicResult result = new BLogicResult(); File file = new File("filepath¥¥download.txt"); DownloadFile downloadFile = new DownloadFile(file); result.setResultObject(downloadFile); return result; } }
注:上面的BLogicResult是继承了AbstractDownloadObject的类。
但是关于继承AbstractDownloadObject应该注意什么,怎么写教程里被略了。
要好好做的话,可以看一下Terasoluna的源代码。
其他,教程里倒是关于文件下载多浏览器对应(Encode文件名),写了不少。
实现DownloadFileNameEncoder,然后在服务器启动时,
jp.terasoluna.fw.web.struts.actions.FileDownloadUtil#setEncoder。
(但我发现FileDownloadUtil#setEncoder不是静态的,一定要用Bean定义来设。)
实现例:Firefox时用,利用Jakarta的commons-codec进行encode
public class MyEncoder implements DownloadFileNameEncoder { public String encode(String original, HttpServletRequest request, HttpServletResponse response) { String userAgent = request.getHeader("User-Agent"); // IE の場合 if (StringUtils.contains(userAgent, "MSIE")) { return encodeForIE(original); // Firefox の場合 } else if (StringUtils.contains(userAgent, "Gecko")) { return encodeForGecko(original); } return encodeForIE(original); } protected String encodeForGecko(String original) { try { return new BCodec().encode(original); } catch (EncoderException e) { return original; } } protected String encodeForIE(String original) { try { return URLEncoder.encode(original, AbstractDownloadObject.DEFAULT_CHARSET); } catch (UnsupportedEncodingException e) { return original; } } }
【DispatchAction】
有两种Dispatch方法。
1)使用多个submit按钮
struts-config.xml
<struts-config> …… <action-mappings type="jp.terasoluna.fw.web.struts.action.ActionMappingEx"> …… <action path="/fileUploadConfirmDSP" name="_fileForm"> <forward name="back" path="/initFileUploadAction.do"/> <forward name="default" path="/fileUploadConfirmSCR.do"/> <forward name="regist" path="/fileRegistBLogic.do"/> </action> <action-mappings> …… </struts-config>
Bean定义
<bean name="/fileUploadConfirmDSP" scope=”singleton” class="jp.terasoluna.fw.web.struts.actions.DispatchAction"> </bean>
JSP文件
<html:html> …… <html:form action=”/fileUploadConfirmDSP”> …… <html:submit property=”forward_back” value=” 戻る ”/> <html:submit property=”forward_regist” value=” 登録 ”/> …… </html:form> …… </html:html>
2)根据checkbox,radiobox等来选择Dispatch。
struts-config.xml
<struts-config> …… <action-mappings type=" jp.terasoluna.fw.web.struts.action.ActionMappingEx"> … <action path="/fileUploadConfirmDSP" name="_fileForm"> <forward name="back" path="/initFileUploadAction.do"/> <forward name="default" path="/fileUploadConfirmSCR.do"/> <forward name="regist" path="/fileRegistBLogic.do"/> </action> <action-mappings> …… </struts-config>
Bean定义
<bean name="/sample/selectDispatch" scope=”prototype” class="jp.terasoluna.fw.web.struts.actions.DispatchAction"> <property name=”event”> <value>dispatchName</value> </property> </bean>
JSP
<html:html> …… <html:form action=”/fileUploadConfirmDSP”> …… <html:radio property=”dispatchName” value=”forward_back”/> 戻る <html:radio property=”dispatchName” value=”forward_regist”/> 登録 …… <html:submit property=”decide” value=” 決定 ”> </html:form> …… </html:html>
发表评论
-
Java Memory Leak调查工具
2012-10-26 12:47 1106Eclipse Test and Performance To ... -
Javascript的String format函数。
2012-10-10 11:28 1017String.prototype.format = Str ... -
如何用Javascript判断浏览器是否支持XMLHttpRequest 的上传进度。
2012-10-10 11:25 2037navigator.hasxmlProgress= (fu ... -
POI取得Cell的字符串(String)值
2012-10-01 19:04 27886public final static String DA ... -
把行号(row)和列号(col)转换成Excel的表示形式。 例如:A1,B2
2012-09-24 20:51 53320,0 ⇒ A1 import org.apache.p ... -
jQuery 做成Task可重叠在一行的gantt干特图。
2012-09-20 15:24 4289用了jQuery的gantt插件加了一个函数 JSGant ... -
JavaScript InfoVis Toolkit(JIS)简介。
2012-09-13 20:50 2340http://thejit.org/demos/ 国内也许有墙 ... -
用uploadify上传文件时,取得服务器端返回数据的方法。
2012-09-13 13:50 10233一般上传文件时,如:Excel,CSV,XML 都需要检查文件 ... -
ResultSet转换成XML (转)
2012-09-06 14:02 2406众所周知XML已经成不同应用程序之间数据交换的事实上的标准。在 ... -
用Javascript将form所有内容序列化和反序列化的例子。
2012-09-04 16:44 3830为什么有帖子标题那样的需求呢? 因为最近要做草稿功能,某个系统 ... -
比较有用的Java库。
2012-08-30 22:05 1322这里记录下比较有用的Java库,但没有熟悉用过的。 Luce ... -
Java去除数字里多余的0。
2012-08-29 13:49 6221public static String getPret ... -
正则表达式分析CSV行。
2012-08-28 14:19 7String regex = "(?!\\\&q ... -
HttpClient的简单例子。
2012-08-20 15:49 6647package sh.pl; import java ... -
使HttpClient能处理错误ResponseHeader的响应信息。
2012-08-17 22:30 5169在特定条件下,也许需要来定制HTTP报文通过线路传递,越过了可 ... -
解决readLine() 不区分\r \n的问题。
2012-08-16 14:44 2487csdn上碰到一个提问者希望只在\n时,才换行来读取文本文件的 ... -
检查不包含重复字符的正则表达式
2012-08-15 16:31 1229以下[A-Z]可以根据需要修改。 //匹配不包含重复字母 ... -
下载文件类型和setContentType对应关系
2012-08-15 16:03 1927'ez' => 'application/andrew- ... -
Java解析计算式 (例:四则运算)
2012-08-15 12:37 1633http://www.ne.jp/asahi/hishidam ... -
解决文件下载时文件名乱码在ie和firefox下面表现不一致问题
2012-08-15 10:34 1217// 其中 Base64 类来自 org.apache.c ...
相关推荐
人脸识别项目实战
内容概要:本文详细描述了一个完整的Web应用程序的开发过程。该项目主要采用了Hono作为服务器框架,Prisma作为ORM工具,JWT用于认证鉴权,以及一系列现代化的最佳实践确保系统的健壮性和安全性。项目初期构建了基础架构,并设置了必要的依赖和工具。在后端方面涵盖了公共API接口的设计、CRUD增删改查逻辑、用户认证和授权等功能。此外还特别关注到了API的安全保护,如输入输出的校验,跨站请求伪造CSRF的防范,XSS防御等措施;为确保代码的质量引入了代码检测(比如ESLint搭配Prettier),并建立了完善的测试框架以保障后续开发阶段的功能正确。对于可能出现的问题预先定义了一组规范化的异常响应,并提供OpenAPI文档以方便开发者理解和调用。数据存储层面上利用了关系型与非关系型数据库各自的特性,实现了数据的有效组织,最后提供了实用的脚本,可用于种子数据插入以及执行必要的初始化工作。 适合人群:面向具有一定JavaScript/TypeScript开发经验,尤其是Node.js后台服务搭建经验的中级程序员和技术团队。 使用场景及目标:这份材料非常适合那些需要快速建立安全高效的RES
【资源介绍】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,也可以作为小白实战演练和初期项目立项演示的重要参考借鉴资料。 3、本资源作为“学习资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研和多多调试实践。 掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip
手势识别项目实战
(参考GUI)MATLAB BP的交通标志系统.zip
人脸识别项目实战
内容概要:本文详细介绍了 C++ 函数的基础概念及其实战技巧。内容涵盖了函数的基本结构(定义、声明、调用)、多种参数传递方式(值传递、引用传递、指针传递),各类函数类型(无参无返、有参无返、无参有返、有参有返),以及高级特性(函数重载、函数模板、递归函数)。此外,通过实际案例展示了函数的应用,如统计数组元素频次和实现冒泡排序算法。最后,总结了C++函数的重要性及未来的拓展方向。 适合人群:有一定编程基础的程序员,特别是想要深入了解C++编程特性的开发人员。 使用场景及目标:① 学习C++中函数的定义与调用,掌握参数传递方式;② 掌握不同类型的C++函数及其应用场景;③ 深入理解函数重载、函数模板和递归函数的高级特性;④ 提升实际编程能力,通过实例强化所学知识。 其他说明:文章以循序渐进的方式讲解C++函数的相关知识点,并提供了实际编码练习帮助理解。阅读过程中应当边思考边实践,动手实验有助于更好地吸收知识点。
Comsol光学仿真模型:包括纳米球 柱 Mie散射多级分解 ,Comsol光学仿真模型; 纳米球; 柱; Mie散射; 多级分解,Comsol光学仿真模型:纳米结构Mie散射多级分解
永磁同步电机全速域控制高频方波注入法、滑模观测器法SMO、加权切矢量控制Simulink仿真模型 低速域采用高频方波注入法HF,高速域采用滑膜观测器法SMO,期间采用加权形式切 送前方法 1、零低速域,来用无数字滤波器高频方波注入法, 2.中高速域采用改进的SMO滑模观测器,来用的是sigmoid函数,PLL锁相环 3、转速过渡区域采用加权切法 该仿真各个部分清晰分明,仿真波形效果良好内附详细控制方法资料lunwen 带有参考文献和说明文档,仿真模型 ,核心关键词: 1. 永磁同步电机; 2. 全速域控制; 3. 高频方波注入法; 4. 滑模观测器法SMO; 5. 加权切换矢量控制; 6. Simulink仿真模型; 7. 零低速域控制; 8. 中高速域控制; 9. 转速过渡区域控制; 10. 仿真波形效果; 11. 详细控制方法资料; 12. 参考文献和说明文档。,永磁同步电机多域控制策略的仿真研究
基于蜣螂优化算法的无人机三维路径规划【23年新算法应用】可直接运行 Matlab语言 主要内容:读取地形数据,利用蜣螂算法DBO优化三维路径,目标函数为总路径最短,同时不能撞到障碍物,效果如图所示,包括迭代曲线图、三维路径图、二维平面图等等 ,基于蜣螂优化算法;无人机;三维路径规划;总路径最短;障碍物避免;Matlab语言;迭代曲线图;三维路径图;二维平面图,蜣螂算法优化无人机三维路径规划:实时避障、路径最短新应用
清华大学2024年研究生复试上机考试题.zip
南京理工大学研究生入学考试2011年复试上机试题
手势识别项目实战
这里是3501的内容,用于复习资料
异步电动机变压变频调速系统,包含六千多字的文档、框架图、Simulink仿真模型,电力拖动、电机控制仿真设计 仿真模型+报告 开关闭环对比仿真都有,资料如图所见如所得 ,异步电动机;变压变频调速系统;六千字文档;框架图;Simulink仿真模型;电力拖动;电机控制仿真设计;开闭环对比仿真;资料如图。,异步电机控制仿真系统:六千字详解与图解
人脸识别项目实战
手势识别项目实战
人脸识别项目实战
c语言学习
c语言学习