- 浏览: 148093 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
415421979:
我也遇到了这个问题 求解啊
JBoss/Tomcat 安装路径带空格时 JNDI 无法初始化的BUG -
ivonxiao:
谢谢楼主的分享
异常管理系统 -
ivonxiao:
谢谢楼主的分享~~
Java对象的强、软、弱和虚引用
问题的提出:
默认Tapestry的页面模板文件(.html)及其对应的规范文件(.page),可以放在web根目录或其下的WEB -INF/目录中,Tapestry可以不用任何配置(在以前的版本中需要在.application文件中定义一下页面)就能正确运行,如果你需要在这些根目录下以文件系统的目录形式组织你的页面,则Tapestry是不会自动搜索这些子目录的,你必须在.application文件中定义这些不在默认位置的页面。这样一来,每加一个页面都需要定义一下,如果页面数目众多,定义起来就会比较麻烦,如何才能避免这些配置呢?本文的目的就是尝试解决这个问题。
问题的解决:
本文是在参考文档(http://www.behindthesite.com/blog/C1931765677/E381917869/index.html)源代码的基础上稍作修改而成,主要是为了解决不能在Tomcat中使用的问题。为了更好的了解,朋友们最好能阅读一下原文和原来的代码。主要修改的地方是给RecursiveFileLocator传递一个真实路径地址,以便能够列出目录下面的子目录,从而实现层次查找。
解决的途径就是定义一个ISpecificationResolverDelegate,以便Tapestry在常规路径下找不到文件时进行处理。
CustomSpecificationResolver.java:
1.
2. // CustomSpecificationResolver.java
3. //
4. // Copyright 2004 Michael J. Henderson & Associates LLC
5. //
6. // Licensed under the Apache License, Version 2.0 (the "License");
7. // you may not use this file except in compliance with the License.
8. // You may obtain a copy of the License at
9. //
10. // http://www.apache.org/licenses/LICENSE-2.0
11. //
12. // Unless required by applicable law or agreed to in writing, software
13. // distributed under the License is distributed on an "AS IS" BASIS,
14. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15. // See the License for the specific language governing permissions and
16. // limitations under the License.
17.
18. package com.mjhenderson.users.tapestry;
19.
20. import org.apache.commons.logging.Log;
21. import org.apache.commons.logging.LogFactory;
22. import org.apache.tapestry.INamespace;
23. import org.apache.tapestry.IRequestCycle;
24. import org.apache.tapestry.IResourceLocation;
25. import org.apache.tapestry.Tapestry;
26. import org.apache.tapestry.engine.ISpecificationSource;
27. import org.apache.tapestry.resolver.ISpecificationResolverDelegate;
28. import org.apache.tapestry.spec.IComponentSpecification;
29.
30. /**
31. * @author <a href="mailto:michaelh@mjhenderson.com?subject=com.mjhenderson.users.tapestry.CustomSpecificationResolver">Mike Henderson</a>
32. *
33. */
34. public class CustomSpecificationResolver implements
35. ISpecificationResolverDelegate {
36.
37.
38. private static final Log LOG = LogFactory.getLog(RecursiveFileLocator.class);
39.
40. private ISpecificationSource _specificationSource;
41.
42. private RecursiveFileLocator _locator;
43. //private boolean _applicationIsExplodedWAR;
44. private boolean _initialized;
45. private String _folder;
46. private String _realRootFolder;
47.
48. public CustomSpecificationResolver() {;
49. }
50.
51. public void setFolder(String value) {
52. _folder = value;
53. }
54.
55. public String getFolder() {
56. return _folder;
57. }
58.
59. private void _init(IRequestCycle cycle) {
60. //IResourceLocation rootLocation = Tapestry.getApplicationRootLocation(cycle).getRelativeLocation("/WEB-INF/");
61. IResourceLocation rootLocation = Tapestry.getApplicationRootLocation(cycle).getRelativeLocation("/");
62. //_applicationIsExplodedWAR = rootLocation.getResourceURL().toString().startsWith("file:");
63. //if (_applicationIsExplodedWAR) {
64. _realRootFolder = cycle.getRequestContext().getServlet().getServletContext().getRealPath("/");
65. _locator = new RecursiveFileLocator(rootLocation,_realRootFolder);
66. _specificationSource = cycle.getEngine().getSpecificationSource();
67. //}
68. _initialized = true;
69. }
70.
71. // private boolean checkLocationIsFileLocation(IResourceLocation location) {
72. // String url = location.getResourceURL().toString();
73. // System.out.println("url = "+url);
74. // return url.startsWith("file:");
75. // }
76.
77. /**
78. * @see org.apache.tapestry.resolver.ISpecificationResolverDelegate#findPageSpecification(org.apache.tapestry.IRequestCycle, org.apache.tapestry.INamespace, java.lang.String)
79. */
80. public IComponentSpecification findPageSpecification(IRequestCycle cycle,
81. INamespace namespace, String name) {
82.
83. if (!_initialized) {
84. _init(cycle);
85. }
86. //if (!_applicationIsExplodedWAR) {
87. // return null;
88. //}
89. IResourceLocation location = _locator.resolveLocation(name+".page");
90. if (location != null) {
91. return _specificationSource.getPageSpecification(location);
92. }
93. return null;
94. }
95.
96. /**
97. * @see org.apache.tapestry.resolver.ISpecificationResolverDelegate#findComponentSpecification(org.apache.tapestry.IRequestCycle, org.apache.tapestry.INamespace, java.lang.String)
98. */
99. public IComponentSpecification findComponentSpecification(
100. IRequestCycle cycle, INamespace namespace, String type) {
101.
102. if (!_initialized) {
103. _init(cycle);
104. }
105. //if (!_applicationIsExplodedWAR) {
106. // return null;
107. //}
108. IResourceLocation location = _locator.resolveLocation(type+".jwc");
109. if (location != null) {
110. return _specificationSource.getComponentSpecification(location);
111. }
112. return null;
113. }
114.
115. }
116.
RecursiveFileLocator.java:
1.
2. // RecursiveFileLocator.java
3. //
4. // Copyright 2004 Michael J. Henderson & Associates LLC
5. //
6. // Licensed under the Apache License, Version 2.0 (the "License");
7. // you may not use this file except in compliance with the License.
8. // You may obtain a copy of the License at
9. //
10. // http://www.apache.org/licenses/LICENSE-2.0
11. //
12. // Unless required by applicable law or agreed to in writing, software
13. // distributed under the License is distributed on an "AS IS" BASIS,
14. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15. // See the License for the specific language governing permissions and
16. // limitations under the License.
17.
18. package com.mjhenderson.users.tapestry;
19.
20. import java.io.File;
21. import java.net.URL;
22. import java.util.ArrayList;
23. import java.util.HashMap;
24. import java.util.Iterator;
25. import java.util.List;
26. import java.util.Map;
27.
28. import org.apache.commons.logging.Log;
29. import org.apache.commons.logging.LogFactory;
30. import org.apache.tapestry.IResourceLocation;
31.
32. /**
33. * @author <a href="mailto:michaelh@mjhenderson.com?subject=com.mjhenderson.users.tapestry.RecursiveFileLocator">Mike Henderson</a>
34. *
35. */
36. public class RecursiveFileLocator {
37.
38. private static final Log LOG = LogFactory.getLog(RecursiveFileLocator.class);
39.
40. private IResourceLocation _location;
41.
42. private File realRoot ;
43.
44. private Map _locations = new HashMap();
45.
46. public RecursiveFileLocator(IResourceLocation location,String _realRootFolder) {
47. realRoot = new File(_realRootFolder);
48. _location = location;
49. }
50.
51. /* (non-Javadoc)
52. * @see org.apache.tapestry.INamespace#getPageSpecification(java.lang.String)
53. */
54. public IResourceLocation resolveLocation(String expectedName) {
55. if (LOG.isDebugEnabled()) {
56. LOG.debug("getLocation("+expectedName+")");
57. }
58. IResourceLocation location = _resolveThisFolderLocation(expectedName);
59. if (location == null) {
60. location = _resolveChildFolderLocation(expectedName);
61. }
62. return location;
63. }
64.
65.
66. private IResourceLocation _resolveThisFolderLocation(String expectedName) {
67. if (LOG.isDebugEnabled()) {
68. LOG.debug("_resolveThisFolderLocation("+expectedName+")");
69. }
70. IResourceLocation location = (IResourceLocation)_locations.get(expectedName);
71. if (location == null) {
72. location = _location.getRelativeLocation(_location.getPath()+"/"+expectedName);
73.
74. if (location.getResourceURL() == null) {
75. return null;
76. }
77. _locations.put(expectedName, location);
78. }
79. return location;
80. }
81.
82.
83. private IResourceLocation _resolveChildFolderLocation(String expectedName) {
84. List children = _getChildFolderLocators();
85. Iterator iterator = children.iterator();
86. while (iterator.hasNext()) {
87. RecursiveFileLocator child = (RecursiveFileLocator)iterator.next();
88.
89. if (LOG.isDebugEnabled()) {
90. LOG.debug("_resolveChildFolderLocation() child = " + child + ", expectedName = " + expectedName);
91. }
92. IResourceLocation location = child.resolveLocation(expectedName);
93. if (location != null) {
94. return location;
95. }
96. }
97. return null;
98. }
99.
100. public String toString() {
101. return "RecursiveFileLocator { "+_location+" }";
102. }
103.
104. private List _children = new ArrayList();
105. private boolean _childrenLoaded = false;
106.
107. private List _getChildFolderLocators() {
108. if (!_childrenLoaded) {
109. _loadChildFolderLocators();
110. _childrenLoaded = true;
111. }
112. return _children;
113. }
114.
115. private void _loadChildFolderLocators() {
116.
117. if (LOG.isDebugEnabled()) {
118. LOG.debug("_loadChildFolderLocators() this = " + this);
119. }
120.
121. File file = realRoot;//new File(path);
122. if (file.isDirectory()) {
123. File[] files = file.listFiles();
124. for (int i = 0; i < files.length; i++) {
125. File f = files[i];
126. if (f.isDirectory() && !f.getName().equals("classes") && !f.getName().equals("lib")) {
127. RecursiveFileLocator child = new RecursiveFileLocator(_location.getRelativeLocation(f.getName()+"/"),file.getAbsolutePath()+"/"+f.getName());
128. if (LOG.isDebugEnabled()) {
129. LOG.debug("_loadChildFolderLocators() child = " + child);
130. }
131. _children.add(child);
132. }
133. }
134. }
135. }
136. }
.application文件中增加如下定义:
1.
2. <extension name="org.apache.tapestry.specification-resolver-delegate"
3. class="com.mjhenderson.users.tapestry.CustomSpecificationResolver"
4. immediate="yes">
5. </extension>
6.
以上代码已经在Tomcat和JBoss上经过测试,希望朋友们可以在别的应用服务器上帮我测测,呵呵。代码比较粗糙,谁要是发现了什么问题或有什么改进思路,希望能联系我。
顺便提醒一下,在http://www.t-deli.com上有一个Ant Task,可以根据你的页面存放路径自动更新.application文件里面的页面定义,这样似乎定义几百个页面也是很简单的事情,不过我还是倾向于不用配置直接使用的方法,就看你的需要和使用习惯了。
默认Tapestry的页面模板文件(.html)及其对应的规范文件(.page),可以放在web根目录或其下的WEB -INF/目录中,Tapestry可以不用任何配置(在以前的版本中需要在.application文件中定义一下页面)就能正确运行,如果你需要在这些根目录下以文件系统的目录形式组织你的页面,则Tapestry是不会自动搜索这些子目录的,你必须在.application文件中定义这些不在默认位置的页面。这样一来,每加一个页面都需要定义一下,如果页面数目众多,定义起来就会比较麻烦,如何才能避免这些配置呢?本文的目的就是尝试解决这个问题。
问题的解决:
本文是在参考文档(http://www.behindthesite.com/blog/C1931765677/E381917869/index.html)源代码的基础上稍作修改而成,主要是为了解决不能在Tomcat中使用的问题。为了更好的了解,朋友们最好能阅读一下原文和原来的代码。主要修改的地方是给RecursiveFileLocator传递一个真实路径地址,以便能够列出目录下面的子目录,从而实现层次查找。
解决的途径就是定义一个ISpecificationResolverDelegate,以便Tapestry在常规路径下找不到文件时进行处理。
CustomSpecificationResolver.java:
1.
2. // CustomSpecificationResolver.java
3. //
4. // Copyright 2004 Michael J. Henderson & Associates LLC
5. //
6. // Licensed under the Apache License, Version 2.0 (the "License");
7. // you may not use this file except in compliance with the License.
8. // You may obtain a copy of the License at
9. //
10. // http://www.apache.org/licenses/LICENSE-2.0
11. //
12. // Unless required by applicable law or agreed to in writing, software
13. // distributed under the License is distributed on an "AS IS" BASIS,
14. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15. // See the License for the specific language governing permissions and
16. // limitations under the License.
17.
18. package com.mjhenderson.users.tapestry;
19.
20. import org.apache.commons.logging.Log;
21. import org.apache.commons.logging.LogFactory;
22. import org.apache.tapestry.INamespace;
23. import org.apache.tapestry.IRequestCycle;
24. import org.apache.tapestry.IResourceLocation;
25. import org.apache.tapestry.Tapestry;
26. import org.apache.tapestry.engine.ISpecificationSource;
27. import org.apache.tapestry.resolver.ISpecificationResolverDelegate;
28. import org.apache.tapestry.spec.IComponentSpecification;
29.
30. /**
31. * @author <a href="mailto:michaelh@mjhenderson.com?subject=com.mjhenderson.users.tapestry.CustomSpecificationResolver">Mike Henderson</a>
32. *
33. */
34. public class CustomSpecificationResolver implements
35. ISpecificationResolverDelegate {
36.
37.
38. private static final Log LOG = LogFactory.getLog(RecursiveFileLocator.class);
39.
40. private ISpecificationSource _specificationSource;
41.
42. private RecursiveFileLocator _locator;
43. //private boolean _applicationIsExplodedWAR;
44. private boolean _initialized;
45. private String _folder;
46. private String _realRootFolder;
47.
48. public CustomSpecificationResolver() {;
49. }
50.
51. public void setFolder(String value) {
52. _folder = value;
53. }
54.
55. public String getFolder() {
56. return _folder;
57. }
58.
59. private void _init(IRequestCycle cycle) {
60. //IResourceLocation rootLocation = Tapestry.getApplicationRootLocation(cycle).getRelativeLocation("/WEB-INF/");
61. IResourceLocation rootLocation = Tapestry.getApplicationRootLocation(cycle).getRelativeLocation("/");
62. //_applicationIsExplodedWAR = rootLocation.getResourceURL().toString().startsWith("file:");
63. //if (_applicationIsExplodedWAR) {
64. _realRootFolder = cycle.getRequestContext().getServlet().getServletContext().getRealPath("/");
65. _locator = new RecursiveFileLocator(rootLocation,_realRootFolder);
66. _specificationSource = cycle.getEngine().getSpecificationSource();
67. //}
68. _initialized = true;
69. }
70.
71. // private boolean checkLocationIsFileLocation(IResourceLocation location) {
72. // String url = location.getResourceURL().toString();
73. // System.out.println("url = "+url);
74. // return url.startsWith("file:");
75. // }
76.
77. /**
78. * @see org.apache.tapestry.resolver.ISpecificationResolverDelegate#findPageSpecification(org.apache.tapestry.IRequestCycle, org.apache.tapestry.INamespace, java.lang.String)
79. */
80. public IComponentSpecification findPageSpecification(IRequestCycle cycle,
81. INamespace namespace, String name) {
82.
83. if (!_initialized) {
84. _init(cycle);
85. }
86. //if (!_applicationIsExplodedWAR) {
87. // return null;
88. //}
89. IResourceLocation location = _locator.resolveLocation(name+".page");
90. if (location != null) {
91. return _specificationSource.getPageSpecification(location);
92. }
93. return null;
94. }
95.
96. /**
97. * @see org.apache.tapestry.resolver.ISpecificationResolverDelegate#findComponentSpecification(org.apache.tapestry.IRequestCycle, org.apache.tapestry.INamespace, java.lang.String)
98. */
99. public IComponentSpecification findComponentSpecification(
100. IRequestCycle cycle, INamespace namespace, String type) {
101.
102. if (!_initialized) {
103. _init(cycle);
104. }
105. //if (!_applicationIsExplodedWAR) {
106. // return null;
107. //}
108. IResourceLocation location = _locator.resolveLocation(type+".jwc");
109. if (location != null) {
110. return _specificationSource.getComponentSpecification(location);
111. }
112. return null;
113. }
114.
115. }
116.
RecursiveFileLocator.java:
1.
2. // RecursiveFileLocator.java
3. //
4. // Copyright 2004 Michael J. Henderson & Associates LLC
5. //
6. // Licensed under the Apache License, Version 2.0 (the "License");
7. // you may not use this file except in compliance with the License.
8. // You may obtain a copy of the License at
9. //
10. // http://www.apache.org/licenses/LICENSE-2.0
11. //
12. // Unless required by applicable law or agreed to in writing, software
13. // distributed under the License is distributed on an "AS IS" BASIS,
14. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15. // See the License for the specific language governing permissions and
16. // limitations under the License.
17.
18. package com.mjhenderson.users.tapestry;
19.
20. import java.io.File;
21. import java.net.URL;
22. import java.util.ArrayList;
23. import java.util.HashMap;
24. import java.util.Iterator;
25. import java.util.List;
26. import java.util.Map;
27.
28. import org.apache.commons.logging.Log;
29. import org.apache.commons.logging.LogFactory;
30. import org.apache.tapestry.IResourceLocation;
31.
32. /**
33. * @author <a href="mailto:michaelh@mjhenderson.com?subject=com.mjhenderson.users.tapestry.RecursiveFileLocator">Mike Henderson</a>
34. *
35. */
36. public class RecursiveFileLocator {
37.
38. private static final Log LOG = LogFactory.getLog(RecursiveFileLocator.class);
39.
40. private IResourceLocation _location;
41.
42. private File realRoot ;
43.
44. private Map _locations = new HashMap();
45.
46. public RecursiveFileLocator(IResourceLocation location,String _realRootFolder) {
47. realRoot = new File(_realRootFolder);
48. _location = location;
49. }
50.
51. /* (non-Javadoc)
52. * @see org.apache.tapestry.INamespace#getPageSpecification(java.lang.String)
53. */
54. public IResourceLocation resolveLocation(String expectedName) {
55. if (LOG.isDebugEnabled()) {
56. LOG.debug("getLocation("+expectedName+")");
57. }
58. IResourceLocation location = _resolveThisFolderLocation(expectedName);
59. if (location == null) {
60. location = _resolveChildFolderLocation(expectedName);
61. }
62. return location;
63. }
64.
65.
66. private IResourceLocation _resolveThisFolderLocation(String expectedName) {
67. if (LOG.isDebugEnabled()) {
68. LOG.debug("_resolveThisFolderLocation("+expectedName+")");
69. }
70. IResourceLocation location = (IResourceLocation)_locations.get(expectedName);
71. if (location == null) {
72. location = _location.getRelativeLocation(_location.getPath()+"/"+expectedName);
73.
74. if (location.getResourceURL() == null) {
75. return null;
76. }
77. _locations.put(expectedName, location);
78. }
79. return location;
80. }
81.
82.
83. private IResourceLocation _resolveChildFolderLocation(String expectedName) {
84. List children = _getChildFolderLocators();
85. Iterator iterator = children.iterator();
86. while (iterator.hasNext()) {
87. RecursiveFileLocator child = (RecursiveFileLocator)iterator.next();
88.
89. if (LOG.isDebugEnabled()) {
90. LOG.debug("_resolveChildFolderLocation() child = " + child + ", expectedName = " + expectedName);
91. }
92. IResourceLocation location = child.resolveLocation(expectedName);
93. if (location != null) {
94. return location;
95. }
96. }
97. return null;
98. }
99.
100. public String toString() {
101. return "RecursiveFileLocator { "+_location+" }";
102. }
103.
104. private List _children = new ArrayList();
105. private boolean _childrenLoaded = false;
106.
107. private List _getChildFolderLocators() {
108. if (!_childrenLoaded) {
109. _loadChildFolderLocators();
110. _childrenLoaded = true;
111. }
112. return _children;
113. }
114.
115. private void _loadChildFolderLocators() {
116.
117. if (LOG.isDebugEnabled()) {
118. LOG.debug("_loadChildFolderLocators() this = " + this);
119. }
120.
121. File file = realRoot;//new File(path);
122. if (file.isDirectory()) {
123. File[] files = file.listFiles();
124. for (int i = 0; i < files.length; i++) {
125. File f = files[i];
126. if (f.isDirectory() && !f.getName().equals("classes") && !f.getName().equals("lib")) {
127. RecursiveFileLocator child = new RecursiveFileLocator(_location.getRelativeLocation(f.getName()+"/"),file.getAbsolutePath()+"/"+f.getName());
128. if (LOG.isDebugEnabled()) {
129. LOG.debug("_loadChildFolderLocators() child = " + child);
130. }
131. _children.add(child);
132. }
133. }
134. }
135. }
136. }
.application文件中增加如下定义:
1.
2. <extension name="org.apache.tapestry.specification-resolver-delegate"
3. class="com.mjhenderson.users.tapestry.CustomSpecificationResolver"
4. immediate="yes">
5. </extension>
6.
以上代码已经在Tomcat和JBoss上经过测试,希望朋友们可以在别的应用服务器上帮我测测,呵呵。代码比较粗糙,谁要是发现了什么问题或有什么改进思路,希望能联系我。
顺便提醒一下,在http://www.t-deli.com上有一个Ant Task,可以根据你的页面存放路径自动更新.application文件里面的页面定义,这样似乎定义几百个页面也是很简单的事情,不过我还是倾向于不用配置直接使用的方法,就看你的需要和使用习惯了。
发表评论
-
page specification寻找路径
2008-02-20 18:34 1257Tapestry4的机制是先找page模板,然后根据page模 ... -
页面跳转类组件
2008-02-20 14:46 1679ActionLink组件 页面响应时,创建了一个链接。如果触 ... -
Page对象池参数设置
2008-02-19 15:17 1212The internal pooling of Tapestr ... -
Tapestry简单的ajax实现
2008-02-19 15:15 2097Tapestry4.1.x中内置dojo实现ajax功能,不用 ... -
Tapestry页面属性持久化策略
2008-02-19 14:12 1115tapestry.persist.xml <con ... -
两个特殊的组件:content和remove
2008-02-19 11:27 978在tapestry中,有两个特殊的组件:remove和cont ... -
引用多个样式表的方法
2008-02-19 11:10 748<html jwcid="@Shell&quo ... -
转换器
2008-02-15 13:33 909表单中的元素的值都是字符串,在tapestry中,需要将这些值 ... -
基本组件的使用
2008-02-15 11:56 8711.combo box组件 .page文件: <comp ... -
页面属性
2008-02-15 09:50 894当在页面类中定义了抽象的getter方法时,在页面规范文件中( ... -
默认前缀
2008-02-14 18:31 961在模板文件中(.html),默认的前缀是literal,例如: ... -
解决tapestry中由于使用对象池而造成信息泄露的问题
2008-02-14 17:36 1206在tapestry中,由于每个页面都需要使用一个页面对象,为了 ... -
基础设施对象Infrastructure
2008-02-14 17:13 8401.获取应用程序的虚拟目录名称 String contex ... -
页面跳转汇总
2008-02-14 16:43 10331.表单提交后的页面跳转 表单提交后的页面跳转有三种方法: ... -
Tapestry与Spring和hibernate的集成
2008-01-24 10:21 1500Tapestry4.1与Spring的集成只能通过Hivemi ... -
page规范文件的使用
2008-01-09 15:19 1041一、asset的使用 资源在类路径下: <asset n ... -
国际化与本地化
2008-01-08 14:09 864页面使用: <span jwcid="@Ins ... -
编码问题
2008-01-08 14:06 810在应用程序配置文件中配置 <meta key=" ... -
页面校验
2008-01-08 14:05 1312前台校验: 采用Tapestry提供的核心验证,页面调用的方法 ... -
URL redirect配置
2008-01-08 14:04 1830web.xml中配置: <filter> < ...
相关推荐
CPPC++_PCLPoint Cloud Library点云库学习记录
基于Python的百度百科爬虫
CPPC++_Qt 之 GUI 控件使用 网络 架构原理 运行机制理解DTK 重绘控件方式的框架解析IDE 技巧
10020
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
cppc++
2000d
Apache Kafka:Kafka集群运维与监控.docx
CPPC++_TNN是由腾讯优图实验室和光影实验室共同开发的一种面向移动桌面和服务器的统一深度学习推理框架,TNN具有
huluxia.apk
Python商品销售数据分析可视化项目源码(期末大作业).zip,个人经导师指导并认可通过的98分大作业设计项目。主要针对计算机相关专业的正在做期末大作业设计的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业,代码资料完整下载可用。 Python商品销售数据分析可视化项目源码(期末大作业).zip,个人经导师指导并认可通过的98分大作业设计项目。主要针对计算机相关专业的正在做期末大作业设计的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业,代码资料完整下载可用。Python商品销售数据分析可视化项目源码(期末大作业).zip,个人经导师指导并认可通过的98分大作业设计项目。主要针对计算机相关专业的正在做期末大作业设计的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业,代码资料完整下载可用。Python商品销售数据分析可视化项目源码(期末大作业).zip,个人经导师指导并认可通过的98分大作业设计项目。主要针对计算机相关专业的正在做期末大作业设计的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业,代码资料完整下载可用。Python商品销售数据分析
[CSP-J 2023] 小苹果的代码
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
基于SVM的简单机器学习分类,可以使用svm,knn,朴素贝叶斯,决策树四种机器学习方法进行分类
基于YOLOv5和PSPNet的实时目标检测和语义分割系统Python实现源码+文档说明(高分毕设),该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 基于YOLOv5和PSPNet的实时目标检测和语义分割系统Python实现源码+文档说明(高分毕设)基于YOLOv5和PSPNet的实时目标检测和语义分割系统Python实现源码+文档说明(高分毕设)基于YOLOv5和PSPNet的实时目标检测和语义分割系统Python实现源码+文档说明(高分毕设)基于YOLOv5和PSPNet的实时目标检测和语义分割系统Python实现源码+文档说明(高分毕设)基于YOLOv5和PSPNet的实时目标检测和语义分割系统Python实现源码+文档说明(高分毕设)基于YOLOv5和PSPNet的实时目标检测和语义分割系统Pyt
CPPC++_通过carlarosbridge在carla上实现自动驾驶planning and control
cppc++
分布式事务管理