一、文件的上传
1.首先在lib中添加相应的jar包
2.建立jsp页面,表单必须是post提交,编码必须是multipart/form-data,文件上传文本框必须起名
<body>
<!-- 文件上传是上传到本地服务器下 而数据库中存放的是 图片的路径-->
<form action="upload" method="post" enctype="multipart/form-data">
请选择上传的文件:<input type="file" name="myfile"><br>
<input type="submit" value="上传"/>
</form>
</body>
3.在springmvc的配置文件中必须配置文件上传解析器
<!-- 配置文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置文件上传的大小 字节 -->
<property name="maxUploadSize" value="9999999"></property>
</bean>
4.在UploadController处理代码,接受页面传过来的文件
@Controller public class UploadController { @RequestMapping("upload") //HttpServletRequest:作用是为获取上传文件的路径 public String upload(MultipartFile myfile,HttpServletRequest request) { //把你上传的文件封装到MultipartFile中 //1.获取文件上传真实保存的路径 //一般情况下上传到服务器的目录下,获取网站根目录 String path=request.getServletContext().getRealPath("/upload"); System.out.println(path); //2.创建一个文件对象 File file=new File(path); if(!file.exists()) { //该路径不存在 file.mkdirs(); } //3.获取文件名 String name=System.currentTimeMillis()+myfile.getOriginalFilename(); File targetFile=new File(path+"/"+name); try { //把文件写入到指定的目录下 FileUtils.writeByteArrayToFile(targetFile, myfile.getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "redirect:/index.jsp"; } }
二、springmvc的拦截器设置(拦截的都是控制层的地址)
1.先创建一个Controller类
@Controller @RequestMapping("user") @SessionAttributes(names= {"name","password","registername","registerpass"}) //键名叫:name保存的作用域为session public class UserController { @RequestMapping("tologin") public ModelAndView tologin() { ModelAndView mv=new ModelAndView(); mv.setViewName("login"); return mv; } @RequestMapping("login") public String login(String name,String password,Model model,HttpSession session) { System.out.println("登录"); if(session.getAttribute("registername").equals(name)&&"123456".equals(password)) { model.addAttribute("name", name); model.addAttribute("password", password); return "forward:list"; }else { return "login"; } } @RequestMapping("toregister") public ModelAndView toregister() { ModelAndView mv=new ModelAndView(); mv.setViewName("register"); return mv; } @RequestMapping("register") public String register(String name,String password,Model model) { if(name!=null&&password!=null) { model.addAttribute("registername", name); model.addAttribute("registerpass", password); return "login"; }else { return "register"; } } @RequestMapping("list") public ModelAndView list() { ModelAndView mv=new ModelAndView("list"); User user1=new User("张三","123456",20); User user2=new User("李四","123456",20); User user3=new User("王五","123456",20); List<User> list=new ArrayList<>(); list.add(user1); list.add(user2); list.add(user3); mv.addObject("list",list); return mv; } @RequestMapping("delete") public String delete(HttpServletRequest request) { return "redirect:/index.jsp"; } }
2.创建一个类实现接口HandlerInterceptor,并重写接口中的方法
public class MyInterceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object arg2, Exception arg3) throws Exception { System.out.println("请求处理后执行该方法"); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView arg3) throws Exception { System.out.println("=============="); } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { System.out.println("处理请求等价于doFilter方法"); Object name=request.getSession().getAttribute("name"); if(name!=null) { return true;//如果返回true表示允许通过 }else { response.sendRedirect("../login.jsp"); return false; } } }
3.把创建的类配置到springmvc的配置文件中
<!-- 配置拦截器 -->
<mvc:interceptors>
<!-- 可配置多个拦截器 -->
<mvc:interceptor>
<!-- **表示user下所有的子目录以及请求地址,哪些请求路径经过拦截器 -->
<mvc:mapping path="/user/**"/>
<!-- 不包括要拦截的请求路径 -->
<mvc:exclude-mapping path="/user/login"/>
<mvc:exclude-mapping path="/user/tologin"/>
<mvc:exclude-mapping path="/user/register"/>
<mvc:exclude-mapping path="/user/toregister"/>
<bean class="com.zhiyou100.xz.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
三、数据校验(后台校验 hibernate validate)
1.引入相应的jar包
2.在相应的实体类中加入注解
public class User { @NotEmpty(message="用户名不能为空") //提示的错误信息 private String name; @Length(min=6,max=12,message="密码的长度在【6~12】之间") private String password; @Pattern(regexp="^(?:[1-9][0-9]?|1[01][0-9]|120)$") private int age; @Pattern(regexp="^1[3456789]\d{9}$",message="手机格式不正确") private String phone;
//要写get和set }
3.在控制层接受参数时
@RequestMapping("uregister") public String uregister(@Valid User user,BindingResult br,Model model) { //validate在验证第一个失败后仍会继续验证 //BindingResult br 把验证的所有的错误信息封装到BindingResult类中 if(br.hasErrors()) { //判断有没有错误信息 List<FieldError> fieldErrors=br.getFieldErrors(); Map<String, Object> errorMsg=new HashMap<String, Object>(); for(FieldError f:fieldErrors) { //System.out.println(f.getField()+"---"+f.getDefaultMessage()); errorMsg.put(f.getField(), f.getDefaultMessage()); } model.addAttribute("errorMsg", errorMsg); return "forward:../uregister.jsp"; } return "list"; }
4.建立jsp页面,并进行输入验证
<body> <form action="uregister" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="name" />${errorMsg.name }<br> 密码:<input type="text" name="password" />${errorMsg.password }<br> 手机号:<input type="text" name="phone" />${errorMsg.phone }<br> <input type="submit" value="注册"/> </form> </body>