SpringMvc

SpringMvc,第1张

专注于公共代码的抽取,按成代码的复用,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";
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/868714.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存