2023年8月1日发(作者:)
什么是SpringMVC?
⼀、什么是SpringMVC?MVC 是⼀种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow 中。
MVC = Spring +MVC spring mvc类似于struts的⼀个MVC开框架,其实都是属于spring,spring mvc需要有spring的架包作为⽀撑才能跑起来.spring是⼀个⼀站式的框架,提供了表现层(springmvc)到业务层(spring)再到数据层(springdata)的全套解决⽅案;spring的两⼤核⼼IOC(控制反转)和AOP(⾯向切⾯编程)更是给我们的程序解耦和代码的简介提供了⽀持。Spring框架图:
从Spring的结构图可以看出,springMVC位于spring web端的⼀个框架,是⼀种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使⽤了MVC架构模式的思想,将web层进⾏职责解耦。附:基于请求驱动指的就是使⽤请求-响应模型。从名字上就可以窥探出,Spring>SpringMVC,那么事实上,spring和SpringMVC是⼀种⽗⼦关系。SpringMVC是spring扩展出的⼀个应⽤于web端的框架。在这⾥需要注意的⼀点,就是到底什么是⽗⼦容器关系:spring主要的作⽤是黏合其他模块组件,进⾏统⼀管理,springmvc则主要是负责web端。那么,我们都知道,我们在应⽤spring的时候,可以使⽤注⼊。这个时候,如果我们的web端是⽤的SpringMVC,这个时候,controller理论上是通过SpringMVC去注⼊,但是,使⽤spring注⼊,同样是可⾏的。同理,service等层,使⽤SpringMVC配置的统⼀扫描装配也是可以的。所以,如果说只是为了使⽤spring的依赖注⼊,是⼤可不必将springMVC和spring同时使⽤的。他们完全可以分开!但是,尽管SpringMVC和spring都可以进⾏⾃动装配扫描,值得注意的是:spring(⽗容器)并不能直接访问SpringMVC(⼦容器)所注⼊的对象,但是SpringMVC却可以访问到spring装载的对象。所以,在配置⾃动装配的时候,应该注意到这⼀点。MVC概念:M:Model,模型。JavaBean* 完成具体的业务操作,如:查询数据库,封装对象V:View,视图。JSP* 展⽰数据C:Controller,控制器。Servlet* 获取⽤户的输⼊* 调⽤模型* 将数据交给视图进⾏展⽰
⼆、SpringMVC的组件解析、执⾏流程1.组件解析mvc的流程: 1、 ⽤户发送请求⾄前端控制器DispatcherServlet; 2、DispatcherServlet收到请求调⽤HandlerMapping处理器映射器; 3、处理器映射器根据请求url找到具体的处理器,⽣成处理器对象及处理器拦截器(如果有则⽣成)⼀并返回给DispatcherServlet; 4、DispatcherServlet通过HandlerAdapter处理器适配器调⽤处理器,执⾏处理器(Controller,也叫后端控制器); 5、Controller执⾏完成返回ModelAndView,并返回给HandlerAdapter,HandlerAdapter将结果返回给DispatcherServlet; 6、DispatcherServlet将ModelAndView传给ViewReslover视图解析器,ViewReslover解析后返回具体View给DispatcherServlet; 7、DispatcherServlet对View进⾏渲染视图(即将模型数据填充⾄视图中)后返回给给客户3.组件1、前端控制器DispatcherServlet(不需要攻城狮开发),由框架提供 作⽤:接收请求,响应结果,相当于转发器,中央处理器。有了dispatcherServlet减少了其它组件之间的耦合度。 ⽤户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中⼼,由它调⽤其它组件处理⽤户的请求,dispatcherServlet的存在降低了组件之间的耦合性。2、处理器映射器HandlerMapping(不需要攻城狮开发),由框架提供 作⽤:根据请求的url查找Handler HandlerMapping负责根据⽤户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射⽅式,例如:配置⽂件⽅式,实现接⼝⽅式,注解⽅式等。3、处理器适配器HandlerAdapter 作⽤:按照特定规则(HandlerAdapter要求的规则)去执⾏Handler 通过HandlerAdapter对处理器进⾏执⾏,这是适配器模式的应⽤,通过扩展适配器可以对更多类型的处理器进⾏执⾏。4、处理器Handler(需要攻城狮开发) 注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执⾏Handler Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的⽤户请求进⾏处理。 由于Handler涉及到具体的⽤户业务请求,所以⼀般情况需要攻城狮根据业务需求开发Handler。5、视图解析器View resolver(不需要攻城狮开发),由框架提供 作⽤:进⾏视图解析,根据逻辑视图名解析成真正的视图(view) View Resolver负责将处理结果⽣成View视图,View Resolver⾸先根据逻辑视图名解析成物理视图名即具体的页⾯地址,再⽣成View视图对象,最后对View进⾏渲染将处理结果通过页⾯展⽰给⽤户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。 ⼀般情况下需要通过页⾯标签或页⾯模版技术将模型数据通过页⾯展⽰给⽤户,需要由攻城狮根据业务需求开发具体的页⾯。6、视图View(需要攻城狮开发) View是⼀个接⼝,实现类⽀持不同的View类型(jsp、freemarker、)
2.⽂件配置:
详图:
三、SpringMVC常⽤注解1.@RequestMappingRequestMapping是⼀个⽤来处理请求地址映射的注解,可⽤于类或⽅法上。⽤于类上,表⽰类中的所有响应请求的⽅法都是以该地址作为⽗路径。RequestMapping注解有六个属性,下⾯我们把她分成三类进⾏说明(下⾯有相应⽰例)。1、 value, method;value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后⾯将会说明);method: 指定请求的method类型, GET、POST、PUT、DELETE等;2、consumes,producesconsumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;3、params,headersparams: 指定request中必须包含某些参数值是,才让该⽅法处理。headers: 指定request中必须包含某些指定的header值,才能让该⽅法处理请求。2.@Resource和@Autowired@Resource和@Autowired都是做bean的注⼊时使⽤,其实@Resource并不是Spring的注解,它的包是ce,需要导⼊,但是Spring⽀持该注解的注⼊。1、共同点两者都可以写在字段和setter⽅法上。两者如果都写在字段上,那么就不需要再写setter⽅法。2、不同点(1)@Autowired@Autowired为Spring提供的注解,需要导⼊包red;只按照byType注⼊。public class TestServiceImpl { // 下⾯两种@Autowired只要使⽤⼀种即可 @Autowired private UserDao userDao; // ⽤于字段上
@Autowired public void setUserDao(UserDao userDao) { // ⽤于属性的⽅法上 o = userDao; }}@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使⽤按照名称(byName)来装配,可以结合@Qualifier注解⼀起使⽤。如下:public class TestServiceImpl { @Autowired @Qualifier("userDao") private UserDao userDao;
}(2)@Resource@Resource默认按照ByName⾃动注⼊,由J2EE提供,需要导⼊包ce。@Resource有两个重要的属性:name和type,⽽Spring将@Resource注解的name属性解析为bean的名字,⽽type属性则解析为bean的类型。所以,如果使⽤name属性,则使⽤byName的⾃动注⼊策略,⽽使⽤type属性时则使⽤byType⾃动注⼊策略。如果既不制定name也不制定type属性,这时将通过反射机制使⽤byName⾃动注⼊策略。public class TestServiceImpl { // 下⾯两种@Resource只要使⽤⼀种即可 @Resource(name="userDao") private UserDao userDao; // ⽤于字段上
@Resource(name="userDao") public void setUserDao(UserDao userDao) { // ⽤于属性的setter⽅法上 o = userDao; }}注:最好是将@Resource放在setter⽅法上,因为这样更符合⾯向对象的思想,通过set、get去操作属性,⽽不是直接去操作属性。@Resource装配顺序:①如果同时指定了name和type,则从Spring上下⽂中找到唯⼀匹配的bean进⾏装配,找不到则抛出异常。②如果指定了name,则从上下⽂中查找名称(id)匹配的bean进⾏装配,找不到则抛出异常。③如果指定了type,则从上下⽂中找到类似匹配的唯⼀bean进⾏装配,找不到或是找到多个,都会抛出异常。④如果既没有指定name,⼜没有指定type,则⾃动按照byName⽅式进⾏装配;如果没有匹配,则回退为⼀个原始类型进⾏匹配,如果匹配则⾃动装配。@Resource的作⽤相当于@Autowired,只不过@Autowired按照byType⾃动注⼊。3.@ModelAttribute和 @SessionAttributes代表的是:该Controller的所有⽅法在调⽤前,先执⾏此@ModelAttribute⽅法,可⽤于注解和⽅法参数中,可以把这个@ModelAttribute特性,应⽤在BaseController当中,所有的Controller继承BaseController,即可实现在调⽤Controller时,先执⾏@ModelAttribute⽅法。 @SessionAttributes即将值放到session作⽤域中,写在class上⾯。具体⽰例参见下⾯:使⽤ @ModelAttribute 和 @SessionAttributes 传递和保存数据4.@PathVariable⽤于将请求URL中的模板变量映射到功能处理⽅法的参数上,即取出uri模板中的变量作为参数。如:@Controller
public class TestController {
@RequestMapping(value="/user/{userId}/roles/{roleId}",method = )
public String getLogin(@PathVariable("userId") String userId,
@PathVariable("roleId") String roleId){
n("User Id : " + userId);
n("Role Id : " + roleId);
return "hello";
}
@RequestMapping(value="/product/{productId}",method = )
public String getProduct(@PathVariable("productId") String productId){
n("Product Id : " + productId);
return "hello";
}
@RequestMapping(value="/javabeat/{regexp1:[a-z-]+}",
method = )
public String getRegExp(@PathVariable("regexp1") String regexp1){
n("URI Part 1 : " + regexp1);
return "hello";
}
}5.@requestParam@requestParam主要⽤于在SpringMVC后台控制层获取参数,类似⼀种是ameter("name"),它有三个常⽤参数:defaultValue= "0", required = false, value = "isApp";defaultValue 表⽰设置默认值,required 铜过boolean设置是否是必须要传⼊的参数,value 值表⽰接受的传⼊的参数类型。6.@ResponseBody作⽤: 该注解⽤于将Controller的⽅法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写⼊到Response对象的body数据区。使⽤时机:返回的数据不是html标签的页⾯,⽽是其他某种格式的数据时(如json、xml等)使⽤;
四、SpringMVC的⽂件上传1.⽂件上传的原理2.单⽂件上传3.多⽂件上传
五、SpringMVC的拦截器MVC拦截器-拦截器的作⽤Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,⽤于对处理器进⾏预处理和后处理。将拦截器按⼀定的顺序联结成⼀条链,这条链称为拦截器链(InterceptorChain)。在访问被拦截的⽅法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调⽤。拦截器也是AOP思想的具体实现。MVC拦截器-interceptor和fifilter区别 1 2
2 异常处理两种⽅式① 使⽤Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver;② 实现Spring的异常处理接⼝HandlerExceptionResolver ⾃定义⾃⼰的异常处理器 。1.简单异常处理器SimpleMappingExceptionResolverSpringMVC已经定义好了该类型转换器,在使⽤时可以根据项⽬情况进⾏相应异常与视图的映射配置
1 2
3
①创建异常处理器类实现HandlerExceptionResolver
1 public class MyExceptionResolver implements HandlerExceptionResolver { 2 @Override 3 public ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) { 4 //处理异常的代码实现 5 //创建ModelAndView对象 6 ModelAndView modelAndView = new ModelAndView(); 7 wName("exceptionPage"); 8 return modelAndView; 9 }10 }②配置异常处理器
1
2023年8月1日发(作者:)
什么是SpringMVC?
⼀、什么是SpringMVC?MVC 是⼀种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow 中。
MVC = Spring +MVC spring mvc类似于struts的⼀个MVC开框架,其实都是属于spring,spring mvc需要有spring的架包作为⽀撑才能跑起来.spring是⼀个⼀站式的框架,提供了表现层(springmvc)到业务层(spring)再到数据层(springdata)的全套解决⽅案;spring的两⼤核⼼IOC(控制反转)和AOP(⾯向切⾯编程)更是给我们的程序解耦和代码的简介提供了⽀持。Spring框架图:
从Spring的结构图可以看出,springMVC位于spring web端的⼀个框架,是⼀种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使⽤了MVC架构模式的思想,将web层进⾏职责解耦。附:基于请求驱动指的就是使⽤请求-响应模型。从名字上就可以窥探出,Spring>SpringMVC,那么事实上,spring和SpringMVC是⼀种⽗⼦关系。SpringMVC是spring扩展出的⼀个应⽤于web端的框架。在这⾥需要注意的⼀点,就是到底什么是⽗⼦容器关系:spring主要的作⽤是黏合其他模块组件,进⾏统⼀管理,springmvc则主要是负责web端。那么,我们都知道,我们在应⽤spring的时候,可以使⽤注⼊。这个时候,如果我们的web端是⽤的SpringMVC,这个时候,controller理论上是通过SpringMVC去注⼊,但是,使⽤spring注⼊,同样是可⾏的。同理,service等层,使⽤SpringMVC配置的统⼀扫描装配也是可以的。所以,如果说只是为了使⽤spring的依赖注⼊,是⼤可不必将springMVC和spring同时使⽤的。他们完全可以分开!但是,尽管SpringMVC和spring都可以进⾏⾃动装配扫描,值得注意的是:spring(⽗容器)并不能直接访问SpringMVC(⼦容器)所注⼊的对象,但是SpringMVC却可以访问到spring装载的对象。所以,在配置⾃动装配的时候,应该注意到这⼀点。MVC概念:M:Model,模型。JavaBean* 完成具体的业务操作,如:查询数据库,封装对象V:View,视图。JSP* 展⽰数据C:Controller,控制器。Servlet* 获取⽤户的输⼊* 调⽤模型* 将数据交给视图进⾏展⽰
⼆、SpringMVC的组件解析、执⾏流程1.组件解析mvc的流程: 1、 ⽤户发送请求⾄前端控制器DispatcherServlet; 2、DispatcherServlet收到请求调⽤HandlerMapping处理器映射器; 3、处理器映射器根据请求url找到具体的处理器,⽣成处理器对象及处理器拦截器(如果有则⽣成)⼀并返回给DispatcherServlet; 4、DispatcherServlet通过HandlerAdapter处理器适配器调⽤处理器,执⾏处理器(Controller,也叫后端控制器); 5、Controller执⾏完成返回ModelAndView,并返回给HandlerAdapter,HandlerAdapter将结果返回给DispatcherServlet; 6、DispatcherServlet将ModelAndView传给ViewReslover视图解析器,ViewReslover解析后返回具体View给DispatcherServlet; 7、DispatcherServlet对View进⾏渲染视图(即将模型数据填充⾄视图中)后返回给给客户3.组件1、前端控制器DispatcherServlet(不需要攻城狮开发),由框架提供 作⽤:接收请求,响应结果,相当于转发器,中央处理器。有了dispatcherServlet减少了其它组件之间的耦合度。 ⽤户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中⼼,由它调⽤其它组件处理⽤户的请求,dispatcherServlet的存在降低了组件之间的耦合性。2、处理器映射器HandlerMapping(不需要攻城狮开发),由框架提供 作⽤:根据请求的url查找Handler HandlerMapping负责根据⽤户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射⽅式,例如:配置⽂件⽅式,实现接⼝⽅式,注解⽅式等。3、处理器适配器HandlerAdapter 作⽤:按照特定规则(HandlerAdapter要求的规则)去执⾏Handler 通过HandlerAdapter对处理器进⾏执⾏,这是适配器模式的应⽤,通过扩展适配器可以对更多类型的处理器进⾏执⾏。4、处理器Handler(需要攻城狮开发) 注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执⾏Handler Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的⽤户请求进⾏处理。 由于Handler涉及到具体的⽤户业务请求,所以⼀般情况需要攻城狮根据业务需求开发Handler。5、视图解析器View resolver(不需要攻城狮开发),由框架提供 作⽤:进⾏视图解析,根据逻辑视图名解析成真正的视图(view) View Resolver负责将处理结果⽣成View视图,View Resolver⾸先根据逻辑视图名解析成物理视图名即具体的页⾯地址,再⽣成View视图对象,最后对View进⾏渲染将处理结果通过页⾯展⽰给⽤户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。 ⼀般情况下需要通过页⾯标签或页⾯模版技术将模型数据通过页⾯展⽰给⽤户,需要由攻城狮根据业务需求开发具体的页⾯。6、视图View(需要攻城狮开发) View是⼀个接⼝,实现类⽀持不同的View类型(jsp、freemarker、)
2.⽂件配置:
详图:
三、SpringMVC常⽤注解1.@RequestMappingRequestMapping是⼀个⽤来处理请求地址映射的注解,可⽤于类或⽅法上。⽤于类上,表⽰类中的所有响应请求的⽅法都是以该地址作为⽗路径。RequestMapping注解有六个属性,下⾯我们把她分成三类进⾏说明(下⾯有相应⽰例)。1、 value, method;value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后⾯将会说明);method: 指定请求的method类型, GET、POST、PUT、DELETE等;2、consumes,producesconsumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;3、params,headersparams: 指定request中必须包含某些参数值是,才让该⽅法处理。headers: 指定request中必须包含某些指定的header值,才能让该⽅法处理请求。2.@Resource和@Autowired@Resource和@Autowired都是做bean的注⼊时使⽤,其实@Resource并不是Spring的注解,它的包是ce,需要导⼊,但是Spring⽀持该注解的注⼊。1、共同点两者都可以写在字段和setter⽅法上。两者如果都写在字段上,那么就不需要再写setter⽅法。2、不同点(1)@Autowired@Autowired为Spring提供的注解,需要导⼊包red;只按照byType注⼊。public class TestServiceImpl { // 下⾯两种@Autowired只要使⽤⼀种即可 @Autowired private UserDao userDao; // ⽤于字段上
@Autowired public void setUserDao(UserDao userDao) { // ⽤于属性的⽅法上 o = userDao; }}@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使⽤按照名称(byName)来装配,可以结合@Qualifier注解⼀起使⽤。如下:public class TestServiceImpl { @Autowired @Qualifier("userDao") private UserDao userDao;
}(2)@Resource@Resource默认按照ByName⾃动注⼊,由J2EE提供,需要导⼊包ce。@Resource有两个重要的属性:name和type,⽽Spring将@Resource注解的name属性解析为bean的名字,⽽type属性则解析为bean的类型。所以,如果使⽤name属性,则使⽤byName的⾃动注⼊策略,⽽使⽤type属性时则使⽤byType⾃动注⼊策略。如果既不制定name也不制定type属性,这时将通过反射机制使⽤byName⾃动注⼊策略。public class TestServiceImpl { // 下⾯两种@Resource只要使⽤⼀种即可 @Resource(name="userDao") private UserDao userDao; // ⽤于字段上
@Resource(name="userDao") public void setUserDao(UserDao userDao) { // ⽤于属性的setter⽅法上 o = userDao; }}注:最好是将@Resource放在setter⽅法上,因为这样更符合⾯向对象的思想,通过set、get去操作属性,⽽不是直接去操作属性。@Resource装配顺序:①如果同时指定了name和type,则从Spring上下⽂中找到唯⼀匹配的bean进⾏装配,找不到则抛出异常。②如果指定了name,则从上下⽂中查找名称(id)匹配的bean进⾏装配,找不到则抛出异常。③如果指定了type,则从上下⽂中找到类似匹配的唯⼀bean进⾏装配,找不到或是找到多个,都会抛出异常。④如果既没有指定name,⼜没有指定type,则⾃动按照byName⽅式进⾏装配;如果没有匹配,则回退为⼀个原始类型进⾏匹配,如果匹配则⾃动装配。@Resource的作⽤相当于@Autowired,只不过@Autowired按照byType⾃动注⼊。3.@ModelAttribute和 @SessionAttributes代表的是:该Controller的所有⽅法在调⽤前,先执⾏此@ModelAttribute⽅法,可⽤于注解和⽅法参数中,可以把这个@ModelAttribute特性,应⽤在BaseController当中,所有的Controller继承BaseController,即可实现在调⽤Controller时,先执⾏@ModelAttribute⽅法。 @SessionAttributes即将值放到session作⽤域中,写在class上⾯。具体⽰例参见下⾯:使⽤ @ModelAttribute 和 @SessionAttributes 传递和保存数据4.@PathVariable⽤于将请求URL中的模板变量映射到功能处理⽅法的参数上,即取出uri模板中的变量作为参数。如:@Controller
public class TestController {
@RequestMapping(value="/user/{userId}/roles/{roleId}",method = )
public String getLogin(@PathVariable("userId") String userId,
@PathVariable("roleId") String roleId){
n("User Id : " + userId);
n("Role Id : " + roleId);
return "hello";
}
@RequestMapping(value="/product/{productId}",method = )
public String getProduct(@PathVariable("productId") String productId){
n("Product Id : " + productId);
return "hello";
}
@RequestMapping(value="/javabeat/{regexp1:[a-z-]+}",
method = )
public String getRegExp(@PathVariable("regexp1") String regexp1){
n("URI Part 1 : " + regexp1);
return "hello";
}
}5.@requestParam@requestParam主要⽤于在SpringMVC后台控制层获取参数,类似⼀种是ameter("name"),它有三个常⽤参数:defaultValue= "0", required = false, value = "isApp";defaultValue 表⽰设置默认值,required 铜过boolean设置是否是必须要传⼊的参数,value 值表⽰接受的传⼊的参数类型。6.@ResponseBody作⽤: 该注解⽤于将Controller的⽅法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写⼊到Response对象的body数据区。使⽤时机:返回的数据不是html标签的页⾯,⽽是其他某种格式的数据时(如json、xml等)使⽤;
四、SpringMVC的⽂件上传1.⽂件上传的原理2.单⽂件上传3.多⽂件上传
五、SpringMVC的拦截器MVC拦截器-拦截器的作⽤Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,⽤于对处理器进⾏预处理和后处理。将拦截器按⼀定的顺序联结成⼀条链,这条链称为拦截器链(InterceptorChain)。在访问被拦截的⽅法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调⽤。拦截器也是AOP思想的具体实现。MVC拦截器-interceptor和fifilter区别 1 2
2 异常处理两种⽅式① 使⽤Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver;② 实现Spring的异常处理接⼝HandlerExceptionResolver ⾃定义⾃⼰的异常处理器 。1.简单异常处理器SimpleMappingExceptionResolverSpringMVC已经定义好了该类型转换器,在使⽤时可以根据项⽬情况进⾏相应异常与视图的映射配置
1 2
3
①创建异常处理器类实现HandlerExceptionResolver
1 public class MyExceptionResolver implements HandlerExceptionResolver { 2 @Override 3 public ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) { 4 //处理异常的代码实现 5 //创建ModelAndView对象 6 ModelAndView modelAndView = new ModelAndView(); 7 wName("exceptionPage"); 8 return modelAndView; 9 }10 }②配置异常处理器
1
发布评论