Spring MVC入门
Posted xss512
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring MVC入门相关的知识,希望对你有一定的参考价值。
MVC 设计概述
在早期 Java Web 的开发中,统一把显示层、控制层、数据层的操作全部交给 JSP 或者 JavaBean 来进行处理,我们称之为 Model1:
- 出现的弊端:
- JSP 和 Java Bean 之间严重耦合,Java 代码和 html 代码也耦合在了一起
- 要求开发者不仅要掌握 Java ,还要有高超的前端水平
- 前端和后端相互依赖,前端需要等待后端完成,后端也依赖前端完成,才能进行有效的测试
- 代码难以复用
正因为上面的种种弊端,所以很快这种方式就被 Servlet + JSP + Java Bean 所替代了,早期的 MVC 模型(Model2)就像下图这样:
首先用户的请求会到达 Servlet,然后根据请求调用相应的 Java Bean,并把所有的显示结果交给 JSP 去完成,这样的模式我们就称为 MVC 模式。
- M 代表 模型(Model)
模型是什么呢? 模型就是数据,就是 dao,bean -
V 代表 视图(View)
视图是什么呢? 就是网页, JSP,用来展示模型中的数据 -
C 代表 控制器(controller)
控制器是什么? 控制器的作用就是把不同的数据(Model),显示在不同的视图(View)上,Servlet 扮演的就是这样的角色。
让我们来写一下我们的第一个 Spring MVC 程序:
扩展阅读:Web开发模式
Spring MVC 的架构
为解决持久层中一直未处理好的数据库事务的编程,又为了迎合 NoSQL 的强势崛起,Spring MVC 给出了方案:
传统的模型层被拆分为了业务层(Service)和数据访问层(DAO,Data Access Object)。 在 Service 下可以通过 Spring 的声明式事务操作数据访问层,而在业务层上还允许我们访问 NoSQL ,这样就能够满足异军突起的 NoSQL 的使用了,它可以大大提高互联网系统的性能。
- 特点:
结构松散,几乎可以在 Spring MVC 中使用各类视图
松耦合,各个模块分离
与 Spring 无缝集成
示例:
1、在web.xml 配置一个DispatcherServlet 并且使用
初始化参数 contextConfigLocation 关联容器对应的配置文件
可以<url-pattern>
元素的值改为 / ,表示要拦截所有的请求,并交由Spring MVC的后台控制器来处理(也可以用*)
contextConfigLocation 关联容器对应的配置文件 也可以写到WebContent下面的WEB-INF下面,这个时候就不用再web.xml中配置初始化上下文配置,如果不配置,运行servers的时候,编译器会报这个异常,xml文件名字自定义可改
2、编写netmk_web.xml(也就是异常报错说缺少dispatcher-servlet.xml,名字可自定义的哈)
开启基于标注 Spring MVC
开启组件扫描 <context:component-scan base-package="" />
开启mvc的标注 <mvc:annotation-driven /> 自动配置了一个HandlerMapping
3、编写一个普通的java类使用@Controller 把java类变成控制器
控制器方法的返回值可以是String也可以是 ModelAndView
方法名任意参数任意 在控制器方法上加 @RequestMapping("/请求路径")
我这里创建了个实体类,使用了实体里面的属性
4、在WEB-INF建立一个login.jsp
控制器接收请求数据
使用控制器接收参数往往是 Spring MVC 开发业务逻辑的第一步,为探索 Spring MVC 的传参方式,为此我们先来创建一个简单的表单用于提交数据:
重启服务器之后
测试结果如下:
控制台显示:
小问题:
什么是springMVC?作用?
springMVC是一种web层mvc框架,用于替代servlet(处理|响应请求,获取表单参数,表单校验等)。
为什么要用springMVC?
基本上,框架的作用就是用来简化编程的,相对于servlet来说,获取表单参数,响应请求等变得更简单了。
说出spring mvc底层执行流程(工作原理):
说说spring mvc中常用注解有哪些,分别什么作用?
@Controller 标识这个类是一个控制器
@RequestMapping 给控制器方法绑定一个uri
@ResponseBody 将java对象转成json,并且发送给客户端
@RequestBody 将客户端请求过来的json转成java对象
@RequestParam 当表单参数和方法形参名字不一致时,做一个名字映射
@PathVarible 用于获取uri中的参数,比如user/1中1的值 Rest风格的新api
@RestController @Controller+ @ResponseBody
@GetMapping@DeleteMapping@PostMapping
@PutMapping
其他注解
@SessionAttribute
声明将什么模型数据存入session
@CookieValue 获取cookie值
@ModelAttribute 将方法返回值存入model中
@HeaderValue 获取请求头中的值
springmvc和strus2的区别?
1,入口不同:
springmvc 入口是Servlet。struts2入口是filter。
2,生命周期不同:
spring mvc Controller是单例的。所以不能使用成员变量获取参数。所以效率高。
struts action是多例的。所以可以使用成员变量获取参数。所以效率低。
如何在spring mvc实现RESTful 服务
1,导入jackson2包
2,开启注解驱动<mvc:annotation-driven/>
3,json交互[email protected] @ResponseBody
spring mvc如何返回JSON数据
在处理方法前加上 @ResponseBody注解
或者
在控制器上使用 @RestController
什么是拦截器?有什么用?spring mvc如何定义拦截器?
what:
类似于filter的一个对象,用于预处理以及后处理处理器(控制器)。
how:
新建class实现HandlerInterceptor重写三个方法preHandlerpostHandlerafterCompletionspringmvc.xml中配置拦截器
spring mvc中如何做表单数据校验?
环境搭建
1,springmvc.xml中配置一个validator
2,<mvc:annotation-driven validator="validator"/>;
给Entity添加校验规则
@NotEmpty
@Length
...
用BindingResult 紧接着entity之后来接收错误信息。
以上是关于Spring MVC入门的主要内容,如果未能解决你的问题,请参考以下文章