美文网首页
一起来学习SpringMVC:文件上传,ajax&jso

一起来学习SpringMVC:文件上传,ajax&jso

作者: __y | 来源:发表于2018-06-09 11:24 被阅读35次

    前言:
    继续学习SpringMVC的内容,本次的内容如下:

    • 文件上传
    • Ajax,json
    • 拦截器
      废话不多说,进入正题

    1.文件上传

    导入相关jar包

    image.png

    配置springmvc的配置解析器

    <!-- 文件上传配置 -->
        <bean id="multipartResolver"  
            class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <!-- 设置编码格式 -->  
            <property name="defaultEncoding" value="utf-8"></property> 
            <!-- 设置文件大小 -->  
            <property name="maxUploadSize" value="10485760000"></property>
            <!-- 设置缓冲区大小 -->  
            <property name="maxInMemorySize" value="40960"></property>  
        </bean> 
    

    JSP页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <form action = "upload.action" method="post", enctype="multipart/form-data">
            文件:<input type="file" name = "file"/><input type="submit" value="上传"/>
        </form>
    </body>
    </html>
    
    

    Controller

    @Controller
    public class FileUploadController {
        @RequestMapping(value = "/upload")
        public String fileUpload(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request) {
            //获取上传位置
            String  path = request.getRealPath("/fileupload");
            //获取文件名
            String fileName = file.getOriginalFilename();
            try {
                InputStream is = file.getInputStream();
                OutputStream os = new FileOutputStream(new File(path,fileName));
                int len = 0;
                byte[] buffer = new byte[400];
                while((len = is.read(buffer)) != -1) {
                    os.write(buffer,0,len);
                }
                os.close();
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "redirect:index.jsp";
    
        }
    }
    
    

    2.Ajax,json

    导入jar包

    image.png

    配置json转换器

         <!--  json配置 -->
         <!-- 用于将对象转换为 JSON  -->  
        <bean id="stringConverter"  
            class="org.springframework.http.converter.StringHttpMessageConverter">  
            <property name="supportedMediaTypes">  
                <list>  
                    <value>text/plain;charset=UTF-8</value>  
                </list>  
            </property>  
        </bean>  
        <bean id="jsonConverter"  
            class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>  
       
        <bean  
            class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
            <property name="messageConverters">  
                <list>  
                    <ref bean="stringConverter" />  
                    <ref bean="jsonConverter" />  
                </list>  
            </property>  
        </bean>  
    

    Controller

    public class JsonController {
        @RequestMapping("/json")
        @ResponseBody
        public List<User> json() {
            List<User> list = new ArrayList<User>();
            list.add(new User(1,"json"));
            list.add(new User(2,"ajax"));
            list.add(new User(3,"cookie"));
            return list;
        }
    }
    
    

    3.拦截器

    SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。

    实现HandlerInterceptor接口

    public class MyInterceptor implements HandlerInterceptor {
        //在请求方法处理前执行
        //用于用户认证校验、用户权限校验
        //如果返回false表示拦截不继续执行请求的方法,如果返回true表示放行
        @Override
        public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
            System.out.println("处理前");
            return true;
        }
        //在请求方法处理前执行
        //如果需要向页面提供一些公用 的数据或配置一些视图信息,使用此方法实现 从modelAndView入手
        @Override
        public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
            System.out.println("处理后");
        }
        //在dispatherServlet处理后执行
        //作系统 统一异常处理,进行方法执行性能监控,在preHandle中设置一个时间点,在afterCompletion设置一个时间,两个时间点的差就是执行时长
        //实现 系统 统一日志记录
        @Override
        public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
    
        }
    }
    

    配置拦截器

      <mvc:interceptors>
            <mvc:interceptor>
               <!-- 指明哪些请求需要被拦截
                    /login.do 表示login.do需要被拦截
                    /user/add.do 表示/user/add.do请求要被拦截
                    /* 表示项目路径下的所有请求被拦截
                        可以拦截: /login.do  /add.do  /user.do /sys.do等
                    /**表示项目路径及其子路径下的所有请求被拦截=所有请求被拦截
                        可以拦截: /login.do  /add.do  /user.do /sys.do
                        /user/add.do
                 -->
                <mvc:mapping path="/**"/>
                
                <bean class="cn.springmvc.interceptor.MyInterceptor"></bean>
            </mvc:interceptor>
        </mvc:interceptors>
    

    指明哪些请求需要被拦截

    • /login.do 表示login.do需要被拦截
    • /user/add.do 表示/user/add.do请求要被拦截
    • /* 表示项目路径下的所有请求被拦截
      可以拦截: /login.do /add.do /user.do /sys.do等
    • /**表示项目路径及其子路径下的所有请求被拦截=所有请求被拦截
      可以拦截: /login.do, /add.do , /user.do ,/sys.do ,/user/add.do
      这里用的是拦截全部请求
      效果:
      image.png

    4.拦截器的举例应用(登录拦截)

    Cotroller

    @Controller
    public class LoginController {
        @RequestMapping(value = "/login")
        public String login(String name, String password, HttpSession session) {
            System.out.println(name + password);
            if("zhangsan".equals(name) && "123".equals(password)) {
                session.setAttribute("name","zhangsan");
                return "redirect:/index.jsp";
            }
            return "redirect:/login.jsp";
        }
        @RequestMapping(value = "/add")
        public String add() {
            System.out.println("add");
            return "redirect:/index.jsp";
        }
    }
    

    拦截器:

    public class LoginInterceptor implements HandlerInterceptor {
        private List<String > allowedPass;
        @Override
        public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
            //获得请求的路径
            String path = httpServletRequest.getRequestURL().toString();
            HttpSession session = httpServletRequest.getSession();
            String name = (String)session.getAttribute("name");
            //如果session里面已经有值了直接放行
            if(name != null) {
                return true;
            }
            for (String str:
                 allowedPass) {
                if(path.endsWith(str))
                    return true;
            }
            httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/login.jsp");
            return false;
        }
    
        @Override
        public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
    
        }
    
        @Override
        public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
    
        }
    
        public void setAllowedPass(List<String> allowedPass) {
            this.allowedPass = allowedPass;
        }
    }
    
    

    配置拦截器

     <mvc:interceptors>
            <mvc:interceptor>
                <!-- 指明哪些请求需要被拦截
                    /login.do 表示login.do需要被拦截
                    /user/add.do 表示/user/add.do请求要被拦截
                    /* 表示项目路径下的所有请求被拦截
                        可以拦截: /login.do  /add.do  /user.do /sys.do等
                    /**表示项目路径及其子路径下的所有请求被拦截=所有请求被拦截
                        可以拦截: /login.do  /add.do  /user.do /sys.do
                        /user/add.do
                 -->
                <mvc:mapping path="/**"/>
                <bean class="cn.springmvc.interceptor.LoginInterceptor">
                    <property name="allowedPass">
                        <value>login.action</value>
                    </property>
    
                </bean>
            </mvc:interceptor>
        </mvc:interceptors>
    

    效果图:
    hello.action请求被拦截跳转到登录界面

    image.png
    image.png
    提交错误的账号密码,依然是登录界面
    image.png

    提交正确的账号密码


    image.png

    相关文章

      网友评论

          本文标题:一起来学习SpringMVC:文件上传,ajax&jso

          本文链接:https://www.haomeiwen.com/subject/gxxzsftx.html