有人表示奇怪,为什么括号里面不能加入参数,当然,我说的是这种情况:
这里的add只能加入product的参数而不能加方法名传进来的ProductVo的参数,这是为什么呢,原因在这里:
ProductVo里面有一个这样的封装方法,这个封装方法是SpringMVC里面的依赖的方法,在Service里面还没有SpringMVC的方法(因为这个Controller是调用Service的封装方法),所以你直接用是用不了的,
解决方法就是把这个Vo转换为dto(数据传输对象)这个dto可以在不同的设计模式下把数据进行传输。
在Service模块下面新建一个dto类,并且编写dto类,如下:
其中需要输入流,InputStream就是输入流,需要引入这个进行输入文件数据,String filename是给文件命名,因为
这个文件需要名字
最后需要这个,文件的上传路径,需要把文件通过输入流并且获取文件的上传路径来让文件可以上传上来给所需要的相关文件里面。
Controller需要这么写,写个propertyUtils.copyProperties方法把dto传输数据的传输过来,并且用try,catch包住它,并且传入这个dto的输入流,实行让这个Vo得到文件,并且获取输入流,通过输入流改变文件。
再补充一下,这是整体的方法:
输入流,得到文件名字,设置上传路径,在productService里面添加productDto,把参数传进去
这里要说明一个知识点,就是每次一个方法名像这种
要不就是跟一个映射文件在一起实现它的作用
要不就是要建一个实现类来实现它的作用,比如这个service类:
第一个Service是起到一个起方法名的作用,也是一个接口
你也可以理解为接口都需要一个实现类去实现它吧。
这是接口的方法
这是接口的实现类,虽然没有写它的方法,但是这个是实现类,一般会把它的实现接口的方法写上,实现类的方法才是有作用的,接口类的方法只等着被调用。
然后看这里,要默认一个文件输出的位置,作为上传文件的位置(new一个输出文件位置)
讲解一下这个是什么意思
这个就是抽取文字名的一部分作为文件名,以往是写数字作为参数的,比如0,4,这就表示截取开头部分到第四个字符,作为文件名。
这个字符串就是截取他文件名后缀的意思
所以这里return的就是文件名的最终结果,先是一个ID,然后到一个toString表达,最后再到后缀名
这里就是确定文件名,用Dto数据传输来得到文件名
然后再获取文件传输的路径,得到它的上传路径
最终copy以恶搞输入流,文件输出流(这个好像是上传文件的一个方法,通过输入输出流传输文件)
输入输出流的话,很可能需要抛出异常,这些时候是最容易出现异常的了。
写一个抛出异常的类,其实也很简单,主要就是写一个类去继承Exception,然后右键点击gen开头的那串选项,选择Ovi开头的选项,把前面的那个选项里面的全部方法除了最后一个之外就选中,并且创建,就得出这样的方法了。
这里错误的话应该怎么办,首先这句话的意思就是跟上一个图片是有一定联系的,就是抛出异常,FieUploadException是一个异常的文件(上个图片有讲),返回这个抛出异常的文件亮哥参数,给它的其中一个方法
可以看到它还亮了起来,说明这个方法被调用了,平时这个位置是返回值类型的意思,就是写在这里的一般是返回值类型。好了还没说到重点,
这里需要怎么解决异常呢,点击这个即可
然后再加上一个保存到数据库的方法。这个是把DTO转换为PO,也就是DTO这个数据传输对象,转换为PO(PO是数据库的一条记录,DTO转换为PO的意思就是把数据传输对象转换为数据库的一条记录的意思)也就是说DTO能通过这个方法写入到数据库当中
这里有错误,需要处理一下,
把这部分都删掉
后来变成了这样:
这里为什么加上product的这些东西呢,因为前面有new一个对象:
这个product里面有
像其他的setImage可以理解是什么意思,但是ProductType后面的是什么意思呢,原来ProductType是一个类,里面也有一些方法比如id,name,状态码这些的get,set方法,所以就需要把它new一个对象出来,具体把他们new一个对象出来有什么作用呢,看下一步,setId(就是把数据传输的结果用来改ProductTypeId的参数,并且改变productType里面的参数,改变完后productType就获得了所对应的Id,然后把productType作为参数传入到product的方法里面,去改变ProductType的类型。
最后插入这个Dao方法中的插入方法insert,去插入这个product的数据,Dao方法主要负责操作数据库的,这个product的在上面的各种参数的传入后,就可以通过Dao传入数据库了。
不好意思各位,处理异常在这里还是不要了,直接换成add的那个异常处理方法,把catch方法删了
这样既可
然后我们还需要在Springmvc的映射文件里面配置上这个上传文件的配置文件
需要在JSP中配置上这些东西,这是个页面中其中一个功能的JSP页面,配置上这些设置即可