介绍

SpringBoot+Thymeleaf+Mybaits项目部分功能,
实现文件的多文件上传和下载,以及将kindeditor富文本内容保存为.doc文件
文件上传/创建后以列表形式显示,并且可以分页显示

提示

简单记录,仅供参考,代码并不完整,需要简单修改后才能使用(没提供.css文件,需要删除html中的class;另外部分变量通过session获取,可以适当修改)

关键代码

html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title><link th:href="@{/css/flow.css}" rel="stylesheet"><script type="text/javascript"  th:src="@{/js/flow.js}" ></script><script type="text/javascript" charset="utf-8" th:src="@{/kindeditor/kindeditor.js}"></script><script type="text/javascript" charset="utf-8" th:src="@{/kindeditor/lang/zh_CN.js}"></script><script type="text/javascript" charset="utf-8" th:src="@{/kindeditor/lang/zh_CN.js}"></script><link rel="stylesheet" th:href="@{/kindeditor/themes/default/default.css}" /><script type="text/javascript">var editor;KindEditor.ready(function(K) {editor= K.create('#editor_id1', {uploadJson : 'kindeditor/jsp/upload_json.jsp',fileManagerJson : 'kindeditor/jsp/file_manager_json.jsp',allowFileManager : true ,resizeType:0 ,urlType:'domain',afterBlur: function(){this.sync();}});});</script>
</head><body>
<form  th:action="@{/oa/cfile}" id="cfileid"  name="cfileid" enctype="multipart/form-data" method="post"><div style="height: 20px;clear: both;"></div><div style="height: 5px;clear: both;"></div><div class="newwidth" ><div class="newflowleft"style="margin-top: 30px" ><div class="newlefttable"><div class="newrow" style="text-align: center;font-family: 楷体;color: #5b9909;font-weight: bold;"><div style="border-bottom: 1px solid red;width: 400px;font-size: 15px;" >创健工作文件</div></div><div style="clear: both;"></div><div class="newrow"><div class="newrowleft">文件名称:</div><div class="newrowright"><input type="text" id="cfilename" name="cfilename" placeholder="创建文件请输入文件名" onblur="checkinput('newflowname','newflownamex')" class="commtext"><span id="newflownamex" name="newflownamex" style="font-size: 11px;color:red;"></span></div></div><div style="clear: both;"></div><div class="newrow" style="height: 60px;"><div class="newrowleft" style="height: 58px;line-height: 58px;vertical-align: middle;">上传word文件:</div><div class="newrowright" style="height: 58px;"><input type="file"  id="tranfile" multiple name="tranfile" accept="application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel,application/vnd.ms-word"  style="display: none;" onchange="onc()"><textarea style="height: 52px;" id="tranfilex" name="tranfilex" class="commtext" onblur="checkfile('tranfilex')" readonly></textarea><input type="button" value="选择文件" class="tranbutton" onclick="selectfile('tranfile')"></div></div><div style="clear: both;"></div><div class="newrow" ><div class="newrowleft" style="border-right: 0px;width: 397px;text-align: left;">*文件扼要说明:</div></div><div style="clear: both;"></div><div class="newrow"><textarea style="margin-left: 5px;margin-top: 5px;" cols="52" rows="15" id="fileitr" name="fileitr"></textarea></div></div></div><div class="newflowright" style="border: none" ><div class="newrow" style="margin:auto;font-family: 楷体;color: #5b9909;font-weight: bold;width: auto;"><div style="border-bottom: 1px solid red;font-size: 15px;float: left;" >文件内容(与上传文件二选一)</div></div><div style="clear: both;height: 5px;"></div><textarea id="editor_id1" name="editor_id1" style="width:100%;height:423px;"></textarea></div></div><div style="float: left;margin-left: 150px;margin-top: 15px"><input type="button" value="创建/上传文件" class="flowsbutton" style="width:100px;" onclick="checknewfile()"><span style="color: red" th:text="${incident}"></span></div><div style="height: 5px;clear: both;margin-top: 30px"></div><div class="seatile">文件列表</div><div style="height: 5px;clear: both;"></div><div style="clear: both;"></div><div class="fshowline" style="background-color: whitesmoke;"><div class="fshowcell" style="width: 50px;">ID</div><div class="fshowcell" style="width: 300px;">文件名称</div><div class="fshowcell"  style="width: 100px">文件后缀</div><div class="fshowcell" style="width: 200px;">存储路径</div><div class="fshowcell" style="width: 150px;">文件大小</div><div class="fshowcell"style="width: 400px;" >文件扼要说明</div><div class="fshowcell" style="width: 200px;">上传时间</div><div class="fshowcell" style="width: 100px;">下载</div><div class="fshowcell" style="width: 100px;">删除</div></div><div style="clear: both;"></div><div th:if="${page.totalRows} == 0"><div class="fshowline" style="text-align: center;vertical-align: middle;">无文件数据</div></div><div th:if="${page.totalRows}  != 0"><div th:each="c,state:${files}"><div class="fshowline"><div class="fshowcell" style="display: none"><span th:text="${c.id}"></span></div><div class="fshowcell" style="width: 50px;"><span th:text="${state.index}+1+(${page.currentPage}-1)*${page.pageSize}"></span></div><div class="fshowcell" style="width: 300px;"><span th:text="${c.oldFileName}"></span></div><div class="fshowcell" style="width: 100px"><span th:text="${c.ext}"></span></div><div class="fshowcell" style="width: 200px;"><span th:text="${c.path}"></span></div><div class="fshowcell" style="width: 150px;"><span th:text="${c.size}"></span>B</div><div class="fshowcell"style="width: 400px;" ><span th:text="${c.fileitr}"></span></div><div class="fshowcell" style="width: 200px;"><span th:text="${c.uploadTime}"></span></div><div class="fshowcell" style="width: 100px;"><a th:href="@{/oa/download(id=${c.id})}">下载</a></div><div class="fshowcell" style="width: 100px;"><a href="javascript:void(0)" th:onclick="delefile([[${c.id}]])">删除</a></div></div></div></div><div style="clear: both;height:2px;border-bottom: 1px solid green;"></div><!--换页控制部分--><div style="display: none;"><input type="text" th:value="${page.currentPage}" id="currentpx1" name="currentpx1"></div><div th:if="${page.totalPage}!=1"><div class="fshowline"><div class="fshowcell" style="width: 160px;text-align: left;font-size: 10px;">第<input type="text" id="currentp" name="currentp"  class="currentb"  readonly  th:value="${page.currentPage}" style="width: 7px;border: none;">页/共<span th:text="${page.totalPage}"></span>页,总<span th:text="${page.totalRows}"></span>个记录</div><div class="fshowcell" style="width:100%;text-align: center;"><span title="首页"><input type="submit" value="" name="first" id="first" onclick="firstcheck1('currentpx1');" class="firstbutton" style="vertical-align: middle;"></span><span title="上一页"><input type="submit" value="" name="privious" id="privious" onclick="priviouscheck1('currentpx1');" class="previousbutton" style="vertical-align: middle;"></span><span title="下一页"><input type="submit" value="" name="next" id="next" th:onclick="nextcheck1('currentpx1',[[${page.totalPage}]]);" class="nextbutton" style="vertical-align: middle;"></span><span title="尾页"><input type="submit" value="" name="last" id="last" th:onclick="lastcheck1('currentpx1',[[${page.totalPage}]]);" class="lastbutton" style="vertical-align: middle;" ></span></div></div></div>
</form>
</body>
</html>

.js文件

function selectfile(sname) {document.getElementById(sname).click();
}
function checknewfile() {document.cfileid.submit()
}
function delefile(id) {if (confirm("删除后无法找回,确认删除?")){window.location.href = "../oa/filedelete?id=" + id;}
}

Controller层

   @RequestMapping("/cfile")private String cfile(MultipartFile[] tranfile,Model model, HttpServletRequest request) throws Exception {HttpSession session = request.getSession();Long userId = Long.parseLong(session.getAttribute("userId").toString());String user = session.getAttribute("loginuser").toString();String fileitr = request.getParameter("fileitr");String content =  request.getParameter("editor_id1");String cfilename = request.getParameter("cfilename");//创建文件名String content1 = "<html><head>"+"</head><body>" + content + "</body></html>";if (tranfile!=null){for (int i=0;i<tranfile.length;i++){UserFile userFile1 = new UserFile();userFile1.setOldFileName(tranfile[i].getOriginalFilename());userFile1.setUserId(userId);if (flowMapper.selectByFileName(userFile1)==null){ //查询文件是否重复上传String oldFileName = tranfile[i].getOriginalFilename();//文件大小Long size = tranfile[i].getSize();//文件类型String type = tranfile[i].getContentType();//获取文件后缀String extension = "." + FilenameUtils.getExtension(tranfile[i].getOriginalFilename());String realPath = ResourceUtils.getURL("D:\\eet").getPath();String dateFormat = new SimpleDateFormat("yyyy-MM-dd").format(new Date());String dateDirPath = realPath +user+ " "+dateFormat ;File dateDir = new File(dateDirPath);if (!dateDir.exists()) dateDir.mkdirs();if (size!=0&&oldFileName!=""){//处理文件上传tranfile[i].transferTo(new File(dateDir,oldFileName));UserFile userFile = new UserFile();userFile.setOldFileName(oldFileName);userFile.setExt(extension);userFile.setSize(String.valueOf(size));userFile.setType(type);userFile.setPath(user+ " "+dateFormat);userFile.setUserId(userId);userFile.setUploadTime(dateFormat);userFile.setFileitr(fileitr);flowMapper.insertFile(userFile);}}else {model.addAttribute("incident","文件重复上传");}}}//创建word文档if (content!=null&&content.length()!=0){String firstpic = serviceImp.getFirstPic(content);//图片//String realPath = ResourceUtils.getURL("D:\\eet").getPath();String dateFormat = new SimpleDateFormat("yyyy-MM-dd").format(new Date());String path = "D:\\eet\\"+user+" "+dateFormat+"\\";File fileDir = new File(path);if (!fileDir.exists()) fileDir.mkdirs();if (fileDir.exists()) {// 生成临时文件名称if (cfilename!=null&&cfilename.length()!=0){String fileName = cfilename+".doc";byte b[] = content1.getBytes("GBK");ByteArrayInputStream bais = new ByteArrayInputStream(b);POIFSFileSystem poifs = new POIFSFileSystem();DirectoryEntry directory = poifs.getRoot();DocumentEntry documentEntry = directory.createDocument("WordDocument", bais);FileOutputStream ostream = new FileOutputStream(path +fileName);poifs.writeFilesystem(ostream);bais.close();ostream.close();UserFile userFile = new UserFile();userFile.setOldFileName(fileName);userFile.setExt(".doc");int size = documentEntry.getSize();userFile.setSize(String.valueOf(size));userFile.setPath(user+ " "+dateFormat);userFile.setUserId(userId);userFile.setUploadTime(dateFormat);userFile.setFileitr(fileitr);flowMapper.insertFile(userFile);}else {model.addAttribute("创建文件需输入文件名");}}}//----------------------显示文件---------------------String pageID=request.getParameter("currentpx1");Page page = new Page();page.setUserId(userId);page.setStartRow(0);page.setPageSize(2100000000);List<UserFile> ff = flowMapper.findByuserId(page);page.setTotalRows(ff.size());page.setPageSize(10);page.setTotalPage(serviceImp.qTotalPage(page));if (pageID == null){int pageId = 1;page.setCurrentPage(pageId);}else {int pageId = Integer.parseInt(pageID);page.setCurrentPage(pageId);}page.setStartRow(serviceImp.qStartRow(page));ff = flowMapper.findByuserId(page);model.addAttribute("files",ff);model.addAttribute("page",page);return "cfile";}//---------文件下载@RequestMapping("/download")private String download(String openStyle,String id,HttpServletRequest request,HttpServletResponse response,Model model) throws IOException{HttpSession session = request.getSession();Long userId = Long.parseLong(session.getAttribute("userId").toString());Long Id = Long.parseLong(id);//获取打开方式openStyle = openStyle == null ? "attachment" : openStyle;System.out.println(Id);//获取文件信息UserFile userFile = flowMapper.selectById(Id);//根据文件信息中文件名字 和 文件存储路径获取文件输入流String realpath = ResourceUtils.getURL("D:\\eet\\").getPath() + userFile.getPath();//获取文件输入流FileInputStream is = new FileInputStream(new File(realpath, userFile.getOldFileName()));//附件下载response.setHeader("content-disposition", openStyle + ";fileName=" + URLEncoder.encode(userFile.getOldFileName(), "UTF-8"));//获取响应输出流ServletOutputStream os = response.getOutputStream();//文件拷贝IOUtils.copy(is, os);IOUtils.closeQuietly(is);IOUtils.closeQuietly(os);//----------------------显示文件---------------------String pageID=request.getParameter("currentpx1");Page page = new Page();page.setUserId(userId);page.setStartRow(0);page.setPageSize(2100000000);List<UserFile> ff = flowMapper.findByuserId(page);page.setTotalRows(ff.size());page.setPageSize(10);page.setTotalPage(serviceImp.qTotalPage(page));if (pageID == null){int pageId = 1;page.setCurrentPage(pageId);}else {int pageId = Integer.parseInt(pageID);page.setCurrentPage(pageId);}page.setStartRow(serviceImp.qStartRow(page));ff = flowMapper.findByuserId(page);model.addAttribute("files",ff);model.addAttribute("page",page);return "upfile";}@RequestMapping("/filedelete")private String filedelete (String id,HttpServletRequest request,Model model)throws IOException{HttpSession session = request.getSession();Long userId = Long.parseLong(session.getAttribute("userId").toString());Long Id = Long.parseLong(id);//=================删除文件================//根据id查询信息UserFile userFile = flowMapper.selectById(Id);System.out.println(userFile.getPath());//删除文件
//        realPath绝对路径String realPath = ResourceUtils.getURL("D:\\eet\\").getPath()+ userFile.getPath();System.out.println(realPath);File file = new File(realPath, userFile.getOldFileName());if(file.exists()){file.delete();//立即删除flowMapper.deleFile(Id);}//----------------------显示文件---------------------String pageID=request.getParameter("currentpx1");Page page = new Page();page.setUserId(userId);page.setStartRow(0);page.setPageSize(2100000000);List<UserFile> ff = flowMapper.findByuserId(page);page.setTotalRows(ff.size());page.setPageSize(10);page.setTotalPage(serviceImp.qTotalPage(page));if (pageID == null){int pageId = 1;page.setCurrentPage(pageId);}else {int pageId = Integer.parseInt(pageID);page.setCurrentPage(pageId);}page.setStartRow(serviceImp.qStartRow(page));ff = flowMapper.findByuserId(page);model.addAttribute("files",ff);model.addAttribute("page",page);return "cfile";}

Model(UserFile和Page两个类)

//UserFile类,存储文件信息
public class UserFile {private Long id;private String oldFileName;private String ext;private String path;private String size;private String type;private String isImg;private Integer downcounts;private String uploadTime;private Long userId;private String fileitr;//get、set方法省略
}//Page类,用于分页
public class Page {//开始行,根据页面的值计算,调用对应的服务函数private Integer startRow;//每页的行数,直接指定private Integer pageSize;//当前页码,来自页面private Integer currentPage;//总页码,根据总行数计算private Integer totalPage;//根据数据库查询获得private Integer totalRows;//模糊搜索同类的条件private String condition;//企业编号,通过session获取private Long firmId;//用户IDprivate Long userId;//get、se方法省略}

Service层(包含了分页计算的方法)

@Service
public class ServiceImp {//实现分页public int qTotalPage(Page page){int totalPage=0;int totalRow=page.getTotalRows();int pageSize=page.getPageSize();if(totalRow!=0){int remainder=totalRow%pageSize;if(remainder==0){totalPage=totalRow/pageSize;}else{totalPage=totalRow/pageSize+1;}}else{totalPage=1;}return totalPage;}//分页后开始行public Integer qStartRow(Page page){int startRow=0;int currentPage=page.getCurrentPage();//int totalRow=page.getTotalRows();int pageSize=page.getPageSize();startRow=(currentPage-1)*pageSize;return startRow;}}

Dao层

    //按文件名搜索文件信息public UserFile selectByFileName(UserFile userFile);//根据id获取文件信息public UserFile selectById(Long id);//保存上传文件信息public void insertFile(UserFile userFile);//根据userid获取文件信息public List<UserFile> findByuserId(Page page);//删除文件信息public void deleFile(Long id);

Mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hz.dao.flowMapper"><!--文件表--><resultMap id="baseFile" type="com.hz.model.UserFile"><result column="id" jdbcType="BIGINT" property="id"/><result column="oldFileName" jdbcType="VARCHAR" property="oldFileName"/><result column="ext" jdbcType="VARCHAR" property="ext"/><result column="path" jdbcType="VARCHAR" property="path"/><result column="size" jdbcType="VARCHAR" property="size"/><result column="type" jdbcType="VARCHAR" property="type"/><result column="isImg" jdbcType="VARCHAR" property="isImg"/><result column="uploadTime" jdbcType="VARCHAR" property="uploadTime"/><result column="userId" jdbcType="BIGINT" property="userId"/><result column="fileitr" jdbcType="VARCHAR" property="fileitr"/></resultMap><!--按文件名搜索文件信息--><select id="selectByFileName" resultMap="baseFile">select *from t_fileswhere oldFileName=#{oldFileName,jdbcType=VARCHAR}and userId = #{userId,jdbcType=VARCHAR}</select><!--根据id获取文件信息--><select id="selectById"  resultMap="baseFile">select *from t_fileswhere id = #{id}</select><!--保存上传文件信息--><insert id="insertFile" parameterType="com.hz.model.UserFile">insert into t_files<trim prefix="(" suffix=")" suffixOverrides=","  ><if test="oldFileName != null">oldFileName,</if><if test="ext != null">ext,</if><if test="size != null">size,</if><if test="path != null">path,</if><if test="type != null">type,</if><if test="isImg != null">isImg,</if><if test="uploadTime != null">uploadTime,</if><if test="userId != null">userId,</if><if test="fileitr != null">fileitr,</if></trim><trim prefix="values (" suffix=")" suffixOverrides=","><if test="oldFileName != null">#{oldFileName,jdbcType=VARCHAR},</if><if test="ext != null">#{ext,jdbcType=VARCHAR},</if><if test="size != null">#{size,jdbcType=VARCHAR},</if><if test="path != null">#{path,jdbcType=VARCHAR},</if><if test="type != null">#{type,jdbcType=VARCHAR},</if><if test="isImg != null">#{isImg,jdbcType=VARCHAR},</if><if test="uploadTime != null">#{uploadTime,jdbcType=VARCHAR},</if><if test="userId != null">#{userId,jdbcType=BIGINT},</if><if test="fileitr != null">#{fileitr,jdbcType=VARCHAR}</if></trim></insert><!--删除文件--><delete id="deleFile"  >delete from t_fileswhere id=#{id,jdbcType=BIGINT}</delete><!--根据userid获取文件信息--><select id="findByuserId"  resultMap="baseFile" resultType="com.hz.model.UserFile" parameterType="com.hz.model.Page">select *from t_fileswhere userId = #{userId}order by id desclimit #{startRow},#{pageSize}</select>
</mapper>

Mysql

DROP TABLE IF EXISTS `t_files`;
CREATE TABLE `t_files` (`id` int(11) NOT NULL AUTO_INCREMENT,`oldFileName` varchar(255) DEFAULT NULL,`ext` varchar(50) DEFAULT NULL,`path` varchar(255) DEFAULT NULL,`size` varchar(255) DEFAULT NULL,`type` varchar(255) DEFAULT NULL,`uploadTime` varchar(255) DEFAULT NULL,`userId` int(11) DEFAULT NULL,`fileitr` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8;

效果图

Java实现多文件上传下载,kindeditor富文本保存为word文件,文件列表分页显示相关推荐

  1. plupload附件上传下载+百度富文本编辑器

    从github下载源码https://github.com/moxiecode/plupload/tree/master/js 从百度富文本官网下载源码https://ueditor.baidu.co ...

  2. 当你想用Gitee对你的APK文件上传下载时

    当你想用Gitee对你的APP文件上传下载时 你的安卓APP的APK文件想找个免费的地方存放并且维护管理(上传下载),你又不想存在自己的服务器上,那么Gitee就挺不错的; 我的示例: https:/ ...

  3. 教你如何实现c#文件上传下载功能

    简单介绍一下c#文件上传下载功能实现. NuGet 安装SqlSugar Model文件下新建 DbContext 类 public class DbContext {public DbContext ...

  4. 直链文件上传下载网站分享(二)

    直链文件上传下载网站分享(一) 直链文件上传下载网站分享(二) 八.GM帮登陆器列表空间 九.墨涩网外链系统 十.树洞外链 十一.豆子外链 十二.凡人外链 十三.图钉外链 十四.小西外链 直链文件上传 ...

  5. 文件上传 java web_JavaWeb 文件上传下载

    1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...

  6. java实现excel文件上传_java相关:SpringMVC下实现Excel文件上传下载

    java相关:SpringMVC下实现Excel文件上传下载 发布于 2020-6-21| 复制链接 摘记: 在实际应用中,经常会遇到上传Excel或者下载Excel的情况,比如导入数据.下载统计数据 ...

  7. java ftp 下载慢_Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题

    废话不多说了,直接给大家贴代码了,具体代码如下所示: //文件上传 public static boolean uploadToFTP(String url,int port,String usern ...

  8. centos nfs java_CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

  9. java上传文件到ftp_java实现文件上传下载至ftp服务器

    以前做的一个项目,用到了文件上传下载至ftp服务器,现在对其进行一下复习,比较简单,一下就能看明白. 环境:首先,先安装ftp服务器,我是在win8本地用IIS配置的, 百度一下就可以找到安装文档. ...

最新文章

  1. 一分钟详解「本质矩阵」推导过程
  2. sts4创建spring项目_使用STS4新建springboot项目
  3. python 操作 elasticsearch-7.0.2 遇到的问题
  4. MAUI 移植 Xamarin.Forms 自定义渲染器
  5. 怎么创建计算机快捷方式到桌面两种方法,使用脚本主机创建Windows快捷方式 - Windows Client | Microsoft Docs...
  6. 山东大学 2020级数据库系统 实验七
  7. vscode,git提交push,需要每次都输入账号密码username,password
  8. Keil(MDK-ARM-STM32)系列教程(二)工具栏详细说明
  9. saltstack 系列(三)centos7使用saltstack小试牛刀
  10. windows server 2008配置之AD域服务器 2
  11. java版Spring Cloud、spring boot 社交电子商务平台 电商源码
  12. linux usb有线网卡驱动_求助!linux下安装usb无线网卡驱动成功 但是ping不通网关。。。...
  13. (Codeforces800Div2)B. Paranoid String(思维/动态规划)
  14. 世界上最有名的十大思想实验
  15. 世事洞明皆学问-拉链拉头的拆分安装
  16. 少年歌行、少年白马、暗河传综合实力排行
  17. 零基础入门python web 自动化测试_python web自动化测试,入门篇
  18. 我的window10中没有Windows Subsystem for Linux
  19. espn配置路由_华为敏捷网络解决方案.ppt
  20. mysql geohash函数_基于MySQL实现按距离排序、范围查找geoHash

热门文章

  1. 【大数据开发】flink1.12 Aggregate Functions 遇到的坑
  2. FFmpeg命令实例合集
  3. Qt:使用FFmpeg解码视频流
  4. 【附源码】计算机毕业设计Python安卓手机销售网站2651d(源码+程序+LW+调试部署)
  5. Selenium 2 工作原理
  6. 观点 | 预见未来:NLP将迎来黄金十年
  7. oracle数据库中用sql拼接字符串和转成clob存储在数据库中
  8. 伪随机数,随机数种子
  9. 系统维护时提示服务器错误,电脑出现错误0x80070079信号灯超时该怎么办?_网站服务器运行维护...
  10. java反射 注解_Java反射中的注解