DispacterServlet:前端控制器,接受所有请求,当配置为 " / "时,jsp除外
HandlerMapping:解析请求格式,判断要执行的方法
HandlerAdapter:负责执行方法
ViewResolver:视图解析器
运行原理图
首先在web.xml配置前端控制器的servlet,名字可以随便起,initparam一定要这样配,配置文件写在src下,要不读不到
顺带可以配置字符编码过滤器,里面封装的代码和平时写的一样
springmvc.xml配置文件,先导入约束,一般静态资源配置js,css,img等,因为前端控制器配置了" / ",所以除jsp外请求都被视为servlet请求,jsp内有可能要引用静态文件
不用再继承httpservlet,在类上加@Controller,servlet@RequestMapping("")内名字和方法名一样
传递参数
基本数据类型,保证参数名一样
当参数名不一样的时候,可以用@RequestParam注释("jsp内名称")
可用@RequestParam设置默认值,这样防止500错误,就算没传值也会有值
当强制要求必须有值
当值是符合对象里面属性名时,可以直接用对象接,会自动匹配
当需要接收的是同一名称多值时,复选框的名称是hover
prefix是在前面加东西,suffix是在后面加,假如java中写的是return "show";会变成 /show.jsp
如果希望不执行自定义视图解析器,在方法返回值前面添加forward:或 redirect:
其中,map方式和model方式都会放在request中
首先导入两个包,resp.setHeander的content-disposition属性,默认浏览器都是inline,能显示就显示,不能显示就下载,修改成attachment;filename=下载文件名就优先下载,req.getServletContext().getRealPath()是获得文件夹files的具体路径,
new的一个file就是下载的全路径,用工具包转成字节数组直接写入地址
添加enctype,表示表单中包含二进制文件内容
在配置文件中配置解析器
异常解析器,当出现异常时跳到指定页面
1 发送请求时被拦截器拦截,拦截器针对控制器拦截,只拦截控制器
2 与aop区别,aop在方法上设置切点,拦截器在控制器前后执行
3 与filter区别,filter拦截所有请求,拦截器针对控制器拦截
实现HandlerInterceptor接口
preHandle,在进入控制器之前,return true代表放行
控制器后,进入jsp前
//日志记录.
//敏感词语过滤
jsp后
//记录执行过程中出现的异常.
//可以把异常记录到日志中
在springmvc配置文件配置,默认拦截所有
拦截指定控制器
在多个拦截器命名后,按照在配置文件定义的先后执行,按照后进先出的原则
假如有 A,B拦截器,A先定义,拦截顺序就是
preHandler :AB post:BA after :BA
preHandle(A) --> preHandle(B) --> 控制器方法 --> postHandle(B)
--> postHanle(A) --> JSP --> afterCompletion(B) --> afterCompletion(A)