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里同行的第一个元素的值

idea中用Maven搭建struts2项目(文件上传和下载,支持分片)并用docker在虚拟机创建tomcat镜像,实现远程推送

上一篇:PHP7内核-面向对象实现动态属性


下一篇:JS/TS生成随机姓名