1.图片的上传
- 我写的是web项目,所以需要先导入jar包
commons-fileupload-1.3.1.jar
commons-io-2.2.jar - 表单的提交方式必须为post 而且编码必须为二进制编码。enctype=“multipart/form-data”
就是类似于下面的代码
<form action="${pageContext.request.contextPath}/house/updateHouseById?h_id=${house.h_id}" method="post" enctype="multipart/form-data">
</form>
- 再springmvc中加入文件上传解析器,配置文件的最大上传大小。
<!-- 配置文件上传解析器 -->
<bean id = "multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10240000"></property>
</bean>
- controller:
@RequestMapping("addEmp")
public String addEmp(Emp emp, MultipartFile myfile, HttpServletRequest request) {
// 把文件放到指定服务器下的真实路径。
String path = request.getSession().getServletContext().getRealPath("/image");
String head_img = myfile.getOriginalFilename();// 获取上传文件的名称
String fileName = "";
if (head_img == null || head_img.equals("")) {
fileName = "default.jpg"; //没有选择上传的文件,采用默认值的形式。
} else {
String hz = head_img.substring(head_img.lastIndexOf(".")); // 得到文件的后缀
fileName = new Date().getTime() + hz;
File target = new File(path + "/" + fileName); // 获取文件上传的真实路径
try {
myfile.transferTo(target); // 把文件保存到真实路径下。
} catch (IllegalStateException | IOException e) {
return "addPage"; // 文件上传失败
}
}
emp.setHead_img("image/" + fileName);
empService.insertEmp(emp); // 把文件名以及员工的信息保存到数据库中
return "redirect:list";
}
需要了上面的还需要注意的就是:jsp中关于图片的信息需要单独传到controller里面,这样就需要对应的值要一样。都对应成myfile
事后又学习了如何部署tomcat配置虚拟路径保存、访问图片。大佬们写好的,我就直接引用过来了。
https://www.jianshu.com/p/c8379584feb4
https://www.cnblogs.com/yangshuyuan1009/p/10954154.html
2.分页
-
导入相关的jar
jsqlparser-2.0.jar
pagehelper-5.1.10.jar -
再spring配置文件中加入
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:Mybatis-config.xml"></property>
//配置有关分页
<property name="plugins">
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</property>
</bean>
- service中代码进行修改,只需要在对应的Handler下面加上这个就可以了
String p = request.getParameter("p");
int currentPage = 1;
if(p != null) {
currentPage = Integer.parseInt(p);
}
PageHelper.startPage(currentPage,4);
PageInfo<House> pageInfo = new PageInfo<>(list);
model.addAttribute("pageinfo", pageInfo);
return "flats/list";
3.在项目中出现的异常
这里只说碰到的难处理的,在网上不好找的。
- 这个异常碰到的时候超级恶心,真的我找了将近两个小时,不多说,直接上图
当时碰到这个的时候,我当时也按照一些文章里面的方法,看了一下我有没有改动namespace,和xml中每个id和接口的方法名对应不。看了一遍并没有发现错误,并且当时还检查了一遍spring中配置mybatis的地方,也没有发现错误。我又仔细看了一下报错的异常,发现底下还有一个异常。
我想起来,之前都可以运行,但是新写了一个添加方法。我又重新看了一下那个新的添加方法。
发现自己把parameterType写成了parameterMap,当时是alt+/,没有仔细看,导致了这个异常,把这个地方一改就可以了。事后也了解了这两个的区别。
引用别人写好的一篇文章,有详细的例子说明
https://blog.csdn.net/zwj1030711290/article/details/54983118
- 就是关于list.remove()使用的时候,一个小坑。
直接引用别人的了,这里懒得再描述了。
https://blog.csdn.net/pelifymeng2/article/details/78085836
4.总结
总结一下这次在课题的过程中发现的问题:就是自己对于web方面的当时没有学好,延误了自己的课题进度,也耽误了我们组内其他人的进度,需要对web方面进行再一步的学习。还有就是在处理问题的方面,往往是去找第一个异常的问题,但是当第一个解决不了的时候,可以看一下后面的异常,说不定是由后面的导致前面的报错呢。