springMVC在控制层参数的设置


文件的上传

首先加入jar包(Fileupload)

 

 

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

 

 

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

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

<!-- 配置上传文件解析器 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置上传文件的字节大小 -->
        <property name="maxUploadSize" value="9999999"></property>
    
    </bean>

其中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文件中,如图:

     <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集合里,

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

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

根据键值获取对象。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM