idea中用Maven搭建struts2项目(文件上传和下载,支持分片)并用docker在虚拟机创建tomcat镜像,实现远程推送
记录在idea中用maven搭建struts2项目,一个简单的文件上传下载。
idea中maven环境配置
idea安装好,这个没得说。
下载maven,解压缩之后,配置环境变量(好像可以不用)
MAVEN_HOME E:\software\apache-maven-3.6.3
#在path中添加
%MAVEN_HOME%\bin;
setting,这个有说是otherSetting的,我好像觉得都一样,可以配置完,新建项目的时候去看看是不是配过的。配置Maven home directory到maven解压的目录,user setting file在解压文件的conf目录下,或者在当前用户.m2目录下建一份,默认仓库是.m2的repository。
在maven--Runner的VM Options加上-DarchetypeCatalog=internal参数(注意是-D, 因为没有这个搞半天。。),参见这篇博文:https://blog.csdn.net/mzy755423868/article/details/80573211
配置maven国内镜像
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
创建Maven项目
新建maven项目,create from archtype--maven-archtype webapp(注意并不是cocoon-22-archtype-webapp),后边没啥说的,点完就行。中间可以看到配置的maven信息,检查下对不。
正常的话就出来项目结构了,也没报错。
错误:
event log 导入出错,详细log():
#org.jetbrains.idea.maven - com.google.inject.CreationException: Unable to create injector
解决:切换到maven3.6.1以下的版本
struts2项目
添加struts2依赖
<dependencies>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.14.1</version>
</dependency>
这样环境就好了,配置tomcat就可以运行了。
log4j配置:https://blog.csdn.net/qq_24986539/article/details/81101943
maven导出war包:点击clean,点击install,日志里就有war包的路径。
一些错误记录
1.在struts2 2.3版本以后为了增加安全性,在action中添加了对方法访问的权限,如果要使用通配符 * 调用方法的话,需要添加额外的代码
例如:< global-allowed-methods>regex:.*< /global-allowed-methods>
还有两种方法:https://blog.csdn.net/Annn_kk/article/details/88761708
2.要使jsp:forward能跳转到action需要在web.xml 加入
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern></url-pattern>
<!-- 默认只处理客户端请求 -->
<dispatcher>REQUEST</dispatcher>
<!-- 增加对服务器内部转发的过滤 -->
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
3.资源文件不要放到wenb-inf下, 页面引不到
4.${}无效的时候在jsp头部加isELIgnored="false"
5.fastJson上手很快。json工具选型参考:https://blog.csdn.net/10km/article/details/77878471
6.文件上传大小限制配置
首先action必须继承actonSurport
<!-- 文件上传大小限制一(这个必须有),单位是byte -->
<constant name="struts.multipart.maxSize" value="1024"></constant>
<!-- 文件上传大小限制二,配置在action里(这个可有可无) -->
<interceptor-ref name="fileUpload">
<param name="maximumSize">1024</param>
</interceptor-ref>
<!-- 文件太大错误提示页面,name必须是input -->
<result name="input">error.jsp</result>
7.结果类性是chain,怎么到action的method
<result name="toHome" type="chain">
<param name="actionName">fileAction</param>
<param name="method">home</param>
</result>
安装docker创建tomcat镜像
安装一些工具
apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
安装密匙
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
安装稳定存储库
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
更新(慢的话就换源,更新界面可以操作,或者百度换成阿里的)
apt-get update
安装docker
apt-get install docker-ce
下载tomcat镜像
docker pull tomcat
docker下载慢,配置源
创建daemon.json文件
vim /etc/docker/daemon.json
写入自定义仓库
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
配置完后重启
systemctl daemon-reload
service docker restart
编写DockerFile创建tomcat8镜像参见博客:https://www.cnblogs.com/areyouready/p/8971817.html
run之后如果报404,可以进入容器
#查看容器id
docker ps
//进入容器
docker exec -it bc991ca03e33 /bin/bash
移动webapps.dist中文件到webapp中,并删除webapp.dist
或者更改dockerFile文件重新创建
如果还不行可能需要开通8080端口
#添加
firewall-cmd --zone=public --add-port=3306/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
#重新载入
firewall-cmd --reload
#查看
firewall-cmd --zone=public --query-port=3306/tcp
#删除
firewall-cmd --zone=public --remove-port=3306/tcp --permanent
如果上边报firewallD is not running
#查看状态为dead
systemctl status firewalld
#开启
systemctl start firewalld
再次查看状态为active
一些docker命令
#显示在运行的容器
docker ps
#停止容器(重启restart)
docker stop containerId
#删除容器
docker rm containerId
#显示所有的镜像
docker images
#删除镜像
docker rmi imageId
#进入容器
docker exec -it containerId /bin/bash
#容器内外拷贝
docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt
docker cp /opt testtomcat:/usr/local/tomcat/webapps/test/js/test.js
分片上传下载
项目仓库:https://github.com/Spancymath/CloudDisk.git
分片上传用的是webupload,很方便,也很明显加快了上传速度,忘了看的哪篇文章了
分片下载用的是XMLHttpRequest,很方便,效果不是很明显(不知道是不是用的阿里服务器太便宜限流了)
参考:https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest
https://blog.csdn.net/aydongzhiping/article/details/82462473?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
https://blog.csdn.net/sjhuangx/article/details/96972982
https://www.jianshu.com/p/ae654d89c02f
小笔记
js拼接字符串总会遇到含有单引号、双引号,导致js报错
解决:可以传入this,比如this是td,$(this).closest("tr").find("td").eq(0).text(),可以得到table里同行的第一个元素的值