Java:Spring MVC上传文件实战

一直很麻烦

说实话,Java的上传文件,还是稍微有点麻烦,要自己集成很多东西.在这一点上,我发现我更喜欢Flask的文件上传,寥寥几行就可以搞定文件上传.

看个Flask官方的例子:

搞定,关于Flask还有很多美好的传说..有意,请自行探索.

从一而终,看Java文件上传

在这里,我使用了Ajax上传文件.(不刷新页面,可以让你有更大的想象空间)

特诊如下:

  1. 使用了jquery.js,jquery.form.js,layer.js;
  2. 使用Ajax进行文件上传;
  3. 推荐使用iframe的方式进行调用,上传成功之后,ID会放进一个隐藏域.

大概特征如上,下面……兴奋的看源码吧.

java
image-2464

源码有点多…

第一个文件:前台upload.jsp

第二个文件:后台Controller.java

第三个文件:后台-文件实体Document.java

第四个文件:后台-字符串工具类

第五个文件:后台-日期工具类

第六个文件:后台-ID生成工具类

第七个文件:后台-上传处理Service

第八个文件:后台-【文件上传处理类】【核心】

看完着实不易…到此.

Struts:第一个小程序

崎岖的诞生过程

说明一下,这并非是说代码难敲什么的。从昨晚敲完书本上的代码后,一直就不能正常的测试!!!觉得有点迷茫,甚至有点灰心。。。可是,可是,转念一想,这不是长姿势的好机会么?于是,慢慢找答案吧。

OK!回到正题,简单说说我遇到的几个错误,以及解决方案.

小应用简述

这是一个登陆验证的特别简单的例子,共有以下几个配置文件:

  1. 登陆页:index.jsp
  2. 欢迎页:welcome.jsp
  3. Action:LoginAction

这个例子就是从登陆页输入用户名和密码,然后发送至Action处理,如果用户名和密码正确,则跳转到weclome.jsp页面,否则留在index.jsp页面.

Struts logo
image-1946

struts2 action class not found

这是我使用的搜索词,大致意思是:当表单提交的时候,访问不了Action…这可苦逼了,第一次配置Struts就遇到这事,心中难免失落……不过也不能不做啊!于是找各种答案,各种尝试,反正就是访问不了.

其实解决方案并不是很难,在提交表单的时候写成下面这个样子就行了:

Struts2 抛 java.lang.NoSuchMethodException

这个方法指的是找不到指定的方法,所以抛出这个异常。

抛出这个异常的原因是,下面这段代码写成这样了:

重复的action

这个问题我还没有找到解决办法,具体错误如下:每成功的登录一次,URL中就会重复一次[Action类所在包的包名,例如包名是:actions],那么每登录成功一次,包名就会多一个.
形如:

完整的代码

测试可用.
系统环境如下:

  • tomcat 7.0.35
  • Eclipse 4.2
  • struts 2
  • jdk 1.7

index.jsp[首页][所在文件夹:WebContent]:

welcome.jsp[欢迎页][所在文件夹:WebContent]:

struts.xml[struts核心配置文件][所在文件夹:WebContent/WEB-INF/classes/]:

web.xm[所在文件夹:WebContent/WEB-INF/]l:

Action:LoginAction.java[Java Resources:src>[package:action_struts]]:

struts的jar包请放在WebContent/WEB-INF/lib/文件夹内,我是导入了所有jar包.
一切弄好之后:打开浏览器,输入[localhost:8080/[项目名]/index.jsp],就能测试了[用户名:mr,密码:123].

继续前行,COM ON!~

JSTL获取数据库中的信息

运行环境

  • Tomcat-7.0.35[请先保持关闭状态]
  • MySQL5.5.29[请先保持关闭状态]
  • [Eclipse]Version: Juno Service Release 1
  • Build id: 20120920-0800
  • Fedora 18 /32

此程序在我的平台上可以运行,因此系统安装在虚拟机上,所以也需要保证虚拟机外的系统也可访问.此操作涉及到防火墙操作[文章]

配置数据库

请确认你已经安装Mysql数据库,并已经初始化完成[MySQL启动]

之后,可以执行下面的命令:

利用Java向MySQL插入数据

在Eclipse中新建Java项目,名为:InsertData,然后复制下面的代码,并执行[返回1表示插入成功]:

一旦数据插入完成,就可以进行下面的步骤了.

tomcat
image-1908

JSTL处理数据

新建一个动态WEB项目,名称:Test1063

从数据库中获取数据

首先创建一个bean,名称:ShopTest.
然后粘贴以下代码:

在bean包下创建一个名称为:ConnDB.Properties的文件[连接字符串,用户名,密码改成你自己的.]:

保存.
创建类:CONNDB用来对数据库的连接进行处理.

Servlet逻辑处理

在Java Resources–>src–>创建bean包.
然后创建Servlet,名称为:ShopServlet
主要代码如下[注意:导入相关的包]:

之后开始配置tomcat的web.xml,代码如下[MyEclipse会自动生成下面的数据,在当前项目的下面]:

JSTL转发数据

新建一个动态WEB项目,之后在WebContext[或者WebRoot]中创建index.jsp:

展示数据

创建query.jsp用来展示数据,代码如下:

完成工作

  • 启动Tomcat
  • 在终端运行ifconfig获取ip
  • 然后可以在虚拟机外面的系统,访问:[ip:8080/Test1063/index.jsp
  • 页面会跳转到query.jsp并展示从数据库中查询出来的数据.

JSP:实现数据分页查询

准备工作[实体层]

此示例在Linux下演示没有问题,并且此处假设你已经安装了MySQL和Eclipse.
请使用以下代码登录你的数据库:

接着开始创建数据库和表:

关于插入数据:可以使用Java进行数据插入:

JSP:分页查询数据
image-1883

逻辑处理部分

然后,就按照下面的步骤来了:

1.负责存放属性的Bean.

2.连接数据库的操作Bean.

3.处理数据的Bean.

视图部分

一个JSP页面搞定.

JSP无法编译类解决方案

错误

org.apache.jasper.JasperException: Unable to compile class for JSP ,就是这个,就是在JSP文件中添加JavaBean的时候报错.比如:

JSP调用JavaBean错误
image-1878

解决方案

我用了两个办法,请自行测试一下.
在这之前,我有必要说一下我的服务器环境:

  • tomcat-7.0.35:非Eclipse自带的,也非系统自带的,是自己安装的[好处很多].
  • JDK1.7:自行编译安装的

解决办法:

1.将tools.jar从$JAVA_HOME/lib复制到[tomcat]/lib/下面.[此处也需要注意你的CLASSPATH是否包含了JDK的tools.jar文件目录]
在Linux下面可以使用命令:

2.看上面的图,看到Java Resources,进入,单击它,创建一个包:包名 bean ,然后在下面创建一个Bean[名称:Bean.java].然后在JSP页面里面引用..

3.就可以了.[如果还是不行,可以重启一下TOMCAT服务器.]