专注于公共代码的抽取,按成代码的复用,oop的升级 动态代理 返回后通知
@EnbaleTransactionManagement
spring插手了数据层 事务的管理
基于Java实现mvc的轻量级web框架
springmvc执行流程
dis->handlerMapping处理器映射器->找到controller->回到dis->dis调用处理器适配器 找controller 找页面 找视图 返回
->处理器适配器调用controller找到页面->dis->视图解析器->返回dis->进行页面渲染
运行步骤:
当服务器启动时候 先加载web.xml
知道我们配置了servlet 这个请求地址匹配的是什么请求
加载优先级 loadonstartup 加载优先级 init param 初始参数
然后启动的时候 dis就会读取spring-mvc.xml文件
当读取到controller的时候就明白了这个类是用来处理请求
扫描这个类当中所有的方法,找到所有的requestmapping注解
如果有 对应的方法就可以处理一个请求的名称叫做我这个注解当中的值
当请求来的时候 可以通过地址找到类与方法
spring-mvc的配置:
注解驱动 会导入三大组件 filter config servlet 会识别后面写的注解 @ResponseBoy
视图解析器:
物理视图 全称
逻辑视图 名字 搭配视图解析器 prefix +名称+suffix
一旦配置 对全局产生影响
静态资源处理
当dispacherservlet 配置为/所有的静态资源看不到了
在tomcat当中有一个defaultServlet他的地址是/所以发生了冲突
这就会产生一种后果 我们的dis覆盖了 这个时候tomcat不工作了
他没有静态资源的能力所以呢就会出现找不到页面的问题
任意层级的变化
解决办法:在这里配置告诉dispatcherservlet静态资源的位置
当我们的dis收到了静态资源请求之后 可以转交给defaultServlet处理 mvc:default-servlet-handler
web.xml配置:
前端请求分发器 前端控制器 级联关系
init param param-name用来配置核心文件的位置
dis初始化是创建spring工厂 扫描类创建对象
提前加载loadonstartup
映射路径
精确匹配
目录匹配
后缀名匹配 *.do controller方法访问的时候都要带上后缀
任意匹配 / /*使用/*不能看到jsp tomcat 有一个jspservlet交
他将servlet编程jsp然后展示 因为/*优先级大于*.jsp
直接把将jsp当成静态资源
映射地址的匹配
/大于.*所以发生了冲突
controller
里面所有方法的返回值都会被认为是返回页面
RequestMapping属性解释:
value 与path 都是请求地址
method 是请求方式 get从浏览器地址发出来的
params 要求请求带有参数
写在类上 代表模块的区分
请求参数绑定:
基本类型他的名称与参数相同就能拿到
传过来是一个json转成一个javabena @RequestBody
传过来是一个对象 属性值一致
集合可以用List @RequestParam使用绑定 获取包含指定的参数的值
使用数组来接收
点哦传递参数
点哦传递参数
400 bad request 页面提交的参数类型格式不对
404 路径不对
乱码问题
get拼接到地址栏
8.5以后get没有乱码 post配置过滤器
参数拿到的实际需要在设置之后 在调用的时候mvc起作用 使用过滤器在这之前生效
当请求到dispatcherServlet的前面的时候他会先被过滤器过滤
json数据不会经过解析
日期格式转换:
public class DateConvert implements Converter<String, Date> {
public Date convert(String s) {
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
return format.parse(s);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
}
接口或者父类没有抛异常 子类或者实习类不能抛出比接口父类更多更大的异常
定义转换规则
配置转换器 注入
追加转换器 在注解驱动中登记
常用注解:
@ReqestParam 携带指定的值 当不写的时候 默认就是参数名
写了以写的名字为准 required 表示是否一定要传
defaultname 当不传的时候就会有默认值
@RequestBody
1.得到请求体 利用一个参数接收
2.将前端传过来的参数转为一个Javabean对象
不走表单json数据传输 导入jackson-databind没有导入的时候 不能被认识传递过来会报415 在axios当中会将js对象转为json格式
tomcat7与一些版本不兼容
@PathVariable 将参数放到地址当中去写 配合restful风格使用这样的话 我们在地址栏当中凭借数据就可以使用/url/数据
对应的控制器上面就可以是@RequestMapping("/url/{xx}")
@PathVariable String xx; 进行绑定获取
@RequestHeader 获取请求头赋值给形参
@RequestMapping("/getUrl")
public String b(@RequestHeader("User-Agent") String user){
System.out.println(user); 利用header可以判断设备的类型
return "success";
}
@RequestCookie 获取指定名称的cookie赋值给形参
@RequestMapping("/getCookie")
public String c(@CookieValue("JSESSIONID") String user){
System.out.println(user);
return "success";
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)