springmvc的拦截器,全局非常处理处罚和文件上传

[复制链接]
发表于 2025-11-21 17:30:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
拦截器:

拦截不符合规则的,放行符合规则的。 等价于过滤器。

拦截器只拦截controller层API接口。
怎样界说拦截器。

界说一个类并实现拦截器接口
  1. public class MyInterceptor implements HandlerInterceptor {
  2.    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  3.        //获取session对象
  4.        HttpSession session=request.getSession();
  5.        //获取session当前用户的信息
  6.        Object userinfo = session.getAttribute("userinfo");
  7.        if(userinfo==null){
  8.            //没有登录,跳转到登录页面
  9.            response.sendRedirect("/login.jsp");
  10.            return false;
  11.        }
  12.        return true; //如果返回值为true,表示拦截器放行。否则,拦截器不放行
  13.    }
  14. }
复制代码
注册拦截器并设置拦截规则--springmvc设置文件中
  1.   <!--注册自定义拦截器以及拦截规则-->
  2.    <mvc:interceptors>
  3.        <mvc:interceptor>
  4.            <!--path:拦截的路径 /**表示拦截多层路径-->
  5.            <mvc:mapping path="/**"/>
  6.            <!--排除的路径。-->
  7.            <mvc:exclude-mapping path="/user/login"/>
  8.             <!--放置自定义的拦截器类-->
  9.            <bean class="com.aaa.interceptor.MyInterceptor"/>
  10.        </mvc:interceptor>
  11.    </mvc:interceptors>
复制代码
全局非常处理处罚

假如controller发生非常,我们须要对controller层中的全部方法都举行处理处罚。如许比力贫困。我们可以对全部controller中的接口提供一个同一的非常处理处罚。
界说全局非常类
  1. //全局异常处理类.
  2. @ControllerAdvice
  3. public class MyGlobalException {
  4.    @ExceptionHandler(Exception.class) //当发生Exception类型的异常会执行该方法,并异常对象传递给该方法的参数。
  5.    @ResponseBody
  6.    public String handlerException(Exception e){
  7.        System.out.println(e.getMessage());
  8.        System.out.println("错误~~~~~~~~~~~~~~~~~~~~~~~~~");
  9.        return "error2222222222222222222222";//经过视图解析器: /views/error.jsp
  10.    }
  11.    @ExceptionHandler(ArithmeticException.class)
  12.    @ResponseBody
  13.    public String handlerArithmeticException(Exception e){
  14.        System.out.println("错误****************************");
  15.        return "error2222222222222222222";
  16.    }
  17. ​
  18. }
  19. ​
复制代码
留意:包管springmvc可以或许扫描到该非常处理处罚类
  1. function loadEmp(){
  2.        $.ajax({
  3.            url:"/emp/list",
  4.            type:"get",
  5.            dataType:"json",
  6.            //服务器响应成功
  7.            success:function(data){
  8.                console.log(data)
  9.                var str="";
  10.                for(var i=0;i<data.length;i++){
  11.                    str+="<tr>"
  12.                    str+="<td>"+data[i].empId+"</td>"
  13.                    str+="<td>"+data[i].empName+"</td>"
  14.                    str+="<td>"+data[i].empJob+"</td>"
  15.                    str+="<td>"+data[i].empSalary+"</td>"
  16.                    str+="<td>"+data[i].dept.deptName+"</td>"
  17.                    str+="<td><a onclick='deleteEmp("+data[i].empId+")'>删除</a><a onclick='/views/update.jsp'>修改</a></td>"
  18.                    str+="</tr>"
  19. ​
  20.                }
  21.                document.getElementById("empBody").innerHTML=str;
  22.            },
  23.            //服务器响应故障
  24.            error: function (data){
  25.                console.log(data);
  26.            }
  27.        })
  28.    }
复制代码
文件上传

原理



完成文件上传--本地服务器生存

引入文件上传的依赖jar
  1.    <!--文件上传依赖-->
  2.    <dependency>
  3.      <groupId>commons-fileupload</groupId>
  4.      <artifactId>commons-fileupload</artifactId>
  5.      <version>1.5</version>
  6.    </dependency>
复制代码
设置文件上传剖析器
  1. <!--文件上传解析器-->
  2.    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  3.        <!--最大上传的大小。单位byte字节。5M=5*1024*1024-->
  4.        <property name="maxUploadSize" value="5242880"/>
  5.        <!--设置文件上传的编码-->
  6.        <property name="defaultEncoding" value="utf-8"/>
  7.    </bean>
复制代码
编写文件上传的页面
  1.   <%--文件上传的表单提交方式必须为post.而且需要设置表单提交的编码格式。enctype="multipart/form-data" 该类型表示既能上传文本又能上传文件。--%>
  2.   <form action="/upload" method="post" enctype="multipart/form-data">
  3.      选择文件:<input type="file" name="myfile"/><br>
  4.      姓名:<input type="text" name="username"/><br>
  5.      <input type="submit"/>
  6.   </form>
复制代码
编写上传的api接口
  1.  @RequestMapping("/upload")
  2.    public String upload(MultipartFile myfile, HttpServletRequest request) throws IOException {
  3.        //1.获取保存文件的路径
  4.        String realPath = request.getSession().getServletContext().getRealPath("/images");
  5.        //2.根据上面的路径创建文件对象
  6.        File file=new File(realPath);
  7.        //3.判断该文件夹是否存在
  8.        if(!file.exists()){
  9.            file.mkdirs();
  10.        }
  11.        //4.获取上传文件的名称. 获取登录者ip+登录者id+登录者的时间戳
  12.        String filename = UUID.randomUUID().toString().replace("-","")+myfile.getOriginalFilename();
  13.        //5.把上传的文件保存到指定服务器下的路径。
  14.        File target=new File(realPath+"/"+filename);
  15.        myfile.transferTo(target);
  16.        System.out.println("上传成功");
  17.        return "main";
  18.    }
复制代码
完成文件上传--文件生存到文件服务器


假如把文件存在本地服务器,服务器与服务器之间无法共享文件。我们须要一个专门存放文件的服务器。
可以自己搭建文件服务器[FastDFS Hadoop] 大概租第三方阿里云。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表