WEB框架之Spring MVC基础应用

目录

一、EasyMVC

1.三层架构

2.MVC原理

3.前端控制器

二、走进SpringMVC

1.Spring Web框架

2.入门程序(使用XML开发)

3.执行流程

4.使用注解开发

5.静态资源访问

三、请求和响应

1.返回类型

2.请求跳转

3.参数处理

4.其他请求信息

5.处理多对象属性名相同的问题

6.JSON数据处理

7.日期类型处理

四、拦截器

1.拦截器执行流程:

五、异常处理

1.使用Spring MVC提供的

2.实现Spring的异常处理接口

3.使用注解实现异常处理;

六、数据校验

1.实体类的属性校验:

七、SpringMVC标签

1.表单标签

八、文件上传和下载

1.文件上传

2.文件下载


一、EasyMVC


1.三层架构

  • 控制层(MVC)、业务层(Spring)、持久层(MyBatis)

2.MVC原理

  • 使控制逻辑业务逻辑调用展示逻辑相互分离(责任分离)
  • Model (模型) :数据模型,包含要展示的数据和业务功能。
  • View (视图) :用户界面,在界面上显示模型数据。
  • Controller ( 控制器) :起调度作用,接收用户请求、调用业务处理请求、共享模型数据并跳转界面。

3.前端控制器

  • 前端控制器模式:在所有控制器之前有一个统一的控制器;用来集中的对请求进行统一处理,然后前端控制器再把每一个请求分发给各自的处理器(减少重复代码,抽离出公有的部分)
  • 后端控制器:专门用来处理特定的,具体的请求;分发器会分发到不同的后端控制器;Apache体系(struts2)称之为XxxAction;Spring体系(Spring MVC)称之为XxxController

二、走进SpringMVC


1.Spring Web框架

  • SpringMVC是同步阻塞的IO模型,Spring的异步丰阻塞Web框架Spring WebFlux可以做到异步非阻塞,也可以使用其它方式来达到异步。

1.1SpringMVC和Struts2对比

  • ①. Spring MVC的前端控制器是Servlet,而Struts2是Filter.
  • ②. Spring MVC会稍微比Struts2快些. Spring MVC是基于方法设计.默认是单例的,而Sturts2 是基于类.每发一次请求都会创建一个新的对象,是多例的
  • ③、Spring MVC更加简洁。开发效率Spring MVC比Struts2高.如支持JSR303校验,且处理AJAX请求更方便。
  • ④. Struts2 的OGNL表达式(模型和视图之间传递数据),Spring MVC(通过Model对象传递)

2.入门程序(使用XML开发)

2.1开发步骤

  • ①:配置前端控制器: DispatcherServlet(在web.xml配置)
  • ②:配置处理器映射器: BeanNameUrlHandlerMapping(在springMVC.xml配置)
  • ③:配置处理器适配器: SimpleControllerHandlerAdapter(在springMVC.xml配置)
  • ④:配置视图解析器: InternalResourceViewResolver(在springMVC.xml配置)
  • ⑤:开发和配置处理器: HelloController(在XxxContrller里进行开发,在springMVC.xml配置)
  • ⑥:开发视图:View(在页面里进行开发)

ps:根据请求的URL寻找对应的Bean,根据Bean的id/name(都可)寻找到对应的处理器;

ps:springMVC.xml这个配置文件,默认是/WEB-INF目录去找(servlet-name)-servlet.xml;配置classpath路径是在resources包里面去找;

ps:DispatcherServiet.properties部分配置(默认配置了映射器,适配器,解析器);

3.执行流程

  • 客户端发送请求,到前端控制器DispatcherServlet先进行请求的统一封装处理,
  • 根据处理器映射器获取到处理器,
  • 根据处理器获取到对应的适配器,
  • 适配器去进行具体的执行并且返回ModelAndView数据给分派器,
  • 传送给视图解析器进行处理(数据替换等)并返回填充好的view对象(JSTLView,FreeMarker,PdfView等模板引擎)给分派器,
  • 分配器将view(HTML/JSP等)对象最终通过浏览器进行模板渲染,然后在进行呈现。

4.使用注解开发

4.1基本注解

  • 控制层(mvc):@Controller,用在类上
  • 业务逻辑层(Service):@Service,用在类上
  • 数据持久层(DAO):@Resposotory,用在类上
  • 其他组件使用通用注解:@Component
  • 在springMVC.xml配置Ioc注解扫描器和MVC注解解析器(注册处理器、适配器、解析器);

4.2@RequestMapping注解:处理地址请求映射,可以用在类上(父路径),可以用在方法上(子路径),六大属性如下:

  1. value:和path一样,指定请求的URL,比如 /hello。
  2. method:指定请求方式的类型,比如GET,HEAD,PATCH,POST,PUT,DELETE,OPTIONS,TRACE。
  3. consumes(消费):指定请求内容格式:Content-Type=application/json; 
  4. produces(生产):指定响应内容格式:Accept=application/json; charset=UTF-8;
  5. params :指定request 中必须包含某些参数值,包含该方法才处理,
  6. headers :指定request中必须包含指定的header,包含才能处理。”

5.静态资源访问

问题:Tomcat默认的web.xml里的servlet配置为‘/’,项目的web.xml配置为‘/’,会出现项目覆盖了Tomcat的路径,未进行动态映射的请求寻找不到默认的路径就会失败。

解决:使用<mvc:default-servlet-handler>在开发中使用比较多.SpringMVC如果发现没有经过映射请求,就交给Tomcat的默认servlet来处理.


三、请求和响应


1.返回类型

  • ModelAndView:指定数据模型+指定视图名
mv.addObject("bs", books);//指定数据模型
mv.setViewName("book");//指定视图名
  • String:配合入参Model使用,不加ResponseBody返回视图名称否则返回json字符串,也可重定向和请求转发;
  • Java数据结构:加ResponseBody常见的 List 集合、Map,实体类等都可以返回,这些数据由 HttpMessageConverter 自动转为 JSON ;

ps:一般需要在springMVC.xml配置视图解析器的请求路径的前缀和后缀

2.请求跳转

2.1请求转发:返回String类型比如:forward:/hello.html;(共享数据,只有一个请求)

  • 原理:request.getRequestDispatcher ("") . forward (request, response) ;

2.2重定向:返回String类型比如:redirect:/hello.html;(不共享数据,有两个请求)

  • 原理:response. sendRedirect ("") ;

2.3重定向的共享数据(只能显式传参/隐式传参)

  • 可以通过Flash属性进行共享数据:原方法传入参数RedirectAttributes,调用ra.addFlashAttribute ("msg2", "msg2") ;接收方法ModelAttribute ("msg2") String msg2来进行获取;
  • 原理:a向b传输数据,a先将数据传入HttpSession里然后让b去取,然后删除;

2.4重定向和请求转发的绝对路径和相对路径

  • 访问资源的时候前面带上/, 表示绝对路径,从根路径开始去寻找资源.比如:/response/test6 ------/hello.html
  • 访问资源的时候签名不加/,表示相对路径,从上一级上下文路径中去寻找资源.比如:/response/test6 ------/response/hello.html

3.参数处理

  1. 方法可传入参数HttpServletRequest request, HttpServletResponse response , HttpSession session
  2. 可以给对象(单例的)属性进行自动注入注解,比如@Autowired
  3. 获取请求参数,可以直接获取(保证URL的参数和方法的参数相同):String username, int age相同,
  4. 使用注解获取:@RequestParam ("name") String usexname, @Requescparam(value = "age", requixed = ralse) int age可以自定义顺序,进行设定名称并且选择该参数是否必须
  5. RESTful风格传参,将URL中占位符绑定到方法的形参中,RequestMapping ("/delete/{id} "),void test3 (@PathVariable ("id")Long id)
  6. 使用Bean对象来进行接收,方法形参传入对象,针对Bean这种复合类型(非简单类型)参数,缺省情况下就会放到model中(共享) ,缺省的key就是类型首字母小写

4.其他请求信息

  • @RequestHeader ("User- Agent") string userAgent;
  • @CookieValue ("JSESSIONID") String cName;
  • @SessionAttribute可以将request中的数据放入session中共享;

5.处理多对象属性名相同的问题

  • 使用自定义数据绑定注册,view属性名设置前缀,controller的方法设置前缀即可

6.JSON数据处理

  • 利用Jackson开源库可以将JavaBean对象和JSON/XML的格式对象互相转;SpringMVC默认支持jackson处理JSON数据。

6.1请求响应格式:

  • application/x-www-form-urlencoded:传统的key-value表单格式;
  • application/multipart:文件上传的请求,也能处理普通表单数据;
  • application/json:参数是JSON格式,等价application/xml

6.2注解处理:

  • @ResponseBody注解:处理响应,将对象转化为JSON字符串;可以放到方法,也可以放到类上;(一般处理js发出的ajax请求
  • @RestController注解:等价@Controller+ResponseBody;
  • @RequestBody注解:处理请求,将JSON格式的请求数据转化成对象

7.日期类型处理

  • 将字符串参数转化为日期类型:@DaceTime Format (pattern="yyyy -MM -dd")  Date d;还可以使用@ControllerAdvice注解(对控制器进行增强)单独抽离出一个类,在利用@InitBinder注解进行注册;
  • JSP显示Date类型,引入taglib标签库;
  • 后台往前台传,转化为JSON格式:使用注解@JsonFormat (pattern= "yyyy-MM-dd HH:mm:ss") ;

四、拦截器


1.拦截器执行流程:

  • 在通过映射器获取到处理器的时候,会获取到处理器执行链,可以获取到每一个节点的拦截器,以及(唯一)处理器;

1.1三大方法:

  • preHandle方法(处理器处理之前):在请求达到Handler之前,先执行这个前置处理方法。当该方法返回false时,请求直接返回,不会传递到链中的下一个拦截器,更不会传递到处理链末端的Handler中。只有返回true时,请求才向链中的下一个处理节点传递。
  • postHandle方法(处理器处理之后,模板渲染之前) :控制器方法执行后.视图渲染之前执行可以加入统一的响应信息
  • afterCompleti方法(模板渲染之后):视图渲染之后执行处理Controller异常信息记录操作日志,清理资源等

1.2在mvc.xml里进行配置实现好的拦截器(实现HandlerInterceptor接口),<mvc:mapping path="/**"/>,<mvc: exclude-mapping path="/login"/>


五、异常处理


1.使用Spring MVC提供的

  • 简单异常处理器SimpleMappingExceptionResolver;
  • 需要配置mvc.xml;

2.实现Spring的异常处理接口

  • 实现HandlerExceptionResolver接口自定义自己的异常处理器

3.使用注解实现异常处理;

  • @ExceptionHandler(可对具体异常进行处理而不是Exception)
  • 借助@ControllerAdvice注解对@Controller注解进行增强,不需要配置mvc.xml;

六、数据校验


1.实体类的属性校验:

1.1使用Spring自带的验证框架:spring-validator

1.2使用JSR 303的实现:jsr303-validator;(常用)

  • 在控制器的方法传参@Valid Employee e,BindingResult  bindingResult;
  • 通过bindingResult获取错误信息,在通过model传给页面显示;

七、SpringMVC标签


1.表单标签

通过SpringMVC的表单标签可以实现将模型数据中的属性HTML表单元素相绑定,以实现表单数据编辑和表单值的回显.

  • 引入标签<%@ taglib url= "http://wwv. springtramevork . org/tags/foxm" prefix= "form"'>

八、文件上传和下载


1.文件上传

1.1view视图层:基于表单的提交具体实现

1.2controller控制层

  • 可以基于Apache的.上传组件,需要jar包,需要配置mvc.xml文件,在实现控制器的方法即可;
  • 可以基于Servlet3.0:spring Boot默认支持,配置项目的web.xml文件,实现控制器的思路是相同的;

2.文件下载

  • 原来的操作request方式,实现控制器方法;
  • SpringMVC也做了封装,返回值变为ResponseEntity(转为字节流);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值