网站导航栏目设计内容依据wordpress按住标题没有显
news/
2025/9/23 2:20:52/
文章来源:
网站导航栏目设计内容依据,wordpress按住标题没有显,iis网站改端口,线上 网站建设 商务信息目录 1.拦截器1.1.什么是拦截器#xff1f;1.2 拦截器的API1.3 拦截器的执行顺序1.5 自定义拦截器1.5 登录拦截器案例 2.文件上传2.1 添加依赖2.2 配置文件上传解析器2.3 编写控制器2.4 编写jsp页面2.5 注意事项 3.全局异常处理器3.1 异常处理思路3.2 创建异常处理器3.3 编写异… 目录 1.拦截器1.1.什么是拦截器1.2 拦截器的API1.3 拦截器的执行顺序1.5 自定义拦截器1.5 登录拦截器案例 2.文件上传2.1 添加依赖2.2 配置文件上传解析器2.3 编写控制器2.4 编写jsp页面2.5 注意事项 3.全局异常处理器3.1 异常处理思路3.2 创建异常处理器3.3 编写异常类3.4 配置异常处理器 1.拦截器
1.1.什么是拦截器
Spring MVC中的拦截器Interceptor类似于Servlet中的过滤器Filter它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、判断用户是否登录等。
拦截器依赖于web框架在实现上基于Java的反射机制属于面向切面编程AOP的一种运用。
过滤器与拦截器的区别拦截器是AOP思想的具体应用。
过滤器 servlet规范中的一部分任何java web工程都可以使用 在url-pattern中配置了/*之后可以对所有要访问的资源进行拦截
拦截器 拦截器是SpringMVC框架自己的只有使用了SpringMVC框架的工程才能使用 拦截器只会拦截访问的控制器方法 如果访问的是jsp/html/css/image/js是不会进行拦截的
1.2 拦截器的API
定义拦截器需要实现HandlerInterceptor接口该接口中有三个方法
preHandle()
控制层执行器方法前的拦截器该方法时在控制层执行器方法前调用当该方法返回结果为true则继续调用下一个拦截器如果已经是最后一个拦截器则调用控制层中的执行器方法当该方法返回结果为false则不会继续执行控制层执行器中的方法
postHandle()
控制层方法返回时拦截器该方法是控制层执行器方法执行之后由DispatcherServlet在将结果响应给浏览器前调用的方法
afterCompletion()
控制层方法结束后的拦截器该方法在请求业务处理执行完全结束之后由DispatcherServlet调用执行
1.3 拦截器的执行顺序
单个拦截器的执行顺序 preHandle() → postHandle() → afterCompletion() 多个拦截器的执行顺序 先按顺序执行所有拦截器的 preHandle方法 如果任何一个拦截器preHandle方法返回false。直接跳出不执行目标方法 如果当前拦截器prehandler返回为true。则执行下一个拦截器的preHandle方法如果当前拦截器返回为false。直接倒序执行所有已经执行了的拦截器的 afterCompletion方法 所有拦截器都返回True。执行目标方法 倒序执行所有拦截器的postHandle方法。 前面的步骤有任何异常都会直接倒序触发 afterCompletion 页面成功渲染完成以后也会倒序触发 afterCompletion
1.5 自定义拦截器
我们要想自定义拦截器 要求必须实现HandlerInterceptor 接口。
创建拦截器
配置web.xml 和 springmvc-servlet.xml 文件
package com.by.interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class CustomHandlerInterceptor implements HandlerInterceptor {/*** 在控制器方法调用前执行* 返回值为是否中断* true表示继续执行下一个拦截器或处理器* false则会中断后续的所有操作所以我们需要使用response来继续响应后续请求*/Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object object) throws Exception {System.out.println(HandlerInterceptor preHandle ....);return true;}/*** 在控制器方法调用后解析视图前调用我们可以对视图和模型做进一步渲染或修改* 可在modelAndView中加入数据比如当前时间*/Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object object, ModelAndView modelAndView) throws Exception {System.out.println(HandlerInterceptor postHandle ....);}/*** 整个请求完成即视图渲染结束后调用这个时候可以做些资源清理工作或日志记录*/Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object object, Exception e) throws Exception {System.out.println(HandlerInterceptor afterCompletion ....);}
}配置拦截器 !--配置拦截器 --mvc:interceptorsmvc:interceptor!-- 匹配的是url路径 --mvc:mapping path/**/mvc:mappingbean classcom.by.interceptor.CustomHandlerInterceptor/bean/mvc:interceptor/mvc:interceptors测试 编写controller
Controller
RequestMapping(/account)
public class AccountController {RequestMapping(/findAccount12)public String findAccount12(Model model) {model.addAttribute(msg, 欢迎你 springmvc);System.out.println(controller的方法执行了......);return success;}
}1.5 登录拦截器案例
创建拦截器
package com.by.interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LoginInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object object) throws Exception {String user (String) request.getSession().getAttribute(user_session);if (user ! null) {//已经登录继续执行System.out.println(获得用户信息user);return true;} else {//未登录跳转到登录页面response.sendRedirect(request.getContextPath() /login.jsp);return false;}}
}配置拦截器 mvc:interceptorsmvc:interceptor!-- 匹配的是url路径 --mvc:mapping path/**/mvc:mappingbean classcom.by.interceptor.LoginInterceptor/bean/mvc:interceptor/mvc:interceptors测试
编写controller
Controller
RequestMapping(/account)
public class AccountController {RequestMapping(/findAccount13)public String findAccount13(Model model) {model.addAttribute(msg, 欢迎你 springmvc);System.out.println(controller的方法执行了......);return success;}
}在index.jsp里面定义超链接
%session.setAttribute(user_session,User{name:张二狗,age:18});
%
a href/account/findAccount13登录拦截器/a2.文件上传
2.1 添加依赖
!--文件上传--
dependencygroupIdcommons-fileupload/groupIdartifactIdcommons-fileupload/artifactIdversion1.3.1/version
/dependency2.2 配置文件上传解析器
!--配置文件上传解析器--
bean idmultipartResolver classorg.springframework.web.multipart.commons.CommonsMultipartResolverproperty namemaxUploadSize value5242880 /property namedefaultEncoding valueUTF-8 /
/bean2.3 编写控制器
编写controller
Controller
RequestMapping(/account)
public class AccountController {RequestMapping(path/upload)public String upload(HttpServletRequest request, MultipartFile upload,Model model) throws IOException {System.out.println(springmvc方式的文件上传);//获取要上传的文件目录String path request.getSession().getServletContext().getRealPath(/uploads);System.out.println(path:path);//根据文件上传的目录创建File对象如果不存在则创建1个File对象File file new File(path);if(!file.exists()){//创建一个file对象file.mkdirs();}//获取文件上传名称String filename upload.getOriginalFilename();//完成文件上传upload.transferTo(new File(path,filename));model.addAttribute(msg, 欢迎你 springmvc);return success;}
}2.4 编写jsp页面 form action/account/upload methodpost enctypemultipart/form-data文件: input typefile nameupload/inputinput typesubmit value提交/form2.5 注意事项
form表单必须加上enctypemultipart/form-datamethod属性取值必须是Post提供一个文件选择域input typefile/
3.全局异常处理器
即使对大部分情况都做了预判和异常处理但程序有时会因为莫名奇妙的原因发生错误并且错误信息肯定会抛在浏览器页面上这样用户观感特别不好所以需要进行全局异常处理。
3.1 异常处理思路
系统的dao、service、controller出现都通过throws Exception向上抛出最后由springmvc前端控制器交由异常处理器进行异常处理如下图 3.2 创建异常处理器
Component
public class CustomExceptionResolver implements HandlerExceptionResolver {Overridepublic ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) {ModelAndView modelAndView new ModelAndView();modelAndView.addObject(message, ex.getMessage());modelAndView.setViewName(error);return modelAndView;}
}3.3 编写异常类
Controller
RequestMapping(/account)
public class AccountController {RequestMapping(/findAccount14)public String findAccount14(Model model) {model.addAttribute(msg, 欢迎你 springmvc);//模拟异常信息int i 10/0;return success;}
}3.4 配置异常处理器
bean classcom.by.exception.CustomExceptionResolver /bean
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911102.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!