springMVC在控制层参数的设置

时间:2019-09-04
本文章向大家介绍springMVC在控制层参数的设置,主要包括springMVC在控制层参数的设置使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

文件的上传

首先加入jar包(Fileupload)

?

?

在网页中使用表单提交的时候,提交方式必须是post提交方式,编码必须是multipart/form-data,还有就是要文件上传的文本框,必须给它起名字,如图所示:

?

?

?其中划横线的就是要注意的地方。

还需要在springmvc的配置文件中配置文件上传解析器

    "multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        
        "maxUploadSize" value="9999999">
    
    

其中bean标签的id必须叫multipartResolver,不然程序会报错误。

在控制层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得到上传文件的真实路径,也就是在服务器中的位置

 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的接口这,然后重写接口里面的方法

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;
        
    }

}

?

?

?这个方法是在控制层处理完之后执行的,最后执行,用于关闭一些资源的方法

?

?

?这是这也是在控制层处理完后执行的

?

这个方法是在控制层处理前执行的,一般在这里执行拦截的功能,

把创建的类配置到springmvc文件中,如图:

     
        
            "/user/**"/>
            "/user/login.do"/>
            "/user/logindo.do"/>
            
            class="HandleInterceptors.MyInterceptors">
        
        
     
   是把拦截的文件所有文件写入到path中
 
 它们都是被放行的文件,程序不拦截它们
和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集合里,

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

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

根据键值获取对象。

?

$flag 上一页 下一页