springMVC在控制层参数的设置

文件的上传

首先加入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集合里,

最后把集合随着跳转就把数据传送到页面中去了

页面接收显示信息的代码:

根据键值获取对象。

相关文章
相关标签/搜索