首先加入jar包(Fileupload)前端
在网页中使用表单提交的时候,提交方式必须是post提交方式,编码必须是multipart/form-data,还有就是要文件上传的文本框,必须给它起名字,如图所示:java
其中划横线的就是要注意的地方。web
还须要在springmvc的配置文件中配置文件上传解析器正则表达式
<!-- 配置上传文件解析器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 设置上传文件的字节大小 --> <property name="maxUploadSize" value="9999999"></property> </bean>
其中bean标签的id必须叫multipartResolver,否则程序会报错误。spring
在控制层controller里想要实现文件上传的功能的说明;服务器
@RequestMapping("upload") public String upload(MultipartFile myfile,HttpServletRequest request,Users user) { String path=request.getServletContext().getRealPath("/upload"); request.setAttribute("path", path); System.out.println(path); File file=new File(path); if(file.exists()) { file.mkdirs(); } String name=myfile.getOriginalFilename(); user.setPhoto(name); File targetfile=new File(path+"/"+name); try { FileUtils.writeByteArrayToFile(targetfile, myfile.getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } request.setAttribute("u", user); return "login"; }
在该方法的括号里获得文件的对象,String path=request.getServletContext().getRealPath("/upload");这句话是经过request获得上传文件的真实路径,也就是在服务器中的位置mvc
File file=new File(path); if(!file.exists()) { file.mkdirs(); }
此代码是获取一个新的文件对象,若是没有这个路径,那么就从新建立一个新的路径。有就正常执行下面的代码。
String name=myfile.getOriginalFilename();获取的是文件名
File targetfile=new File(path+"/"+name);是获得文件的整个路径;
try { FileUtils.writeByteArrayToFile(targetfile, myfile.getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } request.setAttribute("u", user); return "login"; }
是为了把文件写入到该路径下。
建立一个包存放Interceptor的这个类而且实现HandleInterceptor的接口这,而后重写接口里面的方法app
package HandleInterceptors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import com.zhiyou100.lw.bean.Users; public class MyInterceptors implements HandlerInterceptor{ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { // TODO Auto-generated method stub } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { // TODO Auto-generated method stub } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { if(request.getSession().getAttribute("u")==null) { response.sendRedirect("login.do"); return false; } return true; } }
这个方法是在控制层处理完以后执行的,最后执行,用于关闭一些资源的方法ide
这是这也是在控制层处理完后执行的post
这个方法是在控制层处理前执行的,通常在这里执行拦截的功能,
把建立的类配置到springmvc文件中,如图:
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/user/**"/> <mvc:exclude-mapping path="/user/login.do"/> <mvc:exclude-mapping path="/user/logindo.do"/> <bean class="HandleInterceptors.MyInterceptors"></bean> </mvc:interceptor> </mvc:interceptors>
<mvc:mapping path="/user/**"/> 是把拦截的文件全部文件写入到path中
<mvc:exclude-mapping path="/user/login.do"/> <mvc:exclude-mapping path="/user/logindo.do"/>它们都是被放行的文件,程序不拦截它们
和controller控制层的代码配合实现了拦截功能。
第一步引入相关的jar包有:
校验须要用到的jar包,缺一不可。
在实体类中加入注解
@NotEmpty(message=“用户名不能为空”),这个是不能为空校验的注解,message中的类容是提示内容,错误后提示
@Length(min=6,max=12,message=“密码长度在6~12个字符之间”),这个是限制长度的注解,min是最少长度,max是最长长度
@Pattern(regexp=“。。。。。”)这个是对手机号码的校验。双引号里面的是正则表达式
在控制层接收参数的代码
在使用注解的实体类以前加上@Valid,表明的是对该对象进行校验,BindingResult br,表明的是封装全部的错误到这个对象里面
br.hasErrors,这个方法是判断是否有错误信息的,有的话就进入里面,br。getFieldErrors,是得到对象里面的全部信息,包括属性名,和错误信息
若是想让这些信息可以在前端页面上显示出来,就得想一个方法,就是把它封装到集合里面,页面中就直接点键名就能调用此属性名的错误信息了
就new一个map集合,for循环全部的错误信息,而后获得错误信息的属性名,和错误信息的内容,将属性名当作键,内容当作值,存入到map集合里,
最后把集合随着跳转就把数据传送到页面中去了
页面接收显示信息的代码:
根据键值获取对象。