Spring-mvc
1、什么是spring-mvc
基于spring的一个框架
2、什么是mvc------一个个设计模式
首先请求发送request请求到C(control 接收用户请求响应用户) 然后控制器到M模型(pojo、action、service、dao)层处理 处理结果完了返回控制器 控制器要经过视图渲染 最后返回终端(response)
3、spring-mvc怎么运行的
1、浏览器向spring发出请求,请求交给前段控制器DispatcherServlet处理,
2、处理器通过HandlerMapping找到相对应的Controller组件处理请求
3、执行Controller组件约定方法处理请求,在约定方法调用模型组件完成业务处理。约定方法可以返回一个ModelAndView
对象,封装了处理结果数据和视图信息
4、控制器接受ModelAndView之后,调用ViewResolver组件,定位View(JSP) 并传递信息,生成响应界面结果
spring-mvc的配置
1、前端控制器
spring-mvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springtest.xml
spring-mvc
/
controllerTest
3、Controller中返回一个ModelAndView
public class ControllerTest implements Controller{
//实现Controller接口
@Override
public ModelAndView handleRequest(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
ModelAndView mv=new ModelAndView();
mv.setViewName("renwei");//这个是不带后缀名的jsp文件名
return mv;
}
}
spring-mvc注解
1、@RequestMapping 可以用在方法和类上,(类上的可以不写)
需要在配置文件中配置两个Bean、
//就是注册这两个bean 适配器和映射
//下面这个是驱动,相当于节省了上面那两步
1、可以获取表单的参数,并且可以实现数据类型的自动的转换,但是在转化的过程中,可能出现数据转换异常
方法名(@RequestParam 数据类型 参数名, @RequestParam 数据类型 参数名)
2、如果表单属性和参数名一样。不写注解也可以
当一个对象的属性和表单中的参数一致的时候,那么Controller组件
中的方法中,获取表单的参数值的时候,可以直接由对象获取到,
也就是说,在方法中将这个对象传入。
向页面传值
1.HttpServletRequest 和Session
setAttribute();
2.ModelAndView(String name,Map)
Controller 中的方法,返回值是ModelAndView。
mv.addObject(String name, Object obj)
实现数据绑定
3.ModelMap
addAttribute(String name,Object obj);
实现数据绑定,底层也是通过HttpServletRequest对象传递数据到
JSP页面的。
4.注解的数据绑定
@ModeAttribute("")作用在方法的参数上或者是bean的属性上
重定向视图
Spring MVC默认采用转发方式定位视图,如果需要重定向方式可采用下面几种方法
1、使用RedirectView Controller方法的返回值必须是modelandview类型的
RedirectiView view new RedirectView("请求action路径/jsp路径");
ModelAndView mv=new ModelAndView(view);
2、使用redirect:前缀 controller方法的返回值必须是String类型的
redirect:路径 ---请求路径/jsp路径
spring-mvc中乱码解决方式
filter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
注意:表单提交方式为post、过滤器的编码格式要和页面的编码格式保持一致
使用拦截器实现登录检查
1、拦截器必须实现HandlerInterceptor接口,这个接口有以下三个方法
preHandle(..)
处理器执行前被调用。方法返回true表示会继续调用其他拦截器和处理器;返回false表示中断流程,不会执行后续拦截器和处理容器
postHandle(..)
处理器执行后、视图处理前调用。此时可以通过modelAndView对象对模型数据进行处理或对视图进行处理
afterCompletion(..)
整个请求处理完毕后调用,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理。只有preHandle返回true时才会执行afterCompletion方法
在容器配置文件中配置
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/day04/*"/>
<mvc:exclude-mapping path="/login/*"/>
<bean class="com.demo.interceptor.SomeInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>