关于C++包含资源文件的问题

请问大神,我写了一个程序,想给他弄上一个图标,所以添加了一个icon.ico文件
并且在程序中写上了#include"resource.h",但是为什么生成的EXE文件还是没有变化呢?

c++

2个回答

楼上正解,如果是在vs的MFC里就更简单了,先把图片导入资源文件夹,然后直接打开rc文件,找到ICON然后把后面的文件改成你自己的就行了

// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME           ICON                    "res\\yourICON.ico"

你的icon的资源的编号要是1号资源

https://www.cnblogs.com/sxmcACM/p/5386982.html

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于C++包含资源文件的问题
请问大神,我写了一个程序,想给他弄上一个图标,所以添加了一个icon.ico文件 并且在程序中写上了#include"resource.h",但是为什么生成的EXE文件还是没有变化呢?
C程序内存不能为read错误,包含文件和内存操作
各个方法每个都没问题,放一块儿就冒出个不明原因的错误 ```C #include <stdio.h> #include <math.h> #include <time.h> //get time difference //days from 2015/6/9 to here. int getTD(); //free()! char* getTextFileContent(char*); long getFileSize(FILE*); //free()! char* mStrCat(char*, char*); int main() { int TD = getTD() + 1; char buf[100]; getcwd(buf, 100); char *listPath = mStrCat(buf, "\\plan.txt"); //DEBUG printf("%s\r\n", listPath); char* text = getTextFileContent(listPath); free(listPath); printf("%s", text); text = (text == NULL) ? "" : text; system("cls"); printf("高考后第[ %d ]天\r\n", TD); printf("Tasks:\r\n %s\r\n", text); system("pause & exit"); free(text); return 0; } int getTD() { struct tm tmptm = {0, 0, 0, 9, 5, 2015 - 1900}; long startT = mktime(&tmptm); long nowT = time(NULL); //seconds long TDs = nowT - startT; //days double TDd = (double)TDs; TDd = TDd / (60 * 60 * 24); TDd = floor(TDd); return (int)TDd; } char* getTextFileContent(char *path) { FILE *fp = fopen(path, "r"); if(fp == NULL) return NULL; long size = getFileSize(fp); int chLen = sizeof('\0'); char *ptr = (char*)malloc(size + chLen); //block 作为这块内存区的起始指针将被作为字符串指针返回,ptr 经过运算后将指向内存区结尾。 char *block = ptr; if(ptr == NULL) { return NULL; } int c; char ch; //依次将fgetc 获得的字符填入内存区。 while((c = fgetc(fp)) != EOF) { ch = (char) c; memcpy(ptr, &ch, chLen); //移动ptr 到下一个待填入的地址。 (int)ptr += chLen; } char endC = '\0'; memcpy(ptr, &endC, chLen); return block; } long getFileSize(FILE* f) { long size = (fseek(f, 0L, SEEK_END) != 0) ? (ftell(f)) : -1; rewind(f); return size; } char* mStrCat(char *str1, char *str2) { int str1Len = strlen(str1) + 1; int str2Len = strlen(str2) + 1; int byteNum = (str1Len + str2Len - 1) * sizeof(char); char *block = (char*)(malloc(byteNum)); if(block == NULL) return NULL; memmove(block, str1, str1Len * sizeof(char)); strcat(block, str2); return block; } ``` 文件内容可以正常输出,说明文件读取的部分大概没问题,mStrCat 经测试也没发现问题,但程序死活执行不到 system("cls") ,一到这儿Windows就会弹窗提示。 ![图片说明](https://img-ask.csdn.net/upload/201507/02/1435770423_486685.png) 文件内容可以正常输出: ![图片说明](https://img-ask.csdn.net/upload/201507/02/1435770417_925756.png) 另外,运行程序的时候360报毒了,一个QVM。。。,然后运行几次之后那个cmd窗口无法关闭了(点什么都没反映,但光标在闪)。打开的任务管理器也变成了这样: ![图片说明](https://img-ask.csdn.net/upload/201507/02/1435770593_655782.png) 自然,没能杀掉cmd,最后连资源管理器都不正常了,通过重启解决。(一个小练习而已杀伤力没这么大吧) P.S. 通过TCC 编译 ----------------------------------------------- 改动后的getTextFileContent 代码:(实际上没什么改动,但至少能用了) ``` char* getTextFileContent(char *path) { FILE *fp = fopen(path, "r"); if(fp == NULL) return NULL; long size = getFileSize(fp); int chLen = sizeof(char); char *ptr = (char*)malloc(size + chLen); char *block = ptr; if(ptr == NULL) { return NULL; } int c; char ch; while((c = fgetc(fp)) != EOF) { ch = (char)c; memcpy(ptr, &ch, chLen); ptr += chLen; } ch = '\0'; memcpy(ptr, &ch, chLen); fclose(fp); return block; } ``` 文件大小为275b 时读取汉字都没问题(I don't know why ...),但到1.27k(全英文)时就又冒出了内存不能为written 错误,一瞬间想到当初在Android 上写的个文件复制程序会不时的冒出Segmentation Fault…… 哪位大神来搭救一下!
我看到您也遇到遇到过同样的问题求解
1>------ 已启动生成: 项目: Project3, 配置: Release Win32 ------ 1>编译XML资源 1>E:\duiengine\\tool\residbuilder -y -p skin -i skin\index.xml -r .\duires\winres.rc2 -n .\duires\name2id.xml -h .\duires\winres.h 1>idmap files have not been modified. 1>name2id xml descriptor is not changed! 1>正在编译... 1>UIHander.cpp 1>.\UIHander.cpp(7) : error C2838: “m_pIsSkinManagerDlgActive”: 成员声明中的非法限定名 1>.\UIHander.cpp(8) : error C2590: “{ctor}”: 只有构造函数可以有基/成员初始值列表 1>.\UIHander.cpp(8) : error C3254: “ServerDelayDlg”: 类包含显式重写“{ctor}”,但并不从包含函数声明的接口派生 1>.\UIHander.cpp(8) : error C2838: “{ctor}”: 成员声明中的非法限定名 1>.\UIHander.cpp(14) : error C3254: “ServerDelayDlg”: 类包含显式重写“{dtor}”,但并不从包含函数声明的接口派生 1>.\UIHander.cpp(14) : error C2838: “{dtor}”: 成员声明中的非法限定名 1>.\UIHander.cpp(14) : error C2535: “ServerDelayDlg::~ServerDelayDlg(void)”: 已经定义或声明成员函数 1> c:\users\administrator\documents\我的yy\909011908\project3\project3\ServerDelayDlg.h(9) : 参见“ServerDelayDlg::~ServerDelayDlg”的声明 1>.\UIHander.cpp(20) : error C3254: “ServerDelayDlg”: 类包含显式重写“OnInitDialog”,但并不从包含函数声明的接口派生 1>.\UIHander.cpp(20) : error C2838: “OnInitDialog”: 成员声明中的非法限定名 1>.\UIHander.cpp(32) : error C3254: “ServerDelayDlg”: 类包含显式重写“OnSkinManagerActive”,但并不从包含函数声明的接口派生 1>.\UIHander.cpp(32) : error C2838: “OnSkinManagerActive”: 成员声明中的非法限定名 1>.\UIHander.cpp(54) : error C3254: “ServerDelayDlg”: 类包含显式重写“OnSetServersDelay”,但并不从包含函数声明的接口派生 1>.\UIHander.cpp(54) : error C2838: “OnSetServersDelay”: 成员声明中的非法限定名 1>.\UIHander.cpp(60) : error C3254: “ServerDelayDlg”: 类包含显式重写“OnSetWnd”,但并不从包含函数声明的接口派生 1>.\UIHander.cpp(60) : error C2838: “OnSetWnd”: 成员声明中的非法限定名 1>.\UIHander.cpp(65) : error C3254: “ServerDelayDlg”: 类包含显式重写“OnDuiMenu”,但并不从包含函数声明的接口派生 1>.\UIHander.cpp(65) : error C2838: “OnDuiMenu”: 成员声明中的非法限定名 1>.\UIHander.cpp(75) : error C3254: “ServerDelayDlg”: 类包含显式重写“OnMsgBtnClick”,但并不从包含函数声明的接口派生 1>.\UIHander.cpp(75) : error C2838: “OnMsgBtnClick”: 成员声明中的非法限定名 1>.\UIHander.cpp(79) : error C3254: “ServerDelayDlg”: 类包含显式重写“OnMsgBtnClickTest”,但并不从包含函数声明的接口派生 1>.\UIHander.cpp(79) : error C2838: “OnMsgBtnClickTest”: 成员声明中的非法限定名 1>.\UIHander.cpp(83) : fatal error C1075: 与左侧的 大括号“{”(位于“c:\users\administrator\documents\我的yy\909011908\project3\project3\ServerDelayDlg.h(6)”)匹配之前遇到文件结束 1>ServerDelayHandler.cpp 1>.\ServerDelayHandler.cpp(6) : error C2059: 语法错误 : “{” 1>.\ServerDelayHandler.cpp(6) : error C2334: “{”的前面有意外标记;跳过明显的函数体 1>.\ServerDelayHandler.cpp(32) : error C2590: “{ctor}”: 只有构造函数可以有基/成员初始值列表 1>.\ServerDelayHandler.cpp(32) : error C3254: “ServerDelayDlg”: 类包含显式重写“{ctor}”,但并不从包含函数声明的接口派生 1>.\ServerDelayHandler.cpp(32) : error C2838: “{ctor}”: 成员声明中的非法限定名 1>.\ServerDelayHandler.cpp(37) : error C3254: “ServerDelayDlg”: 类包含显式重写“{dtor}”,但并不从包含函数声明的接口派生 1>.\ServerDelayHandler.cpp(37) : error C2838: “{dtor}”: 成员声明中的非法限定名 1>.\ServerDelayHandler.cpp(37) : error C2535: “ServerDelayDlg::~ServerDelayDlg(void)”: 已经定义或声明成员函数 1> c:\users\administrator\documents\我的yy\909011908\project3\project3\ServerDelayDlg.h(9) : 参见“ServerDelayDlg::~ServerDelayDlg”的声明 1>.\ServerDelayHandler.cpp(41) : error C3254: “ServerDelayDlg”: 类包含显式重写“OnInitDialog”,但并不从包含函数声明的接口派生 1>.\ServerDelayHandler.cpp(41) : error C2838: “OnInitDialog”: 成员声明中的非法限定名 1>.\ServerDelayHandler.cpp(61) : error C3254: “ServerDelayDlg”: 类包含显式重写“OnListPredraw”,但并不从包含函数声明的接口派生 1>.\ServerDelayHandler.cpp(61) : error C2838: “OnListPredraw”: 成员声明中的非法限定名 1>.\ServerDelayHandler.cpp(69) : fatal error C1075: 与左侧的 大括号“{”(位于“c:\users\administrator\documents\我的yy\909011908\project3\project3\ServerDelayDlg.h(6)”)匹配之前遇到文件结束 1>ServerDelayDlg.cpp 1>.\ServerDelayDlg.cpp(4) : error C2535: “ServerDelayDlg::ServerDelayDlg(void)”: 已经定义或声明成员函数 1> c:\users\administrator\documents\我的yy\909011908\project3\project3\ServerDelayDlg.h(8) : 参见“ServerDelayDlg::ServerDelayDlg”的声明 1>.\ServerDelayDlg.cpp(11) : error C2535: “ServerDelayDlg::~ServerDelayDlg(void)”: 已经定义或声明成员函数 1> c:\users\administrator\documents\我的yy\909011908\project3\project3\ServerDelayDlg.h(9) : 参见“ServerDelayDlg::~ServerDelayDlg”的声明 1>.\ServerDelayDlg.cpp(14) : fatal error C1075: 与左侧的 大括号“{”(位于“c:\users\administrator\documents\我的yy\909011908\project3\project3\ServerDelayDlg.h(6)”)匹配之前遇到文件结束 1>正在生成代码... 1>生成日志保存在“file://c:\Users\Administrator\Documents\我的YY\909011908\Project3\Project3\Release\BuildLog.htm” 1>Project3 - 38 个错误,0 个警告 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
大学c++ 课程设计 班级通讯录(求资源 详细点)
1.目的和要求:运用C++语言描述班级类、通讯录类等,每一个类应包含数据成员和成员函数。 2.课程设计要实现的主要功能如下: 1)建立班级类、通讯录类等 2)班级通讯录信息从文本文件读入,退出时写入文本文件 3)班级、通讯录信息的添加、修改、删除、查找 4)对某个班级、的通讯录信息按照学号、姓名进行排序和输出 5)可针对某条通讯录进行收藏,可列出所有收藏的通讯录(这个必须要有) 像这种分类清晰的![图片说明](https://img-ask.csdn.net/upload/201706/01/1496302673_660068.png) (ps:最好用vs编写的 要不然 看不太懂)
读取python遍历中文目录得到的文件路径报错
各位朋友们好,我是一名python新手,现在遇到一个问题,恳请各位朋友们能指点一下我。 我的环境是:ubuntu14.04系统,python2.7 用python遍历一个目录,目录层次结构如下: 这是主目录: /home/chaoma/superboard/mydata/input/production 主目录下的目录层次结构如下 --超级画板教学资源_全处理_772 -- Z+Z资源库 --初中数学资源库 --1有理数 ---1.1数的分类 -- 0.mp4 -- name.txt …… --2一元一次方程 ….. --动态解析高考数学综合题 --第一章基本函数 --第四节 --06福建理21 --name.txt --0.mp4 --拓展练习4.1 …. --第五节 …… --第二章三角函数 ……. …… --学生作品集合_全处理_52 ……… 我想实现的功能:找到所有含有0.mp4文件的父目录,并读取该父目录下面的name.txt文件 因此我写了以下的遍历函数来实现这一功能: def visitDir_walk(path , sFileSuffix): codedetect = chardet.detect(path)["encoding"] path = unicode(path , codedetect) fileNames = list() for root,dirs,files in os.walk(path): for i in range(0 , len(files)): file = files[i] if file.endswith(sFileSuffix): sFileName = os.path.join(root , file) #这边返回的应该是包含视频文件的父目录,也就是学生作品目录 realFileName = os.path.split(os.path.abspath(sFileName))[0] fileNames.append( unicode(realFileName,”gbk”) ) return fileNames def main(): sProductionInputPath = “/home/chaoma/superboard/mydata/input/production” dir_production_list = visitDir_walk(sProductionInputPath , ".mp4") #拼接name.txt的路径 for dir in dir_production_list: nameFile = os.path.join(dir , "name.txt") fout = codecs.open(nameFile , "w" , "utf-8") #截取出路径中的文件名作为需要的内容,并写入文件 fout.write(os.path.split(path)[1]) fout.close() main() 但是执行之后却报错了,报错如下: fout = codecs.open(nameFile , "w" , "utf-8") File "/usr/lib/python2.7/codecs.py", line 878, in open file = __builtin__.open(filename, mode, buffering) IOError: [Errno 2] No such file or directory: u'/home/chaoma/superboard/mydata/input/production/\u8d85\u7ea7\u753b\u677f\u6559\u5b66\u8d44\u6e90_\u5168\u5904\u7406_772/\u52a8\u6001\u89e3\u6790\u9ad8\u8003\u6570\u5b66\u7efc\u5408\u9898/\u7b2c\u4e00\u7ae0\u57fa\u672c\u51fd\u6570/\u7b2c\u56db\u8282/06\u798f\u5efa\u740621/name.txt' 打印这个报错的路径得到: /home/chaoma/superboard/mydata/input/production/超级画板教学资源_全处理_772/动态解析高考数学综合题/第一章基本函数/第四节/06福建理21/name.txt 这个文件路径是存在的却报错,不知道为什么。难道是路径是unicode类型就不能识别吗? 恳请各位朋友们能指点我一下,十分感谢。
如何用C++调用jeesite的库中的内容
如题,我想用C++来调用jeesite的库中的内容。 现在的问题是,项目之前用的jeesite的web库是基于mysql的,而我已经能够使用C++连接mysql库,但是对于如何调用库中的内容却不知道该怎么做。。。 因为不清楚之前上传到jeesite里的内容,是否就存储在名为jeesite的那个mysql库里?好像C++调用那个库的时候显示没法查询库中的内容? ![这是jeesite的web库的已上传的资源搜索的截图](https://img-ask.csdn.net/upload/201903/03/1551581128_94783.png) 而C++调用mysql库的代码如下: ``` #include "stdafx.h" #include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> //下面两个头文件的顺序不能颠倒 #include "winsock2.h" #include "windows.h" #include "mysql.h" using namespace std; void main() { MYSQL *pConn; pConn = mysql_init(NULL); //第2、3、4、5参数的意思分别是:服务器地址、用户名、密码、数据库名,第6个为mysql端口号(0为默认值3306) if(!mysql_real_connect(pConn,"localhost","root","wtk123","jeesite",3306,NULL,0)) { printf("无法连接数据库:%s",mysql_error(pConn)); return; } mysql_query(pConn,"set names gbk");//防止乱码。设置和数据库的编码一致就不会乱码 //SET NAMES x 相当于 SET character_set_client = x;SET character_set_results = x;SET character_set_connection = x; //写set character set gbk;查询不会乱码,但是参数化插入会报错。而set names gbk则都不会乱码 //mysql_real_query比mysql_query多了个参数: 字符串query的长度, 所以适合有二进制数据的query, 而mysql_query的字符串query不能包含二进制,因为它以\0为结尾 //mysql_query() 不能传二进制BLOB字段,因为二进制信息中的\0会被误判为语句结束。 mysql_real_query() 则可以。 if(mysql_query(pConn,"select * from 大臂")) { printf("查询失败:%s",mysql_error(pConn)); return; } //mysql_store_result是把查询结果一次性取到客户端的离线数据集,当结果比较大时耗内存。 //mysql_use_result则是查询结果放在服务器上,客户端通过指针逐行读取,节省客户端内存。但是一个MYSQL*连接同时只能有一个未关闭的mysql_use_result查询 MYSQL_RES *result = mysql_store_result(pConn); MYSQL_ROW row; while(row = mysql_fetch_row(result)) { printf("%s %s\n",row[1],row[2]); } mysql_free_result(result); mysql_close(pConn); } ``` 调试后的结果如下: ![图片说明](https://img-ask.csdn.net/upload/201903/03/1551581698_811644.png) 可见同样是搜索一样的名字,C++却显示是空的?! 求问应该怎么做呢?如何才能在C++搜索并调用jeesite的库中想要的内容乃至于进一步地下载资源? 注:jeesite的web库中提供了可下载的途径,现在我的问题是,如何在C++端编代码实现在C++端能够搜索、调用、下载所需的库中的资源呢? jeesite库中的资源具体情况如下图所示,可以看到,在网页端是可以下载的 ![图片说明](https://img-ask.csdn.net/upload/201903/03/1551582215_207327.png)
同类型为什么要强制转换(自己强转成自己)/ASP.NET Web程序重复引用(引用来自同一文件)问题(已解决)?
# 最后的补充和结论 经过几番实验和查阅文档,得出结论: 这个重复引用/强制转换(自己强转成自己)的问题,是由于编译器对App_Code文件夹特殊处理造成的。 我的理解和解释如下(欢迎纠正): >App_Code文件夹下的文件,会在运行时进行编译,这也是为什么我们创建在App_Code文件夹下的.cs文件默认生成操作是“内容”而不是“编译”了。这个目录的作用,是存放那些需要动态修改的代码(我的理解就像asp),这个目录下的代码,是以源码形式存在于项目中,等到访问时才进行编译(这也解释了为什么我遇到的这个错误,编译可以通过,但是运行时会报错)。当访问这个目录下的类时,这个类就被第二次编译,所以会出现重复定义/类型不明确需要强制转换的问题。根据《在ASP.NET Web Application中使用App_Code文件夹引发的异常》这篇文章的解释,如果用反编译工具打开Temporary ASP.NET Files文件夹下我们项目相关的那个DLL,应该可以看到App_Code下面的类被二次编译(我没有实验,但我感觉是可能的)。 **解决办法:** >由于我是先解决的问题,然后再寻求的原因。所以我的解决办法是采用了caozhy同学的建议,将App_Code下所有共享的代码剪切出来创建了一个新的Library,然后在WebApplication里引用了这个Library,由于这样,App_Code下就不存在代码了,所以我的问题也相当于变相的解决了。 同样的解决办法还有,就像我刚刚那样,重新创建一个非App_Code目录,存放那些公用代码,结论也是可行的。 参考: * 《在ASP.NET Web Application中使用App_Code文件夹引发的异常》 * 《Shared Code Folders in ASP.NET Web Site Projects》 * 《App_Code folder doesn’t work with Web Application Projects (WAPs)》 ## * 补充7: 本着好奇学习的原则,我特意创建了一个包含错误的项目,上传到了github,求老师讲解。谢谢。 https://github.com/awolfnet/test 编译时有个警告,但可以编译通过,但运行时会报错 ## **编译警告:** ``` CS0266 无法将类型“EEGProxy.App_Code.HTTP.METHOD [App_Web_r13cya2o, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]”隐式转换为“EEGProxy.App_Code.HTTP.METHOD [EEGProxy, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]”。存在一个显式转换(是否缺少强制转换?) EEGProxy E:\visualstudio2015\Projects\EEGProxy\EEGProxy\App_Code\Prerouting.cs 38 ``` ## **运行时错误:** ``` 编译器错误消息: CS0266: Cannot implicitly convert type 'EEGProxy.App_Code.HTTP.METHOD [E:\visualstudio2015\Projects\EEGProxy\EEGProxy\App_Code\Utils\HTTP.cs(19)]' to 'EEGProxy.App_Code.HTTP.METHOD [C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\eegproxy\728b4be6\64b07da6\assembly\dl3\5c9e5e68\1dd6f07e_a892d401\EEGProxy.dll]'. An explicit conversion exists (are you missing a cast?) ``` 首先定义绝对没有重复,这个我是确认过了的。 查找了不少资料,大部分都说是自己引用了自己,但是我无论在项目属性里的引用页面、还是解决方案资源管理器里的“引用”树形目录里,都没有发现对项目自身的引用。 这个错误有时候会自己消失,有时候会出现,这些代码都放在APP_CODE目录下,.cs文件的生成操作已经改成了“编译”。 ## **异常代码:** ``` public RoutedPackageModel RoutePackage(HTTP.METHOD method, string path, HttpRequestHeaders headers, byte[] payload) { _routedPackage.Payload = payload; _routedPackage.Headers = CopyHeadersFrom(headers); _routedPackage.Headers.Add(HttpRequestHeader.ContentType, "application/json"); _routedPackage.Destination = GetDestinationInRouteTable(headers.Host); _routedPackage.Method = method; <<-此句会报错 _routedPackage.Path = path; return _routedPackage; } ``` ##**相关类:** ``` public class RoutedPackageModel { public enum ACTION { DROP, REJECT, ACCEPT, } public HTTP.METHOD Method { set; get; } public string Initiator { set; get; } public string Source { set; get; } public string Original { set; get; } public string Destination { set; get; } public string Path { set; get; } public WebHeaderCollection Headers { set; get; } public byte[] Payload { set; get; } } public class HTTP { public enum METHOD { GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE, PATCH, } public enum SCHEMA { HTTP, HTTPS } } ``` 这个错误有时候会自己好-_-,有时候又会突然出现。不知道从哪里下手。 ## * 补充: 一开始我以为是HTTP这个类名与系统定义冲突,随即改成了MYTTP,错误依旧: ``` CS0266: Cannot implicitly convert type 'EEGProxy.App_Code.MYHTTP.METHOD [E:\visualstudio2015\Projects\EEGProxy\EEGProxy\App_Code\Utils\HTTP.cs(19)]' to 'EEGProxy.App_Code.MYHTTP.METHOD [C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\eegproxy\728b4be6\64b07da6\assembly\dl3\5c9e5e68\4626695d_ab92d401\EEGProxy.dll]'. An explicit conversion exists (are you missing a cast?) ``` ## * 补充2: 具体情况是这样:是我在APP_CODE\Utils下有一个HTTP.CS的类,然后同项目里其他类都在用这个HTTP.CS类里的一个枚举。 ## * 补充3: 在RoutePackage函数的参数定义中,HTTP.METHOD有一个绿色的浪线,会有一个警告: ``` class EEGProxy.App_Code.MYHTTP "E:\visualstudio2015\Projects\EEGProxy\EEGProxy\App_Code\Utils\HTTP.CS"中的类型"MYHTTP"与"EEGProxy,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"中的导入类型"MYHTTP"冲突。请使用"E:\visualstudio2015\Projects\EEGProxy\EEGProxy\App_Code\Utils\HTTP.cs"中定义的类型。 ``` 这个警告明明提示的都是同一个文件。 ## * 补充4: 我什么也没改,清理几次项目,打开关闭vs,重新生成,暂时可以了,每次我都是这样解决,但是不知道根本原因在哪。 先继续干活吧,等一会数据调通了,根据那位同学的建议把那些工具类的代码新建一个项目,生成dll,然后在主项目里引用它试试。 ## * 补充5: 我还是不理解,在同项目中,多个类引用同一个类中的枚举类型,为什么会报这个错误? 现在具体情况是这样的, 一个HTTP类,里面有个枚举类型,叫METHOD,然后另外一个模型类,叫RoutedPackageModel,其中一个属性就是HTTP.METHOD,然后在Prerouting类中有一个方法,RoutePackage,其中一个参数就是HTTP.METHOD,然后在方法内部使用这个参数时,就会出现这个错误! ## * 补充6: 我创建了一个只有3个类的项目,问题依旧,我的环境是VS2015,版本14.0.25431.01 Update3,.net framework 版本4.7.02558, 刚刚试了下用同时的vs2017,是同样的毛病。 代码现在放到了网盘https://pan.baidu.com/s/1NCneJV9NJM9DlmHLQhQCaQ 回家后我上传到github。 我就是特别好奇,是怎么回事,希望大家帮我解惑。 谢谢。 ## * 补充7: 本着好奇学习的原则,我特意创建了一个包含错误的项目,上传到了github,求老师讲解。谢谢。 https://github.com/awolfnet/test ## * 补充8: 我又做了一个实验,过程如下: 目录结构: App_Code\ClassInAppCode.cs App_Code\EnumInAppCode.cs TestCode\ClassInTestCode.cs TestCode\EnumInTestCode.cs 一共四个文件,Enum开头的两个类文件分别定义了两个枚举类型: ``` EnumInAppCode.cs: public class EnumInAppCode { public enum EIAC { A, B } } EnumInTestCode.cs: public class EnumInTestCode { public enum EITC { A, B } } ``` 然后两个Class是这样定义的: ``` ClassInAppCode.cs: public class ClassInAppCode { public void A(EnumInAppCode.EIAC eiac, EnumInTestCode.EITC eitc) //这个函数的参数会报错 { EnumInAppCode.EIAC _eiac; //<<-这里会报错 EnumInTestCode.EITC _eitc; _eiac = eiac;//<<-这里会报错 _eitc = eitc; } } ClassInTestCode.cs public class ClassInTestCode { public void A(EnumInAppCode.EIAC eiac, EnumInTestCode.EITC eitc) { EnumInAppCode.EIAC _eiac; EnumInTestCode.EITC _eitc; _eiac = eiac; _eitc = eitc; } } ``` 然后得出这样一个结果,就是当枚举类型和代码同在App_Code文件夹时,会出现这个异常。 去查了文档:https://docs.microsoft.com/en-us/previous-versions/ex526337(v=vs.140) 文档中描述说: >App_Code > >Contains source code for shared classes and business objects (for example, ..cs, and .vb files) that you want to compile as part of your application. In a dynamically compiled Web site project, ASP.NET compiles the code in the App_Code folder on the initial request to your application. Items in this folder are then recompiled when any changes are detected. > > Note > >You can add any type of class file to the App_Code folder in order to create strongly typed objects that represent those classes. For example, if you put Web service files (.wsdl and .xsd files) in the App_Code folder, ASP.NET creates strongly typed proxies for those classes. > >Code in the App_Code folder is referenced automatically in your application. The App_Code folder can contain subdirectories of files, which can include class files that in different programming languages. For more information, see Shared Code Folders in ASP.NET Web Site Projects and codeSubDirectories Element for compilation (ASP.NET Settings Schema). 重点在这句:**Code in the App_Code folder is referenced automatically in your application** 从现象来看,我怀疑是这个自动引用的问题,但我不知道如何解决。
使用C语言调用python
C语言代码 #include <stdio.h> #include"Python.h" //这里要包含头文件 //C/C++中执行python文件 void exec_python_file() { //初始化 Py_Initialize(); //choose1,执行单纯的内嵌字符串python代码,建议使用 if(!PyRun_SimpleString("execfile('draw1.py')")) printf("execute python file program failed\n"); //choose2,执行python文件,不建议使用 char fileStr[]="draw1.py"; FILE *fp; if(!(fp=fopen(fileStr,"r"))) printf("open python file failed!\n"); if(!PyRun_SimpleFile(fp,fileStr)) printf("execute python file failed!\n"); fclose(fp); //释放资源 Py_Finalize(); } int main() { exec_python_file(); return 0; } ``` python 代码 #! /usr/bin/python python2.7 # -*- coding:utf-8 -*- import numpy as np import pylab as p1 x1 = [-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25] y1 = [20,25,38,51,103,101,95,90,102,101,235,200,181,110,132,192,381,311,273,145,404,1023,1186,1835,1875,1881,1870,1820,1190,1010,390,150,210,309,379,188,120,108,170,140,230,180,104,94,97,40,38,27,25,22,20] p1.plot(x1,y1,'r') p1.title('Diffraction intensity distribution') p1.xlabel('coord/cm') p1.ylabel('light intensity/mA') p1.xlim(-25.0,25.0) p1.ylim(0.0,1900.0) p1.show() ``` 想实现用C语言调用python 编译时报错: gcc test.c -o test -l/usr/include/python2.7/ -lpyhton2.7 ``` 求解决
mfc创建时没有勾选支持ActiveX选项如何更改
1,在资源中增加 字符串资源 IDP_OLE_INIT_FAILED "OLE initialization failed. Make sure that the OLE libraries are the correct version." 同时在Resource.h文件中已经自动增加了该资源的定义了。 2,在stdafx.h文件中增加包含 #include <afxdisp.h> 3,在YourApp.cpp中的InitInstance中增加 // Initialize OLE libraries if (!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE; } AfxEnableControlContainer(); 在ExitInstance中增加 AfxOleTerm(FALSE); 以上这个方法已经使用过,无法奏效
用C#写的FTP访问FTP服务器代码出错,500命令出错。
最近在做FTP客户端测试,本地代码没问题。把代码放到与FTP服务器同一个局域网的电脑上,出错了,FTP服务器用Alfresco搭建的(好矫情的服务器),同样的代码,能访问ftp://IP,也能访问ftp://IP/Alfresco,但是访问到ftp://IP/Alfresco/xxx的时候就报错,500命令出错,关键是同样的代码。同时我用资源管理器打开创建文件夹都没问题,用cmd下访问文件夹也没有问题,有大神能解决吗?我贴一下代码 /// <summary> /// 获取当前目录下明细(包含文件和文件夹) /// </summary> /// <returns></returns> public string[] GetFilesDetailList() { string[] downloadFiles; try { StringBuilder result = new StringBuilder(); string ui = ftpUristring + "/Alfresco/Intergration"; FtpWebRequest request = CreateFtpWebRequest(ui, WebRequestMethods.Ftp.ListDirectoryDetails); WebResponse response = request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default); string line = reader.ReadLine(); while (line != null) { result.Append(line); result.Append("\n"); line = reader.ReadLine(); } result.Remove(result.ToString().LastIndexOf("\n"), 1); reader.Close(); response.Close(); return result.ToString().Split('\n'); } catch (Exception ex) { downloadFiles = null; throw ex; } }
在Myeclipse 中导入一个struts工程,该工程已经包含了struts的jar文件,工程没有提示出错。但是运行就提示资源is not available
相关文件: [size=large][color=red]struts.xml[/color][/size] <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- Add packages here --> <constant name="struts.devMode" value="true" /> <package name="front" extends="struts-default" namespace="/front"> <action name="index"> <result>/Namespace.jsp</result> </action> </package> <package name="main" extends="struts-default" namespace="/"> <action name="index"> <result>/Namespace.jsp</result> </action> </package> </struts> [size=large][color=red] web.xml:[/color][/size] <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> [size=large][color=red] 控制台提示出错:[/color][/size] java.lang.NullPointerException at com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading(FileManager.java:209) at com.opensymphony.xwork2.util.FileManager.fileNeedsReloading(FileManager.java:60) at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:325) at org.apache.struts2.config.StrutsXmlConfigurationProvider.needsReload(StrutsXmlConfigurationProvider.java:168) at com.opensymphony.xwork2.config.ConfigurationManager.conditionalReload(ConfigurationManager.java:220) at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:61) at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:774) at org.apache.struts2.dispatcher.ng.InitOperations.initStaticContentLoader(InitOperations.java:77) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:49) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295) at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3838) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4488) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546) at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041) at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:519) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:581) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 2010-7-1 21:59:10 org.apache.catalina.core.StandardContext start 严重: Error filterStart 2010-7-1 21:59:10 org.apache.catalina.core.StandardContext start 严重: Context [/Struts2_0200_Namespace] startup failed due to previous errors 2010-7-1 21:59:10 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap 严重: A web application created a ThreadLocal with key of type [null] (value [com.opensymphony.xwork2.inject.ContainerImpl$10@dc9065]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@8beff2]) but failed to remove it when the web application was stopped. To prevent a memory leak, the ThreadLocal has been forcibly removed. 2010-7-1 21:59:10 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap 严重: A web application created a ThreadLocal with key of type [null] (value [com.opensymphony.xwork2.inject.ContainerImpl$10@c67a88]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@96ad7c]) but failed to remove it when the web application was stopped. To prevent a memory leak, the ThreadLocal has been forcibly removed. [size=large][color=red]网页中提示的错误是:[/color][/size]The requested resource () is not available. [size=medium][color=darkred]我在浏览器里输入的是:http://localhost:8080/t/heStruts2_0200_Namespace/front/index[/color][/size] 倒腾了很久,就是解决不了,希望大家给看一下,谢谢!!
C#读取EXCEL和水晶报表
VS2008本来的环境是在32位机,现在换到64位win10的。 在读取EXCEL的时候报 Microsoft.ace.oledb.12.0 没有在本机注册 网上查了下答案, 右击资源管理器中的项目名-->属性-->生成(左侧标签页第二项)-->目标平台-->x86。 更改后确实 解决问题了。 但是在打印水晶报表的时候报错 试图加载 Crystal Reports 运行时出现错误。 或者 Crystal Reports 注册密钥所拥有的许可不足,或者 Crystal Reports 运行时组件未被正确安装。 请安装适当的 Crystal Reports 再分发文件(CRRedist*.msi)包含所需的 Crystal Reports 运行时组件的正确版本(x86、x64或 Itanium)。若需更多信息请访问http://www.businessobjects.com/support 。 现在的问题就是目标平台改成anycpu或x64的时候水晶报表没问题可以打印,但是excel无法读取报错 改成x86报下面的错误 求助如何解决
做了一个小时的面试题(没有过 希望大家帮忙答下 虽然很幼稚 毕竟每个人都是这么过来的吗 感激了!)
XX软件工程师笔试试题 注:1、请参考人员将答案写在答题纸上,勿将答案写在此卷上。 2、请参考人员将编号与姓名填写在答题纸上。 1、 以下数据结构中不属于线性数据结构的是()。 A、队列 B、线性表 C、二叉树 D、栈 我的答案:C 2、 在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是()。 A、 可行性分析 B、需求分析 C、详细设计 D、程序编码 我的答案:B 3、 结构化程序设计主要强调的是()。 A、 程序的规模 B、程序的易读性 C、程序的执行效率 D、程序的可移植性 我的答案:C 4、 在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段()。 A、 概要设计 B、详细设计 C、可行性分析 D、需求分析 我的答案:B 5、 下列关于栈的叙述中正确的是()。 A、 在栈中只能插入数据 B、在栈中只能删除数据 B、 栈是先进先出的线性表 D、栈是先进后出的线性表 我的答案:D 6、 下面不属于软件设计原则的是()。 A、 抽象 B、模块化 C、自底向上 D、信息隐蔽 我的答案:C 7、 对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为()。 A、 N+1 B、N C、(N+1)/2 D、N/2 我的答案:C 8、 视图设计一般有3种设计次序,下列不属于视图设计的是()。 A、 自顶向下 B、由外向内 C、由内向外 D、自底向上 我的答案:C 9、下列有关数据库的描述,正确的是()。 A、数据库是一个DBF文件 B、数据库是一个关系 C、数据库是一个结构化的数据集合 D、数据库是一组文件 我的答案:C 10、下列说法中,不属于数据模型所描述的内容的是()。 A、数据结构 B、数据操作 C、数据查询 D、数据约束 我的答案:A 11、若按功能划分,软件测试的方法通常分为白盒测试方法和(黑盒测试方法)。 12、数据库系统的三级模式分别为(级联)模式、内部级模式与外部级模式。 13、在最坏情况下,冒泡排序的时间复杂度为(N+1/2)。 14、在面向对象方法中,信息隐蔽是通过对象的(封装)性来实现的。 15、关系模型的数据操纵既是建立在关系上的数据操纵,一般有(插入)、增加、删除、和修改四种操作。 16、TIME()的返回值的数据类型是(String)类型。 17、编写SQL语句 1)、创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话 我的答案: create table student( studentCardNo number(2) primary key, name char(10), age number(2), sex char(2) check(sex in (‘男’,’女’)), address varchar2(100), tel number(2) ) 2)、修改学生表的结构,添加一列信息,学历 我的答案: alter table student add(xueli varchar2(20)); 3)、修改学生表的结构,删除一列信息,家庭住址 我的答案: alter table student drop column address; 4)、向学生表添加如下信息: 学号 姓名 年龄 性别 联系电话 学历 1 A 22 男 123456 小学 2 B 21 男 119 中学 3 C 23 男 110 高中 4 D 18 女 114 大学 我的答案: insert into student values(‘&1’,’&2’,’&3’); 一次一次添加 5)修改学生表的数据,将电话号码以11开头的学员的学历改为“大专” 我的答案: update student set xueli=”大专” where tel like 11%; 6)删除学生表的数据,姓名以C开头,性别为‘男’的记录删除 我的答案: delete student where name like C% or sex=”男”; 7)查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号显示出来 我的答案: select name,studentCardNo from student where age<22 and xueli=”大专”; 8)查询学生表的数据,查询所有信息,列出前25%的记录 我的答案: select top*0.25 from student; 9)查询出所有学生的姓名,性别,年龄降序排列 我的答案: select name,sex,age from student where age desc; 10)按照性别分组查询所有的平均年龄 我的答案: select avg(age) from student group by sex; 18、什么是存储过程?为什么存储过程要比单纯的SQL语句执行起来要快? 我的答案: 存储过程算是一种优化查询需要比单存SQL语句执行的要快 19、两张关联表,删除主表中已经在副表中没有的信息 我的答案 delete from fubiao a where a.fid not in(select id from zhubiao) 20、程序题: 用1、2、2、3、4、5这六个数字,用java或你熟悉的语言,打印出所有不同的排列,如:512234、412345等,要求:“4”不能再第三位,“3”与“5”不能相连。并将这些数据按从小到大输出。 我的答案 我的写的不好 没贴下 笔试的时候没写全 21、String 和 StringBuffer的区别 我的答案 String定长 StringBuffer 变长 22、&和&&的区别 我的答案 &短路与 &&逻辑与 网上答案: & 是位运算符,表示按位与运算, && 是逻辑运算符,表示逻辑与(and)。 23、final,finally,finalize的区别 我的答案 Final静变量关键字,finally异常关键字,finalize 网上答案 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法, 可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 24、数组有没有length()这个方法?String有没有length()这个方法? 我的答案: 数组没有length()这个方法,有length的属性。 String有length()这个方法。 25、是否可以继承String类? 我的答案: 不可以 解释的很乱 26、说出数据连接池的工作机制是什么? 我的答案: 反正解释的很乱我感觉 27、垃圾回收的优点和原理。并考虑2种回收机制。 我的答案: 动态回收 解释的很乱 网上答案: Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解, 它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念, 只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。 垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有 使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。 回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。 28、你所知道的集合类都有哪些?区别?主要方法? 我的答案: Arraylist 非线性的、Vertor线性的 29、JSP的内置对象及方法。 我的答案: Page,exception,out,page content,application,request,reponse,session,config 30、页面间对象传递的方法。 我的答案: 那几个方法都写错了 31、你知道Request对象的主要方法有哪些? 32、J2EE是技术还是平台还是框架? 我的答案: J2EE是技术也是平台 网上答案: J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。 J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。 33、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种(例如GBK编码类型)编码的字符串? Request encording(“GBK”) 34、j2ee常用的设计模式?说明工厂模式。 Gof23种设计模式 工厂模式:Factory 网上答案: Java中的23种设计模式: Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式), Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式), Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式), Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式), Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式), Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式), Observer(观察者模式), State(状态模式), Strategy(策略模式), Template Method(模板方法模式), Chain Of Responsibleity(责任链模式) 工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例, 通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。 首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。 然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。 当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。 35、JSP四种会话跟踪技术 我的答案: Application cookie session 36、排序都有哪几种方法?请举例 冒泡 选择 快序 二分查找 网上答案: 排序的方法有:插入排序(直接插入排序、希尔排序), 交换排序(冒泡排序、快速排序), 选择排序(直接选择排序、堆排序), 归并排序,分配排序(箱排序、基数排序) 快速排序的伪代码。 //使用快速排序方法对a[ 0 :n- 1 ]排序 从a[ 0 :n- 1 ]中选择一个元素作为m i d d l e,该元素为支点 把余下的元素分割为两段left 和r i g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点 递归地使用快速排序方法对left 进行排序 递归地使用快速排序方法对right 进行排序 所得结果为l e f t + m i d d l e + r i g h t 37、关于模块间的设计原则? 规范要一样 38、项目过程一般是怎样的?你参加过几个项目开发?参加过的项目流程是怎样的?自己负责与人合作工作内容及自我评价? 从需求调研——设计开发——实施 参加过网站的实施 模板的制作 39、tomcat自动关闭常见原因? 我的答案: 现在没遇到过 40、如何设置TOMCAT内存和连接数? 我的答案: Tomcat群集 41、你如何理解Tomcat是什么? 我的答案: Tomcat是JSP Servlet 容器恰当的说 42、静态变量和实例变量的区别? 我的答案: 静态变量域用final修饰,每次都被调用 实例变量则不会 43、IE、FF下面CSS的解释区别 我的答案: 自己编的 44、web前端技术你了解哪些技术? 我的答案: JAVAScript,CSS,DIV,Ajax,Ajax框架,DWR,dojo,jguery 45、什么是报表?什么是报表控件,作用是什么?你了解哪些报表工具? 我的答案: 解释的很乱 46、你了解的那些统计图表类型? 我的答案: 自己编的 47、Flex与数据库连接的三种方式? 我的答案: 自己编的 ------------------------------------------------------- 我答错的、 错在哪里? 没答上的帮忙解答下? 感激了 !
引发了未经处理的异常:读取访问权限冲突。 this->**matrix** 是 0xCDDDCDDE。
# 可从后往前看,来自学生党的求助,缺的都是iostream ## #include "pch.h", ## #include "Graph.h" Edge::Edge() { from = -1; to = -1; weight = 0; } Edge::Edge(int f, int t, int w) { from = f; to = t; weight = w; } Graph::Graph() { } Graph::Graph(int numVert) { numVertex = numVert; numEdge = 0; Indegree = new int[numVertex]; Mark = new int[numVertex]; for (int i = 0; i < numVertex; i++) { Mark[i] = UNVISITED; Indegree[i] = 0; } } Graph::~Graph() { delete[] Mark; delete[] Indegree; } bool Graph::IsEdge(Edge oneEdge) { if (oneEdge.weight > 0 && oneEdge.weight < INFINITYS && oneEdge.to >= 0) return true; else return false; } void Graph::clearVisitedMark() { for (int i = 0; i < numVertex; i++) Mark[i] = UNVISITED; } #pragma once #include <iostream> using namespace std; #define MAX 102 #define INFINITYS 65536 #define UNVISITED 0 #define VISITED 1 #ifndef GRAPH_H #define GRAPH_H class Edge { public: Edge(); Edge(int f, int t, int w); ~Edge() {} bool operator < (const Edge &arg) { return (this->weight < arg.weight); } bool operator == (const Edge &arg) { return (this->weight == arg.weight); } bool operator > (const Edge &arg) { return (this->weight > arg.weight); } bool operator <= (const Edge &arg) { return (this->weight <= arg.weight); } bool operator >= (const Edge &arg) { return (this->weight >= arg.weight); } int from; int to; int weight; }; class Graph { public: Graph(); Graph(int numVert); virtual ~Graph(); int VerticesNum() { return numVertex; } int EdgesNum() { return numEdge; } bool IsEdge(Edge oneEdge); int FromVertex(Edge oneEdge) { return oneEdge.from; } int ToVertex(Edge oneEdge) { return oneEdge.to; } int Weight(Edge oneEdge) { return oneEdge.weight; } void clearVisitedMark(); /*virtual Edge FirstEdge(int oneVertex) = 0; virtual Edge NextEdge(Edge preEdge) = 0; virtual void setEdge(int from, int to, int weight) = 0; virtual void delEdge(int from, int to) = 0;*/ protected: int numVertex; int numEdge; int * Mark; int * Indegree; }; #endif // !GRAPH_H #include "pch.h" #include "Graphm.h" Graphm::Graphm() { } Graphm::~Graphm() { for (int i = 0; i < numVertex; i++) delete[] matrix[i]; delete[] matrix; } Edge Graphm::FristEdge(int oneVertex) { Edge myEdge; myEdge.from = oneVertex; for (int i = 0; i < numVertex; i++) if (matrix[oneVertex][i] != 0 && matrix[oneVertex][i] < INFINITYS) { myEdge.to = i; myEdge.weight = matrix[oneVertex][i]; break; } return myEdge; } Edge Graphm::NextEdge(Edge preEdge) { Edge myEdge; myEdge.from = preEdge.from; if (preEdge.to < numVertex) for (int i = preEdge.to + 1; i < numVertex; i++) if (matrix[preEdge.from][i] != 0 && matrix[preEdge.from][i] < INFINITYS) { myEdge.to = i; myEdge.weight = matrix[preEdge.from][i]; break; } return myEdge; } void Graphm::setEdge(int from, int to, int weight) { if (matrix[from][to] <= 0) { numEdge++; Indegree[to]++; } matrix[from][to] = weight; } void Graphm::delEdge(int from, int to) { if (matrix[from][to] > 0) { numEdge--; Indegree[to]--; } matrix[from][to] = 0; } void Graphm::InitWith2DimArray(int * mat, int row_col) { for (int i = 0; i < row_col; i++) for (int j = 0; j < row_col; j++) { cout << *(mat + i * row_col + j) << ", \n"; this->setEdge(i, j, *(mat + i * row_col + j)); } cout << endl; } void Graphm::DFS_ConnectedSubGraph(int n) { this->Mark[n] = VISITED; Visit(n); for (Edge e = this->FristEdge(n); this->IsEdge(e); e = this->NextEdge(e)) if (this->Mark[this->ToVertex(e)] == UNVISITED) DFS_ConnectedSubGraph(this->ToVertex(e)); } void Graphm::BFS_ConnectedSubGraph(int n) { queue<int> Q; Visit(n); Mark[n] = VISITED; Q.push(n); while (! Q.empty()) { int u = Q.front(); Q.pop(); for(Edge e = FristEdge(u); IsEdge(e); e = NextEdge(e)) if (Mark[ToVertex(e)] == UNVISITED) { Visit(ToVertex(e)); Mark[ToVertex(e)] = VISITED; Q.push(ToVertex(e)); } } } #pragma once #include "Graph.h" #include <queue> #ifndef GRAGHM_H #define GRAGHM_H class Graphm : public Graph { public: Graphm(); Graphm(int n) : Graph(n) { int i; matrix = (int **) new int *[numVertex]; for (i = 0; i < numVertex; i++) matrix[i] = new int[numVertex]; for (i = 0; i < numVertex; i++) for (int j = 0; j < numVertex; j++) matrix[i][j] = 0; } ~Graphm(); Edge FristEdge(int oneVertex); Edge NextEdge(Edge preEdge); void setEdge(int from, int to, int weight); void delEdge(int from, int to); void InitWith2DimArray(int * mat, int row_col); void DFS_ConnectedSubGraph(int n); void BFS_ConnectedSubGraph(int n); void Visit(int n) { cout << 'n' << n << " \n"; } //private: int ** matrix; }; #endif // !GRAGHM_H // main.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include "pch.h" #include <iostream> #include "Floyd.h" const int const vertexesNum = 5; int matrix1[vertexesNum][vertexesNum] = { 0 , 8 , INFINITYS, 4 , 3 , INFINITYS, 0 , INFINITYS, INFINITYS, 8 , 6 , 7 , 0 , 10 , 2 , INFINITYS, INFINITYS, INFINITYS, 0 , INFINITYS, 5 , 5 , INFINITYS, INFINITYS, 0 }; int BrokerToPassRomour(Graphm & G, Dist ** D); int main() { std::cout << "Hello World!\n"; Graphm mat[vertexesNum]; mat->InitWith2DimArray((int *)matrix1, vertexesNum); cout << endl; cout << "深度优先周游:\n" << endl; int i; for (i = 0; i < vertexesNum; i++) { mat->clearVisitedMark(); mat->DFS_ConnectedSubGraph(i); cout << endl; } cout << endl; cout << "广度优先周游:\n" << endl; for (i = 0; i < vertexesNum; i++) { mat->clearVisitedMark(); mat->BFS_ConnectedSubGraph(i); cout << endl; } cout << endl; Dist ** floydResult; createFloydResult(floydResult, vertexesNum); int startVertex = BrokerToPassRomour(mat[0], floydResult); cout << "所有顶点间的最短路径:\n" << endl; printAllDistances(floydResult, vertexesNum); cout << endl; for (i = 0; i < vertexesNum; i++) for (int j = 0; j < vertexesNum; j++) if (i != j) printOnePath(floydResult, vertexesNum, i, j); cout << endl; deleteFloydResult(floydResult, vertexesNum); if (startVertex >= 0) cout << "谣言应从 n \n" << startVertex << " 点开始传播!\n" << endl; else cout << "图不连通,问题无解 \n" << endl; return 0; } // 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单 // 调试程序: F5 或调试 >“开始调试”菜单 // 入门提示: // 1. 使用解决方案资源管理器窗口添加/管理文件 // 2. 使用团队资源管理器窗口连接到源代码管理 // 3. 使用输出窗口查看生成输出和其他消息 // 4. 使用错误列表窗口查看错误 // 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目 // 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件 int BrokerToPassRomour(Graphm & G, Dist ** D) { int * max; max = new int[G.VerticesNum()]; int min = 0; int pos = 0; int i = 0; for (i = 0; i < G.VerticesNum(); i++) max[i] = -1; Floyd(G, D); for (i = 0; i < G.VerticesNum(); i++) for (int j = 0; j < G.VerticesNum(); j++) if (D[i][j].length > max[i]) max[i] = D[i][j].length; min = max[0]; for (i = 1; i < G.VerticesNum(); i++) if (max[i] < min) { min = max[i]; pos = i; } if (min == INFINITYS) { cout << "此图不连通 \n" << endl; return -1; } return pos; } // pch.cpp: 与预编译标头对应的源文件;编译成功所必需的 #include "pch.h" // 一般情况下,忽略此文件,但如果你使用的是预编译标头,请保留它。 // 入门提示: // 1. 使用解决方案资源管理器窗口添加/管理文件 // 2. 使用团队资源管理器窗口连接到源代码管理 // 3. 使用输出窗口查看生成输出和其他消息 // 4. 使用错误列表窗口查看错误 // 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目 // 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件 #ifndef PCH_H #define PCH_H // TODO: 添加要在此处预编译的标头 #endif //PCH_H #include "pch.h" #include "Floyd.h" void createFloydResult(Dist **& D, int vertexesNum) { D = new Dist *[vertexesNum]; for (int i = 0; i < vertexesNum; i++) D[i] = new Dist[vertexesNum]; } void deleteFloydResult(Dist **& D, int vertexesNum) { for (int i = 0; i < vertexesNum; i++) delete[] D[i]; delete[] D; D = NULL; } void printAllDistances(Dist ** D, int vertexesNum) { for (int i = 0; i < vertexesNum; i++) { for (int j = 0; j < vertexesNum; j++) cout << D[i][j].length << " , \n"; cout << endl; } } void printOnePath(Dist ** D, int vertexesNum, int start, int end) { if (D[start][end].length == INFINITYS) return; int * path = new int[vertexesNum]; int vertexCount = 0; int tail = end; while (tail != start) { path[vertexCount++] = D[start][tail].pre; tail = D[start][tail].pre; } cout << "n" << start << "->n" << end << " : "; for (int i = vertexCount - 1; i >= 0; i--) cout << "n" << path[i] << "->"; cout << "n" << end << endl; delete[] path; } void Floyd(Graphm & G, Dist ** D) { int i, j, v; D = new Dist *[G.VerticesNum()]; for (i = 0; i < G.VerticesNum(); i++) D[i] = new Dist[G.VerticesNum()]; for (i = 0; i < G.VerticesNum(); i++) for (j = 0; j < G.VerticesNum(); j++) { if (i == j) { D[i][j].length = 0; D[i][j].pre = i; } else { D[i][j].length = INFINITYS; D[i][j].pre = -1; } } for (i = 0; i < G.VerticesNum(); i++) for (Edge e = G.FristEdge(i); G.IsEdge(e); e = G.NextEdge(e)) { D[i][G.ToVertex(e)].length = G.Weight(e); D[i][G.ToVertex(e)].pre = i; } for (v = 0; v < G.VerticesNum(); v++) for (i = 0; i < G.VerticesNum(); i++) for (j = 0; j < G.VerticesNum(); j++) if (D[i][j].length > (D[i][v].length + D[v][j].length)) { D[i][j].length = D[i][v].length + D[v][j].length; D[i][j].pre = D[v][j].pre; } } #pragma once #include "Graphm.h" #ifndef FLOYD_H #define FLOYD_H class Dist { public: Dist() {} ~Dist() {} int index; int length; int pre; bool operator < (const Dist &arg) { return (length < arg.length); } bool operator == (const Dist &arg) { return (length == arg.length); } bool operator > (const Dist &arg) { return (length > arg.length); } bool operator <= (const Dist &arg) { return (length <= arg.length); } bool operator >= (const Dist &arg) { return (length >= arg.length); } }; void createFloydResult(Dist ** &D, int vertexesNum); void deleteFloydResult(Dist ** &D, int vertexesNum); void printAllDistances(Dist ** D, int vertexesNum); void printOnePath(Dist ** D, int vertexesNum, int start, int end); void Floyd(Graphm &G, Dist ** D); #endif // !FLOYD_H ********************************************************************* "Graphm.cpp": #include "pch.h" #include "Graphm.h" Graphm::Graphm() { } Graphm::~Graphm() { for (int i = 0; i < numVertex; i++) delete[] matrix[i]; delete[] matrix; } Edge Graphm::FristEdge(int oneVertex) { Edge myEdge; myEdge.from = oneVertex; for (int i = 0; i < numVertex; i++) if (matrix[oneVertex][i] != 0 && matrix[oneVertex][i] < INFINITYS) { myEdge.to = i; myEdge.weight = matrix[oneVertex][i]; break; } return myEdge; } Edge Graphm::NextEdge(Edge preEdge) { Edge myEdge; myEdge.from = preEdge.from; if (preEdge.to < numVertex) for (int i = preEdge.to + 1; i < numVertex; i++) if (matrix[preEdge.from][i] != 0 && matrix[preEdge.from][i] < INFINITYS) { myEdge.to = i; myEdge.weight = matrix[preEdge.from][i]; break; } return myEdge; } void Graphm::setEdge(int from, int to, int weight) { if (matrix[from][to] <= 0) { numEdge++; Indegree[to]++; } matrix[from][to] = weight; } void Graphm::delEdge(int from, int to) { if (matrix[from][to] > 0) { numEdge--; Indegree[to]--; } matrix[from][to] = 0; } void Graphm::InitWith2DimArray(int * mat, int row_col) { for (int i = 0; i < row_col; i++) for (int j = 0; j < row_col; j++) { cout << *(mat + i * row_col + j) << ", \n"; this->setEdge(i, j, *(mat + i * row_col + j)); } cout << endl; } void Graphm::DFS_ConnectedSubGraph(int n) { this->Mark[n] = VISITED; Visit(n); for (Edge e = this->FristEdge(n); this->IsEdge(e); e = this->NextEdge(e)) if (this->Mark[this->ToVertex(e)] == UNVISITED) DFS_ConnectedSubGraph(this->ToVertex(e)); } void Graphm::BFS_ConnectedSubGraph(int n) { queue<int> Q; Visit(n); Mark[n] = VISITED; Q.push(n); while (! Q.empty()) { int u = Q.front(); Q.pop(); for(Edge e = FristEdge(u); IsEdge(e); e = NextEdge(e)) if (Mark[ToVertex(e)] == UNVISITED) { Visit(ToVertex(e)); Mark[ToVertex(e)] = VISITED; Q.push(ToVertex(e)); } } } ************************************************************** 第51行 if (matrix[from][to] <= 0) //void Graphm::setEdge(int from, int to, int weight) 引发了未经处理的异常:读取访问权限冲突。 this->matrix 是 0xCDDDCDDE
我想制作一个电子阅读器用stm32f103rct6,求住制作流程,网上有一个,不是很懂求指教
这是我从网上down的方法,有点不懂,关键就是编程还有MF RC522模块设计,求大虾指教,谢谢 1 硬件设计 1.1 硬件结构设计 RFID阅读器基于STM32单片机设计,芯片型号选择为STM32F103RBT6。该芯片为LQFP64封装, 内部有128 KB Flash和20 KB RAM,采用32位的ARM CortexTM-M3内核, 最高支持主频72 MHz,拥有2个SPI接口、 2个USART接口、1个USB接口、2个I2C接口和7个定时器。支持SWD和JTAG调试模式及IAP和ISP编程。 STM32单片机支持J-Link在线调试,J-Link调试有两种模式:JTAG调试和SWD调试。在线调试的便捷性,可以极大缩短程序的开发周期,提高开发效率。本系统采用的调试模式为SWD模式,只需2根SWDIO和SWCLK信号线,相比JTAG模式更加节约I/O口资源。阅读器的硬件结构框图如图1所示。 1.2 电源模块设计 系统可使用直流电源或电池供电,外部直流电源电压为8.4 V;电池电压为7.2 V,2 600 mA/h的锂电池。电源模块设计原理图如图2所示。 电源模块工作原理:当插座J1连接外部直流电源时,电流可经过D4给电池充电,直流电源经开关JP1连接IRF7404的G极,使IRF7404的D极与S极断开,则系统使用外部直流电源供电;当不使用直流电源、按下开关时,D4可将CD_POWER与电池断开,IRF7404的G极为低电平, IRF7404导通, 则系统使用电池供电。SYS_ POWER电压经过LM2576S-3.3转换为3.3 V为系统的各模块供电。 1.3 MF RC522模块设计 MF RC522是阅读器的读卡芯片,工作频率为13.56 MHz,工作模式支持ISO 14443A标准,芯片内部驱动器可以直接驱动阅读器的天线,无需其他电路。MF RC522具有3种接口模式:SPI接口模式、UART模式和I2C总线模式[3]。其中SPI模式的通信速度最快,可达到10 Mb/s。 MF RC522与主机接口模式有关的两个引脚为IIC和EA:当IIC引脚拉高时,表示当前模式为I2C模式,若IIC引脚为低电平时,再通过EA引脚电平来区分。EA为高电平时,表示SPI模式;为低电平时,则表示UART模式[4]。本设计中MF RC522与MCU采用SPI通信,与AT45DB161共享一个MCU的SPI2接口。 在系统中,MF RC522和天线电路一起作为单独模块使用,以便于更换与维修。天线模块与主板之间通过插座连接。 天线是阅读器中的一个重要组成部分。其作用是向外发射一组固定频率的电磁波,为射频卡提供能量、传递数据。 本系统中使用的是PCB天线,天线的设计关系到阅读器的读写距离,甚至关系到阅读器是否能正常与射频卡通信。RC522的天线设计须注意以下两点:(1)为了让射频卡能获取足够大的能量驱动本身的集成电路,设计天线时应该保证向外辐射足够大的电磁波; (2)为了提高读卡数据的准确性,需要考虑调谐电路的通频带,确保调制信号的准确性。 天线的匹配电路可分为:天线线圈、LC谐振电路和EMC滤波电路。RC522的天线匹配电路如图3所示,其中RQ为品质因素Q的匹配电阻,Lant为天线的电感。 1.4 显示模块设计 阅读器选用2.8英寸的TFT LCD触摸屏。在本系统中移植了GUI模块,使得人机交流界面操作更加便捷、友善。触摸屏为四线电阻屏,使用ADS7843作为A/D转换芯片。ADS7843是内置12位模/数转换、低导通电阻模拟开关的串行接口芯片,模/数转换输出范围0~4 095,工作电压2.7 V~5 V,参考电压VREF为1 V~VCC,转换电压的输入范围为0~VREF,最高转换速率为125 kHz[5]。ADS7843与MCU的接口为SPI1。 驱动层的程序基于硬件平台,主要是为中间服务层提供硬件驱动接口函数,完成底层的硬件操作。编写STM32的内部资源驱动程序时,调用了ST公司的固件库函数。 中间服务层主要是为上层应用程序提供库支持和服务接口。中间服务层的程序在驱动层程序上开发,并封装驱动程序的接口。如FATS文件系统是在AT45DB161的驱动程序上移植,为上层的应用程序提供文件创建、写入、读出、删除等服务;GUI模块是在LCD显示驱动程序上开发,将LCD驱动的画点画线函数封装成不同的控件,在控件上加载相应的数据结构,为界面应用程序提供控件的创建、销毁等操作。 应用层程序是面向用户,通过调用中间服务函数和库函数来完成相应的数据处理和控制功能等。 2.2 Free RTOS实时操作系统 Free RTOS是一个轻量级的操作系统,基本满足较小系统的需要。该操作系统完全免费且源码公开,同时具有可移植、可裁减、调度策略灵活的特点。 在本设计中Free RTOS的任务之间的关系如图5所示。 2.3 GUI模块 GUI模块是一个中间服务层程序,为显示应用程序提供控件显示服务。如控件的显示位置、尺寸、颜色以及控件响应的回调函数入口地址等。在本系统中GUI控件包含有文本框、编辑框、进度条、图像框、下拉列表、按钮等。每个控件都可以注册一个回调函数,这个函数对应了该控件的响应功能函数。 2.4 FAT文件系统 FatFs文件系统是中间服务层程序,建立在AT45DB161驱动程序上,文件系统提供了磁盘I/O接口和应用程序接口。磁盘I/O接口函数位于diskio.c文件,常用的接口函数有读磁盘disk_read()和写磁盘disk_write()。这两个函数分别调用AT45DB161驱动程序的读扇区和写扇区函数。在文件系统中一个扇区的大小为512 B,与AT45DB161的页大小一致。 为了使FatFs文件系统与Windows的文件系统兼容,要使用FAT32格式来格式化磁盘。f_open()函数与f_close()函数必须要成对出现,即打开一个文件操作完成后必须要关闭这个文件。在对文件进行操作前必须先调用f_mount(0,&Fs)函数对工作区进行注册,操作完成后也需要调用f_mount(0,NULL)函数对工作区进行注销。 2.5 MF RC522驱动程序流程 本系统中使用的射频卡为Mifare1 S50,也简称为M1卡,该卡有16个扇区,每个扇区有4个块,每个块可存储16 B的数据。MF RC522对M1卡进行读写控制,分别有寻卡、防碰撞、选卡、认证、读块和写块等过程。 MF RC522驱动程序流程如下: (1)寻卡:寻找感应区内所有符合ISO14443A标准的卡,寻卡成功后,返回卡的类型。 (2)防碰撞:通过防碰撞命令查看多张M1卡之间是否发生碰撞,若发生碰撞,使用防碰撞算法进行处理;若未发生碰撞,则MF RC522与M1卡进行通信,如果通信成功,读出M1卡中的序列号。 (3)选卡:根据M1卡的序列号进行选卡。 (4)密码验证:密码验证模式有验证A密钥和验证B密钥,通过这两种模式来验证块地址、密码和卡片序列号。 (5)读数据块:根据提供的块地址读取块数据。 (6)写数据块:根据提供的块地址写入块数据,操作完成后命令M1卡进入休眠状态。 2.6 AT45DB161D驱动程序 AT45DB161D是一个外部Flash存储器,拥有2 MB的容量,分为4 096个页,可配置为每页512 B,还拥有2个512 B的缓冲区。在主存储器正在编程时,缓冲区允许接收数据,且支持数据流式写入。AT45DB161的初始化包括STM32的引脚配置和SPI2接口配置,初始化之后才能进行读写操作。读写页操作流程如下: (1)读页操作流程 ①检测AT45芯片是否忙。若忙,则继续读忙,直到芯片空闲;若芯片空闲,则执行流程②。 ②向AT45芯片写入命令0x53和页地址。0x53命令是将Flash中整页的数据读到缓冲区1中。 ③向AT45芯片写入命令0xD4和页偏移地址及数据长度。0xD4命令是读缓冲区1中的数据。 ④读页操作完成。 (2)写页操作流程 ①检测AT45芯片是否忙。若忙,则继续读忙,直到芯片空闲;若芯片空闲,则执行流程②。 ②向AT45芯片写入命令0x84、页偏移地址及需要写入的数据。0x84命令是将数据写到缓冲区1中。 ③向AT45芯片写入命令0x83和页地址。0x83命令是将缓冲区1中的数据写到Flash指定的页。使用0x83命令,写入前不需要对页进行擦除操作。 ④写页操作完成。 3 性能测试与实验分析 3.1手持式阅读器的功能测试 需要测试的功能有对M1卡读写、文件读写、与PC机数据通信等功能。为了便于测试上述功能,将本设计应用在校园消费系统上进行测试。测试步骤如下: (1)用串口线将RFID阅读器与PC机相连。运行PC机的上位机程序,设置串口参数为:波特率9 600 b/s,数据位8 bit,停止位1 bit,无校验位,无流控制。 (2)对M1卡读写功能测试。通过上位机软件发送指令和数据至阅读器,阅读器将指定数据写入M1卡。然后再将M1卡数据读出,传回给上位机软件显示,并比较写入数据和读出数据,如图6所示。 (3)文件读写测试。由于读M1卡的数据以文件的形式存放在阅读器的外部Flash中,该Flash由文件系统管理。用USB线连接阅读器和PC机,阅读器以盘符的形式在PC机上显示,从磁盘中将文件复制到PC机上,用上位机软件打开读出软件,记录测试数据。 (4)与PC机数据通信测试。以上两项测试通过则表明阅读器能与PC机进行正常通信。 3.2 性能测试与分析 系统的性能测试主要是锂电池的续航时间及RFID有效读卡距离等。系统性能测试如表1所示。 (1)锂电池的续航时间需要分别测试最长待机时间和连续工作时间。 ①最长待机时间测试:将锂电池充满电,阅读器使用电池供电,将阅读器开机而不使用,记录待机时间。 ②连续工作时间测试:将锂电池充满电,阅读器使用电池供电,编写一个测试程序,让阅读器定时每30 s读取M1卡信息。记录工作时间。 ③用万用表分别测量阅读器的待机消耗电流和工作消耗电流,并记录电流值。 (2)RFID有效读卡距离。将阅读器固定不动,M1卡平行放在阅读器天线平面的正上方200 mm处,将M1卡缓慢向阅读器移动,直到阅读器能正确读取M1卡中数据为止。测量卡与阅读器天线之间的距离并记录数据。 通过对上述的系统功能、性能进行验证,分析实验测出的相应数据,系统的功能基本能达到了初期预设的技术指标。 本文设计的阅读器有良好的人机交流界面,可通过触控操作,显示屏可显示M1卡中存储信息。经过实验证明,在70 mm的范围内能准确读写M1卡中的数据。该阅读器具有超长待机和低功耗的功能。经过实际功能测试,已成功地将该设计应用于校园消费系统。 专注
Java读取文本数据存到数据库,在方法执行完成后为啥所占用的内存资源没释放?
大致步骤是读取一个包含十六万+行的文档数据,并将数据存放到数据库,但是在该方法执行完成后所占用的内存资源没有被释放,求大神指教~ (这程序是用swing开发的桌面程序,不知是不是跟用了swing有关) 以下代码是核心部分: ``` String sql = "insert into "+tableName+"("+imuField+") values(?,?,?,?,?,?,?,?,?)"; Connection c = JDBCUtil.getConnection(); // 获取数据库连接 try { Statement statement=c.createStatement(); statement.executeUpdate(createTable); // 创建表 System.err.println(tableName+"表创建成功,准备写入数据..."); c.setAutoCommit(false); // 手动提交 PreparedStatement ps= c.prepareStatement(sql); File imuFile= new File(file); List<String> strList=FileIUtils.readLine(imuFile,"utf-8", index, offset); // 读取文件内容 if(strList==null || strList.size()<1) { SwingUtils.warn(jf, null, "选择的文件不存在IMU数据"); } Integer n=0; Integer not=0; Integer i= 0; StringBuilder utcTime = new StringBuilder(); String[] strs = new String[1024]; long begin = System.currentTimeMillis(); // 记录开始时间 jProgressBar.setMaximum(strList.size()); // 加载进度条 for(String strLin: strList) { n++; i++; jProgressBar.setValue(n); // 加载进度条 strs = strLin.split("\t"); if(strs[0]!=null && Utils.isContainNumber(strs[0]) && strs[1]!=null && Utils.isContainNumber(strs[1]) && strs[2]!=null && Utils.isContainNumber(strs[2]) && strs[3]!=null && Utils.isContainNumber(strs[3]) && strs[4]!=null && Utils.isContainNumber(strs[4]) && strs[5]!=null && Utils.isContainNumber(strs[5]) && strs[6]!=null && Utils.isContainNumber(strs[6]) && strs[7]!=null && Utils.isContainNumber(strs[7]) && strs[8]!=null && Utils.isContainNumber(strs[8])) { Date GpsDate = Utils.StringToDate(strs[1]+" "+strs[0]); // GPS时间处理(0,1元素拼接起来为GPS时间) ps.setDate(1,new java.sql.Date(GpsDate.getTime())); ps.setLong(2, GpsDate.getTime()); ps.setString(3, strs[2]); ps.setString(4, strs[3]); ps.setString(5,strs[4]); ps.setString(6, strs[5]); ps.setString(7, strs[6]); ps.setString(8, strs[7]); utcTime.setLength(0); utcTime.append(strs[1]).append(" "+strs[8]); ps.setString(9, utcTime.toString()); ps.addBatch(); if(i>=100000) { // 累计到十万条时执行SQL i=0; ps.executeBatch(); c.commit(); } }else { not++; continue; } } if(ps!=null) { ps.executeBatch(); ps.close(); c.commit(); } System.out.println("插入完成,耗时约 "+(System.currentTimeMillis()-begin)/1000+" 秒"); } catch (SQLException e) { e.printStackTrace(); }finally { JDBCUtil.closeConnection(c); // 回收连接 } ``` 以下是程序启动时内存占用情况: ![程序启动时](https://img-ask.csdn.net/upload/201811/27/1543303587_698231.png) 以下是程序执行SQL方法时内存的占用情况: ![运行中](https://img-ask.csdn.net/upload/201811/27/1543303605_900371.png) 以下是该方法执行完成后内存占用情况(与运行中差不多,或更高): ![完成后](https://img-ask.csdn.net/upload/201811/27/1543303622_903827.png)
invalid null pointer!
![图片说明](https://img-ask.csdn.net/upload/201705/07/1494168216_985520.png) ``` // win_cDemo.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "tinyxml.h" #include "NLPIR.h" #include <stdio.h> #include <stdlib.h> #include<windows.h> #include <fstream> #include <iostream> #include <string> #include <hash_map> #include <WinSock.h> #include <mysql.h> using namespace std; #pragma comment(lib,"tinyxml.lib") #pragma comment(lib, "NLPIR.lib") #pragma comment(lib, "ws2_32.lib") #pragma comment(lib, "libmysql.lib") //存放字典数据的hashMap hash_map<string,float> hmDic; //计算运行时间的变量 DWORD start_time,end_time; //mysql文件 MYSQL mysqlData; string user,passwd; void processDictionary(string filename,float weight) { ifstream fin(filename.c_str()); if( !fin ) { cout << "Error opening " << filename << " for input" << endl; return; } string buf; while(fin>>buf) { hmDic.insert(make_pair(buf,weight)); } cout<<"Process Dictionary "<<filename<<" Success"<<endl; } void processConfigure() { //获取XML对象 TiXmlDocument doc; //装载文件 doc.LoadFile("configure.xml"); //获取dics TiXmlElement *dicsLevel = (doc.RootElement())->FirstChildElement(); //获取dic TiXmlElement *dicLevel=dicsLevel->FirstChildElement(); TiXmlElement *pathLevel,*weightLevel; start_time = GetTickCount64();//获取开始时间 cout<<"Process Begin, Please Wait Patient"<<endl; while (dicLevel != NULL)// { pathLevel = dicLevel->FirstChildElement();//获取path weightLevel = pathLevel->NextSiblingElement();//获取weight //cout<<pathLevel->GetText()<<":"<<weightLevel->GetText()<<endl; //处理文本 string filename =pathLevel->GetText(); float weight = atof(weightLevel->GetText()); //cout<<filename<<"|"<<weight+1<<endl; processDictionary(filename,weight); dicLevel=dicLevel->NextSiblingElement(); } end_time = GetTickCount64();//获取结束时间 cout<<"Process All Dictionary Use "<<end_time-start_time<<" ms"<<endl; //获取mysql TiXmlElement *mysqlLevel = dicsLevel->NextSiblingElement(); TiXmlElement *userLevel,*passwdLevel; userLevel = mysqlLevel->FirstChildElement();//获取user passwdLevel = userLevel->NextSiblingElement();//获取passwd user = userLevel->GetText(); passwd = passwdLevel->GetText(); } int sentenceAnalysis(string sSentence) { try { const result_t *pVecResult; int nCount; //对句子进行分词 pVecResult=NLPIR_ParagraphProcessA(sSentence.c_str(),&nCount); float totalNum = 0;//句子总的情感值 float tmpNum = 0;//每个字句的情感值 float tmpD = 1;//用来存放临时副词的变量 bool isTmpDSet = 0;//是否有副词被设置 for (int i=0;i<nCount;i++) { string ciXin = pVecResult[i].sPOS;//词性 //不存在词性则跳过 if(ciXin.empty()) { continue; } //词性中包含'w'(即标点符号),表示当前的一个子句已经处理完毕 if(ciXin[0]=='w') { totalNum += tmpNum; tmpNum = 0; continue; } //如果不是形容词a,副词d,动词v,名词n,数词m,则不处理 if(!(ciXin=="a"||ciXin=="d"||ciXin=="v"||ciXin=="n"||ciXin=="m")) continue; string tmp = sSentence.substr(pVecResult[i].start,pVecResult[i].length); auto itr=hmDic.find(tmp); if(itr!=hmDic.end()) { if(ciXin=="d")//如果副词后面接副词,进行多重复合 { tmpD *= itr->second; isTmpDSet = 1; } else if(isTmpDSet)//如果之前存在副词 { tmpNum += tmpD * itr->second; isTmpDSet = 0; } else { tmpNum += itr->second;//不存在副词的影响,直接加减 } } } return totalNum; } catch(...) { //对出错的情况进行默认处理 return 0; } } void initMysql() { try { mysql_init(&mysqlData); // localhost:服务器 root为账号,123456为密码 test为数据库名 3306为端口 if(!mysql_real_connect(&mysqlData, "localhost","root","","fooddata",3306,NULL,0)) { cout<<"database connect fail"<<endl; exit(1); } else cout<<"database connect success"<<endl; } catch (...) { exit(1); } } int main() { //初始化分词器 if(!NLPIR_Init()) { printf("Init fails\n"); return -1; } //首先读取配置文件,建立字典数据 processConfigure(); //初始化mysql数据库 initMysql(); //存储每一行数据 string text; //查询所有结果 string sqlstr = "SELECT id,text,kind FROM comment"; MYSQL_RES *result = NULL; if (0 == mysql_query(&mysqlData, sqlstr.c_str())) { //一次性取得数据集 result = mysql_store_result(&mysqlData); //获取每一行 MYSQL_ROW row = NULL; row = mysql_fetch_row(result); start_time = GetTickCount64(); while (NULL != row) { text = row[1]; //对每个句子进行分词 int answer = sentenceAnalysis(text); if(answer>0) cout<<"正面评价"<<endl; else if(answer<0) cout<<"负面评价"<<endl; else cout<<"中性评价"<<endl; row = mysql_fetch_row(result); } end_time = GetTickCount64(); cout<<"Text all rows use "<<end_time-start_time<<" ms"<<endl; } //关闭数据库 // mysql_close(&mysqlData); //释放分词器资源 NLPIR_Exit(); return 0; } ``` 求大神看看这个怎么修改???
用Nginx实现均衡负载效率反而降低,为什么?
我在Win7系统下安装了两个tomcat,一个8080端口,一个8088端口。跑着同样的WEB项目。然后在Win7下用VMWare装了个CentOS6.5虚拟机,在该虚拟机上安装并配置了Nginx。然后在该虚拟机上用apache ab进行压力测试,结果用nginx反而比不用差一些。请高手帮助解惑!!! 下面是我的测试方法和结果: [root@localhost local]# ab -n 10000 -c 1000 -H "Authorization: Digest username="cpe", realm="SWACS", nonce="2ef7d7f74e136a548362a488fa1ca753",uri="/SWTMS/acs", qop="auth", nc=00000001, cnonce="1243442698", response="78374f1538516f6055faf0dcab6571a7",opaque="A0720F8F9F1C4EC1B108C201E4660C79"" -p ./inform.txt http://172.16.15.110:8080/SWTMS/acs(这是直接访问tomcat,访问nginx则是把url改成http://172.16.15.111/SWTMS/acs) This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 172.16.15.110 (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: Apache-Coyote/1.1 Server Hostname: 172.16.15.110 Server Port: 8080 Document Path: /SWTMS/acs Document Length: 549 bytes Concurrency Level: 1000 Time taken for tests: 10.269 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Total transferred: 7910000 bytes Total POSTed: 32570000 HTML transferred: 5490000 bytes Requests per second: 973.81 [#/sec] (mean) Time per request: 1026.895 [ms] (mean) Time per request: 1.027 [ms] (mean, across all concurrent requests) 下面是我的Nginx配置: #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; error_log logs/error.log info; pid logs/nginx.pid; worker_rlimit_nofile 65535; events { worker_connections 65535; multi_accept on; use epoll; } http { include mime.types; default_type application/octet-stream; charset utf-8; #默认编码 server_names_hash_bucket_size 128; #服务器名字的hash表大小 client_header_buffer_size 32k; #上传文件大小限制 large_client_header_buffers 4 64k; #设定请求缓 client_max_body_size 8m; #设定请求缓 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。 fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; #gzip模块设置 gzip on; #开启gzip压缩输出 gzip_min_length 1k; #最小压缩文件大小 gzip_buffers 4 16k; #压缩缓冲区 gzip_http_version 1.1; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0) gzip_comp_level 2; #压缩等级 gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。 gzip_vary on; upstream tomcats { server 172.16.15.110:8088 weight=1; server 172.16.15.110:8080 weight=1; #ip_hash; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; proxy_pass http://tomcats; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 50m; client_body_buffer_size 256k; proxy_connect_timeout 10; proxy_send_timeout 15; proxy_read_timeout 15; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
ssm 框架中能够访问到controller层,return页面时报404
## controller层 package com.qhmu.ssm.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class mainController { @RequestMapping("/inde") public String index(){ for(int i=0;i<10;i++){ System.out.println(i); } return "in"; } @RequestMapping("/abc.do") public String list(){ return "list"; } } ## web.xml配置 <!--1、 启动 spring 的容器 --> <!-- needed for ContextLoaderListener --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- Bootstraps the root web application context before servlet initialization --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 2、前端控制器 --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 3、字符编码过滤器 ,一定要放在所有编码之前的--> <filter> <filter-name>CharacterEncodingFilter</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>forceRequestEncoding</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>forceResponseEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- rest风格的URI ,将普通的post请求转为delete或者put请求--> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> ## springmvc配置 <!-- 1、springmvc配置文件,包含网站跳转逻辑控制,配置 --> <context:component-scan base-package="com.qhmu.ssm.controller" ><!--use-default-filters="false" --> <!-- 只扫描控制器 --> <!-- <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> --> </context:component-scan> <!--2、配置视图解析器,方便页面返回 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 两个标准配置 --> <!-- 将 springmvc不能处理的资源交给Tomcat--> <mvc:default-servlet-handler/> <!-- 能支持springmvc一些更高级的功能,比如:JSR303校验,快捷的ajax请求...映射动态请求 --> <mvc:annotation-driven /> <!-- <mvc:resources mapping="/resources/**" location="/resources/" /> --> </beans> ## spring配置 <!-- 扫描所有除了控制器的包 --> <context:component-scan base-package="com.qhmu"> <!-- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> --> </context:component-scan> <!-- spring配置文件,这里主要配置和业务逻辑相有关的 --> <!-- =======================数据源,事务控制等====================== --> <context:property-placeholder location="classpath:dbconfig.properties"/> <bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="driverClass" value="${jdbc.driverClass}"></property> <property name="user" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!--==================== 配置和mybatis的整合 ==================--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- mybaties全局配置 --> <property name="configLocation" value="classpath:mybaties-config.xml"></property> <property name="dataSource" ref="pooledDataSource"></property> <!--指定mybatis的mapper文件位置 --> <property name="mapperLocations" value="classpath:mapper/*.xml"></property> </bean> <!-- 配置扫描器,将mybaties的mapper接口的实现类加入IOC容器中 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 扫描所有的dao接口的实现,加入IOC容器中 --> <property name="basePackage" value="com.qhmu.ssm.dao"></property> </bean> <!-- 配置一个可以执行批量操作的SQLSession --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg> <constructor-arg name="executorType" value="BATCH"></constructor-arg> </bean> <!--==================== 事务控制的配置 ===================--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 管理事务就先控制住数据源 --> <property name="dataSource" ref="pooledDataSource"></property> </bean> <!-- 开启基于注解的事务,使用xml配置形式的事务(必要主要的都是使用配置式) --> <aop:config> <!-- 切入点表达式 --> <aop:pointcut expression="execution(* com.qhmu.ssm.service..*(..))" id="txPoint"/> <!-- 配置事务曾强 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/> </aop:config> <!-- 配置事务曾强 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 所有方法都是事务方法 --> <tx:method name="*"/> <!--以get开始的方法 --> <tx:method name="get*" read-only="true"/> </tx:attributes> </tx:advice> <!-- =============================================== --> <!--spring配置文件核心:(数据源,与mybatis整合,事务控制) --> </beans> ## 包结构 ![图片说明](https://img-ask.csdn.net/upload/201806/22/1529609202_458251.png)
MavenWeb项目使用mybatis的分页查询插件,在项目部署时出现错误
MavenWeb项目使用mybatis的分页查询插件,在项目部署时出现错误,在程序中 运行可以查询出来,但是我只要用tomcat启动项目就报错,把mybatis的分页插件 配置注掉后就又可以部署成功,有没有大佬知道是什么情况!?? 下面是报错信息 ``` D:\apache-tomcat-9.0.19\bin\catalina.bat run [2019-06-22 06:33:48,732] Artifact SSM整合:war exploded: Waiting for server connection to start artifact deployment... Using CATALINA_BASE: "C:\Users\95638\.IntelliJIdea2018.3\system\tomcat\Unnamed_SSM整合" Using CATALINA_HOME: "D:\apache-tomcat-9.0.19" Using CATALINA_TMPDIR: "D:\apache-tomcat-9.0.19\temp" Using JRE_HOME: "C:\Program Files\Java\jdk1.8.0_144" Using CLASSPATH: "D:\apache-tomcat-9.0.19\bin\bootstrap.jar;D:\apache-tomcat-9.0.19\bin\tomcat-juli.jar" 22-Jun-2019 18:33:49.881 警告 [main] org.apache.tomcat.util.digester.Digester.endElement No rules found matching [Server/Service/Context] 22-Jun-2019 18:33:49.917 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server.服务器版本: Apache Tomcat/9.0.19 22-Jun-2019 18:33:49.917 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server.构建: Apr 12 2019 14:22:48 UTC 22-Jun-2019 18:33:49.917 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.19.0 22-Jun-2019 18:33:49.917 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Windows 10 22-Jun-2019 18:33:49.917 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS.版本: 10.0 22-Jun-2019 18:33:49.917 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 结.造: amd64 22-Jun-2019 18:33:49.917 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java 环境变量: C:\Program Files\Java\jdk1.8.0_144\jre 22-Jun-2019 18:33:49.917 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM 版本: 1.8.0_144-b01 22-Jun-2019 18:33:49.917 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM.供应商: Oracle Corporation 22-Jun-2019 18:33:49.917 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: C:\Users\95638\.IntelliJIdea2018.3\system\tomcat\Unnamed_SSM整合 22-Jun-2019 18:33:49.917 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: D:\apache-tomcat-9.0.19 22-Jun-2019 18:33:49.918 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=C:\Users\95638\.IntelliJIdea2018.3\system\tomcat\Unnamed_SSM整合\conf\logging.properties 22-Jun-2019 18:33:49.918 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 22-Jun-2019 18:33:49.918 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote= 22-Jun-2019 18:33:49.918 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.port=1099 22-Jun-2019 18:33:49.918 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.ssl=false 22-Jun-2019 18:33:49.918 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.authenticate=false 22-Jun-2019 18:33:49.918 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.rmi.server.hostname=127.0.0.1 22-Jun-2019 18:33:49.918 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048 22-Jun-2019 18:33:49.918 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources 22-Jun-2019 18:33:49.918 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs= 22-Jun-2019 18:33:49.918 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=C:\Users\95638\.IntelliJIdea2018.3\system\tomcat\Unnamed_SSM整合 22-Jun-2019 18:33:49.918 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=D:\apache-tomcat-9.0.19 22-Jun-2019 18:33:49.918 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=D:\apache-tomcat-9.0.19\temp 22-Jun-2019 18:33:49.918 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library [1.2.21] using APR version [1.6.5]. 22-Jun-2019 18:33:49.918 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. 22-Jun-2019 18:33:49.919 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] 22-Jun-2019 18:33:49.922 信息 [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.1a 20 Nov 2018] 22-Jun-2019 18:33:50.039 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化协议处理器 ["http-nio-8080"] 22-Jun-2019 18:33:50.062 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化协议处理器 ["ajp-nio-8009"] 22-Jun-2019 18:33:50.066 信息 [main] org.apache.catalina.startup.Catalina.load 服务器在[448]毫秒内初始化 22-Jun-2019 18:33:50.094 信息 [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina] 22-Jun-2019 18:33:50.094 信息 [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.19] 22-Jun-2019 18:33:50.107 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["http-nio-8080"] 22-Jun-2019 18:33:50.121 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["ajp-nio-8009"] 22-Jun-2019 18:33:50.124 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in [58] milliseconds Connected to server [2019-06-22 06:33:50,289] Artifact SSM整合:war exploded: Artifact is being deployed, please wait... 22-Jun-2019 18:33:52.765 信息 [RMI TCP Connection(3)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。 22-Jun-2019 18:33:52.844 信息 [RMI TCP Connection(3)-127.0.0.1] org.springframework.web.context.ContextLoader.initWebApplicationContext Root WebApplicationContext: initialization started 22-Jun-2019 18:33:53.914 信息 [MLog-Init-Reporter] com.mchange.v2.log.MLog. MLog clients using java 1.4+ standard logging. 22-Jun-2019 18:33:53.996 信息 [RMI TCP Connection(3)-127.0.0.1] com.mchange.v2.c3p0.C3P0Registry. Initializing c3p0-0.9.5.4 [built 23-March-2019 23:00:48 -0700; debug? true; trace: 10] 22-Jun-2019 18:33:54.097 警告 [RMI TCP Connection(3)-127.0.0.1] org.springframework.context.support.AbstractApplicationContext.refresh Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'departmentService': Unsatisfied dependency expressed through field 'departmentMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'departmentMapper' defined in file [E:\SSM整合\out\artifacts\SSM_war_exploded\WEB-INF\classes\com\neuedu\dao\DepartmentMapper.class]: Cannot resolve reference to bean 'sqlSessionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [spring.xml]: Cannot create inner bean 'com.github.pagehelper.PageInterceptor#360582c8' of type [com.github.pagehelper.PageInterceptor] while setting bean property 'plugins' with key [0]; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.github.pagehelper.PageInterceptor] for bean with name 'com.github.pagehelper.PageInterceptor#360582c8' defined in class path resource [spring.xml]; nested exception is java.lang.ClassNotFoundException: com.github.pagehelper.PageInterceptor 22-Jun-2019 18:33:54.103 严重 [RMI TCP Connection(3)-127.0.0.1] org.springframework.web.context.ContextLoader.initWebApplicationContext Context initialization failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'departmentService': Unsatisfied dependency expressed through field 'departmentMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'departmentMapper' defined in file [E:\SSM整合\out\artifacts\SSM_war_exploded\WEB-INF\classes\com\neuedu\dao\DepartmentMapper.class]: Cannot resolve reference to bean 'sqlSessionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [spring.xml]: Cannot create inner bean 'com.github.pagehelper.PageInterceptor#360582c8' of type [com.github.pagehelper.PageInterceptor] while setting bean property 'plugins' with key [0]; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.github.pagehelper.PageInterceptor] for bean with name 'com.github.pagehelper.PageInterceptor#360582c8' defined in class path resource [spring.xml]; nested exception is java.lang.ClassNotFoundException: com.github.pagehelper.PageInterceptor at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1411) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:845) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:400) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4682) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5150) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:713) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:695) at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1728) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:289) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:457) at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:406) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:289) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468) at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309) at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401) at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) at sun.rmi.transport.Transport$1.run(Transport.java:200) at sun.rmi.transport.Transport$1.run(Transport.java:197) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:196) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'departmentMapper' defined in file [E:\SSM整合\out\artifacts\SSM_war_exploded\WEB-INF\classes\com\neuedu\dao\DepartmentMapper.class]: Cannot resolve reference to bean 'sqlSessionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [spring.xml]: Cannot create inner bean 'com.github.pagehelper.PageInterceptor#360582c8' of type [com.github.pagehelper.PageInterceptor] while setting bean property 'plugins' with key [0]; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.github.pagehelper.PageInterceptor] for bean with name 'com.github.pagehelper.PageInterceptor#360582c8' defined in class path resource [spring.xml]; nested exception is java.lang.ClassNotFoundException: com.github.pagehelper.PageInterceptor at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:314) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1681) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1433) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1251) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1171) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593) ... 60 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [spring.xml]: Cannot create inner bean 'com.github.pagehelper.PageInterceptor#360582c8' of type [com.github.pagehelper.PageInterceptor] while setting bean property 'plugins' with key [0]; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.github.pagehelper.PageInterceptor] for bean with name 'com.github.pagehelper.PageInterceptor#360582c8' defined in class path resource [spring.xml]; nested exception is java.lang.ClassNotFoundException: com.github.pagehelper.PageInterceptor at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:361) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:124) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedArray(BeanDefinitionValueResolver.java:388) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:155) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1681) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1433) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:303) ... 73 more Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.github.pagehelper.PageInterceptor] for bean with name 'com.github.pagehelper.PageInterceptor#360582c8' defined in class path resource [spring.xml]; nested exception is java.lang.ClassNotFoundException: com.github.pagehelper.PageInterceptor at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1392) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:487) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:346) ... 85 more Caused by: java.lang.ClassNotFoundException: com.github.pagehelper.PageInterceptor at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1363) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1186) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at org.springframework.util.ClassUtils.forName(ClassUtils.java:275) at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:444) at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1457) at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1384) ... 87 more 22-Jun-2019 18:33:54.140 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file 22-Jun-2019 18:33:54.142 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors [2019-06-22 06:33:54,184] Artifact SSM整合:war exploded: Error during artifact deployment. See server log for details. 22-Jun-2019 18:34:00.118 信息 [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [D:\apache-tomcat-9.0.19\webapps\manager] 22-Jun-2019 18:34:00.415 信息 [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [D:\apache-tomcat-9.0.19\webapps\manager] has finished in [297] ms ``` # springmvc.xml的配置 ``` <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <context:component-scan base-package="com.neuedu" use-default-filters="false"> <!--指定指挥扫描那些类型的注解,这里指定只会扫描com.neuedu下或子包中的注解@Controller。其他注解不扫描--> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!--导入依赖注入的注解解析器 --> <context:annotation-config></context:annotation-config> <!--开启基于注解的处理器映射器与处理器适配器 --> <mvc:annotation-driven ></mvc:annotation-driven> <!--配置吧静态资源交给tomcat来处理(springmvc框架就不要处理了) --> <mvc:default-servlet-handler></mvc:default-servlet-handler> <!-- 视图解析器 解析jsp解析,默认使用jstl标签,classpath下的得有jstl的包 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置jsp路径的前缀 --> <property name="prefix" value="/WEB-INF/jsp/"/> <!-- 配置jsp路径的后缀 --> <property name="suffix" value=".jsp"/> </bean> </beans> ``` # spring.xml的配置 ``` <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/cache" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> <!--配置对service及dao包的扫描 --> <context:component-scan base-package="com.neuedu"> <!--配置对那些注解不进行扫描(不扫描注解@controller,因为他被springmvc扫描了) --> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!--配置开启依赖注入的注解解析器(主要针对@Autoired,@Resource注解) --> <context:annotation-config/> <!--配置通过引入配置文件来进行数据库连接 --> <context:property-placeholder location="classpath:jdbc"/> <!--配置基于c3p0的数据库连接池,该类在c3p0对应的jar包中 --> <bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!--配置数据库连接的基本属性 --> <property name="driverClass" value="${jdbc.driverClass}"/> <property name="jdbcUrl" value="${jdbc.dburl}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!--配置sqlSessionFactory 该类在Mybatis-spring jar包中--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--通过整合mybatis框架的核心配置文件,通过属性configLocation来指定 --> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!--配置引用数据源(数据库连接池) --> <property name="dataSource" ref="c3p0DataSource"/> <!--配置加载那些mybatis框架中的映射文件 --> <property name="mapperLocations" value="classpath:mapper/*.xml"/> <!-- 在 Spring 配置文件中配置拦截器插件 --> <property name="typeAliasesPackage" value="com.isea533.mybatis.model"/> <property name="plugins"> <array> <bean class="com.github.pagehelper.PageInterceptor"> <!-- 这里的几个配置主要演示如何使用,如果不理解,一定要去掉下面的配置 --> <property name="properties"> <value> helperDialect=mysql reasonable=true supportMethodsArguments=true params=count=countSql autoRuntimeDialect=true </value> </property> </bean> </array> </property> </bean> <!--配置事务管理器类,该类在Spring-jdbc jar包中 --> <bean id="tx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!--关联数据源 --> <property name="dataSource" ref="c3p0DataSource"/> </bean> <!--配置开启基于注解的事务管理的注解解析器(@Transactional) --> <!--<tx:annotation-driven transaction-manager="tx"/>--> <!--配置dao曾家口的实现代理 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--配置对那个包进行接口扫描 --> <property name="basePackage" value="com.neuedu.dao"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> </beans> ``` # mybatis.xml的配置 ``` <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> </configuration> ``` 来个大佬捞一手叭!
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
C语言荣获2019年度最佳编程语言
关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang近日,TIOBE官方发布了2020年1月编程语言排行榜单。我在前面给过一篇文章《2019年11月C语言接近Ja...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
应届生/社招面试最爱问的几道Java基础问题
本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb (【Java学习 面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错的还,不妨去点个Star,鼓励一下! 一 为什么 Java 中只有值传递? 首先回顾一下在程序设计语言中有关将参数传递给方法(或函数)的一些专业术语。按值调用(call by value)表...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
一份王者荣耀的英雄数据报告
咪哥杂谈本篇阅读时间约为 6 分钟。1前言前一阵写了关于王者的一些系列文章,从数据的获取到数据清洗,数据落地,都是为了本篇的铺垫。今天来实现一下,看看不同维度得到的结论。2环境准备本次实...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
立即提问