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

Stella981
• 阅读 194

    近期手头有个需要重构的小项目,于是就想用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

点赞
收藏
评论区
推荐文章
秃头王路飞 秃头王路飞
2个月前
webpack5手撸vue2脚手架
webpack5手撸vue相信工作个12年的小伙伴们在面试的时候多多少少怕被问到关于webpack方面的知识,本菜鸟最近闲来无事,就尝试了手撸了下vue2的脚手架,第一次发帖实在是没有经验,望海涵。languageJavaScript"name":"vuecliversion2","version":"1.0.0","desc
技术小男生 技术小男生
2个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
2个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
Jacquelyn38 Jacquelyn38
1年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
刚刚好 刚刚好
2个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
blmius blmius
1年前
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
小森森 小森森
2个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本欢迎添加左边的微信一起探讨!项目地址:(https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n)\2.Bug修复更新日历2.情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意),\\和注意
晴空闲云 晴空闲云
2个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
1个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
helloworld_28799839 helloworld_28799839
2个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue