zoukankan      html  css  js  c++  java
  • SpringMVC学习日志三

    一、回顾

    1.1 如果接受的参数为日期时间类型,需要在controller中进行处理。

         @InitBinder

         使用实体类封装时间类型 @DateTimeFormat

    1.2 如何保存数据让网页获取该数据。

      ModelAndView:

      Model: 默认为request作用域

      Map:

      HttpServletRequest:

      HttpSession:

      @SessionAttributes(name={})

    1.3 处理静态资源。

        如果DispatcherServlet处理的请求地址为/,那么它也会处理静态资源。

      在配置文件中使用<mvc:default-servlet-handler> 不处理静态资源。

    1.4 如何使用重定向。Redirect

    1.5 Springmvc 完成ajax功能。

        Ajax时服务器响应的数据类型。 html, json

        响应的结果是html @ResponseBody 但是它会出现乱码。StringHttpMessageConvert.

        响应的结果是Json类型。需要借助jackson的jar包以及@ResponseBody 

    二、文件上传

      1.导入jar包

      2.网页。

      表单必须是post提交,编码必须是multipart/form-data  文件上传文本框必须起名。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <form action="addStudent" method="post" enctype="multipart/form-data" >
            姓名:<input type="text" name="name"><br/> 
            年龄:<input type="text" name="age"><br/> 
            请选择上传的文件:<input type="file" name="myfile" /><br /> 
            <input type="submit" value="上传">
        </form>
    </body>
    </html>

      3.springmvc中配置文件上传解析器。

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

      4.在控制层处理代码

    package com.zhiyou100.klb.controller;
    
    import java.io.File;
    import java.io.IOException;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.commons.io.FileUtils;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.multipart.MultipartFile;
    
    @Controller
    public class UploadController {
    
        @RequestMapping("upload")
        public String upload(MultipartFile myfile,HttpServletRequest request) {
            //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 = myfile.getOriginalFilename();
            System.out.println(name);
            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";
        }
    }

    三、拦截器(拦截都是控制层的地址。 filter: )

      1.创建一个类实现接口 HandlerInterceptor

      2.重写接口的中方法

    package com.zhiyou100.klb.interceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    public class MyInterceptor implements HandlerInterceptor {
    
        @Override
        public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
                throws Exception {
            System.out.println("请求处理完成后执行的方法");
    
        }
    
        @Override
        public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
                throws Exception {
            System.out.println("==========");
    
        }
    
        @Override
        public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
            // TODO Auto-generated method stub
            System.out.println("起始点");
            return true;//如果返回true表示允许通过
        }
    
    }

      3.把创建的类配置到springmvc文件中。

      <!-- 配置拦截器 -->
        <mvc:interceptors>
            <!-- 可配置多个拦截器 -->
            <mvc:interceptor>
                <!-- **表示user下所有的子目录以及请求地址 -->
                <mvc:mapping path="/user/**"/>
                <mvc:exclude-mapping path="/user/list.do"/>
                <bean class="com.zhiyou100.klb.interceptor.MyInterceptor"></bean>
            </mvc:interceptor>
        </mvc:interceptors>

     四、数据校验

      1.导入jar包

      2.在相应的实体类中加入注解

       3.在控制层接受参数时。

        @RequestMapping("register")    //requestMapping:表示的就是你的访问地址
        public String register(@Valid Users user,BindingResult br,Model model) {
            if(br.hasErrors()) {
                List<FieldError> fieldErrors = br.getFieldErrors();
                Map<String,Object> errorMsg = new HashMap<>();
                for(FieldError f:fieldErrors) {
                    errorMsg.put(f.getField(), f.getDefaultMessage());
                }
                model.addAttribute("errorMsg", errorMsg);
                return "register";
            } else {
                list.add(user);
                return "forward:list";
            }
        }

      4.在.jsp文件中接收错误信息

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        欢迎注册
        <form action="/SpringMVC-user/user/register" method="post">
            账号:<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="注册">
            <input onclick="location.href='javascript:history.go(-1)'" type="button" value="返回">
        </form>
    </body>
    </html>

      5.常见注解

  • 相关阅读:
    C++异常第二篇---C++标准库异常类exception的使用
    C++异常(exception)第一篇--综合讲解
    libconfig第二篇----两个小例子
    libconfig第一篇———使用指南
    log4cxx第三篇----使用多个logger
    kafka第五篇
    kafka第四篇--快速入门(如何使用kafka)
    UVA 455(最小周期)
    UVA1584(环状序列)
    UVA1583(最小生成元)
  • 原文地址:https://www.cnblogs.com/kklb/p/11462419.html
Copyright © 2011-2022 走看看