Spingboot项目实现登陆(H2DB和图片验证码)+上传文件+解析EXCEL

Stella981
• 阅读 416

    近期手头有个需要重构的小项目,于是就想用Springboot来完成,所以就周末在家先初步搭好,功能很简单,实现密码和图片验证码双重验证以及解析excel获取数据,一开始是使用docker+mysql的,后来经理建议换成h2,所以就改了下数据库,然后上传excel文件并解析其中数据,解析后数据的操作使用就是公司业务问题就不便在此多说了。接下来一步步操作吧,最后也会附上代码。

环境要求:

JDK 7     springboot 1.5.9      maven 3.0.5    h2 1.4.195 (或者mysql 5.6 +docker )

1、新建Springboot项目

新建项目的步骤之前写过,附上链接,刚学的朋友可以参考下

https://my.oschina.net/xiaozhiwen/blog/1585456

也可以直接使用这位博主的代码再继续加功能,这里使用了mysql

http://blog.csdn.net/huang906391/article/details/78376766

图片验证码是参考这篇博客的,当然有修改了点

https://www.cnblogs.com/xuningchuanblogs/p/7852377.html

2、新建页面

springboot是不推荐jsp的,要用 jsp 要引入一些依赖包,这个过程也花了我一些时间去研究的。

如果你直接用html页面而且放在resources/template的话这一步可以跳过

主要是这两个依赖

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.1.2</version>
        </dependency>

springboot对静态资源的管理也不太一样,在resources目录下新建static,然后把css和js那些放在此目录下就可以在页面中使用啦,页面和图片我放在 webapp下的views目录和images目录,所以需要在application.properties文件中配置jsp路径(使用mysql的可以在此配置数据库信息),访问端口也可以在此设置。

#数据库配置
#spring.datasource.url=jdbc:mysql://192.168.166.170:3306/userdb?characterEncoding=UTF-8&useUnicode=true
#spring.datasource.username=root
#spring.datasource.password=root
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#spring.jpa.properties.hibernate.hbm2ddl.auto=update

spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.jsp

server.port=8080

3、新建数据库

mysql的话我用了之前用docker创建的镜像,有兴趣的可以看下,挺简单的
https://my.oschina.net/xiaozhiwen/blog/1601539

项目中用的是 H2database,参考了这两篇,也挺简单易懂的

https://www.cnblogs.com/xdp-gacl/p/4171024.html

http://blog.csdn.net/guicaizhou/article/details/51859500

准备好数据库后就加上user表和字段啦

如果不使用数据库或者使用H2Database(jdbc方式连接)的话,要在启动类(com目录下的App.java)中加上注解,防止扫描数据库连接信息

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})

4、文件处理

实现EXCEL文件的上传和解析

我这里使用了 jxl 的包

        <dependency>
            <groupId>jexcelapi</groupId>
            <artifactId>jxl</artifactId>
            <version>2.6.6</version>
        </dependency>

public static String[][] parse(String filePath, int colNum) throws Exception {
        try {
            Workbook book = Workbook.getWorkbook(new File(filePath));
            // 获得第一个工作表对象
            Sheet sheet = book.getSheet(0);
            int rowNum = sheet.getRows();
            // 创建二维数组
            String[][] data = new String[rowNum][colNum];
            Cell[] cells = null;
            for (int i = 0; i < rowNum; i++) {
                cells = sheet.getRow(i);
                for (int j = 0; j < colNum; j++) {
                    if (CellType.DATE.equals(cells[j].getType())) {
                        DateCell date = (DateCell) cells[j];
                        data[i][j] = format(date.getDate(), "yyyyMMdd");
                    } else {
                        data[i][j] = cells[j].getContents();
                    }
                }
            }
            book.close();
            return data;
        } catch (Exception e) {
            throw e;
        }
    }

如果ExcelUtil文件报错的话,可能需要手动buildpath jxl 的jar包

jar包下载地址:https://pan.baidu.com/s/1pM55nkR 密码:2mxh

5、打包部署

打包部署时也遇到不少麻烦,打成jar后访问不了页面,进去jar包后才发现静态资源没有被打包进去,所以就打包成war包进行部署了。而且本项目是采用jdk7开发的,本来打算在docker容器运行的,后来就在服务器下载7的jre,在jre内运行了。pom文件需要加上一下内容指定main方法入口和静态资源。

<build>
        <finalName>springboot_excel</finalName>
        <resources>
                <resource>
                    <directory>${basedir}/src/main/webapp</directory>
                    <!--注意此次必须要放在此目录下才能被访问到-->
                    <targetPath>META-INF/resources</targetPath> 
                    <includes>
                        <include>**/**</include>
                    </includes>
                </resource>
                <resource>
                    <directory>${basedir}/src/main/resources</directory>
                    <includes>
                        <include>**/**</include>
                    </includes>
                </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encode>UTF-8</encode>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <maimClass>com.App</maimClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

如果测试时 h2的是test的,记得去掉test哦,不然运行是会报classnofound org.h2.Driver

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.195</version>
        </dependency>

效果:

Spingboot项目实现登陆(H2DB和图片验证码)+上传文件+解析EXCEL

Spingboot项目实现登陆(H2DB和图片验证码)+上传文件+解析EXCEL

Spingboot项目实现登陆(H2DB和图片验证码)+上传文件+解析EXCEL

停止进程脚本:
新建脚本  stopExcelProcess.sh  

#!/bin/bash

ps -ef|grep -v 'grep'| grep 'springboot_excel' | grep -v 'stopExcelProcess'|awk '{print$2}' > temp
for i in `cat temp`
do
    echo $i
    kill $i
done
rm temp

echo "The process(springboot_excel) has been killed!"

总结:这次项目的搭建遇到的问题还是听多的,刚刚打了一段问题总结太乱了就删掉了,各位也遇到一些问题的话可以评论留下,一起探讨。

源码下载:https://github.com/IT-Mamba/springboot_excel_login.git

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Karen110 Karen110
2年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
Java日期时间API系列30
  实际使用中,经常需要使用不同精确度的Date,比如保留到天2020042300:00:00,保留到小时,保留到分钟,保留到秒等,常见的方法是通过格式化到指定精确度(比如:yyyyMMdd),然后再解析为Date。Java8中可以用更多的方法来实现这个需求,下面使用三种方法:使用Format方法、 使用Of方法和使用With方法,性能对比,使用
Stella981 Stella981
2年前
Spring Boot 2.x基础教程:实现文件上传
文件上传的功能实现是我们做Web应用时候最为常见的应用场景,比如:实现头像的上传,Excel文件数据的导入等功能,都需要我们先实现文件的上传,然后再做图片的裁剪,excel数据的解析入库等后续操作。今天通过这篇文章,我们就来一起学习一下如何在SpringBoot中实现文件的上传。动手试试第一步:创建一个基础的SpringBo
Wesley13 Wesley13
2年前
Java多线程导致的的一个事物性问题
业务场景我们现在有一个类似于文件上传的功能,各个子站点接受业务,业务上传文件,各个子站点的文件需要提交到总站点保存,文件是按批次提交到总站点的,也就是说,一个批次下面约有几百个文件。      考虑到白天提交这么多文件会影响到子站点其他系统带宽,我们将分站点的文件提交到总站点这个操作过程独立出来,放到晚上来做,具体时间是晚上7:00到早上7:00。
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这