博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC
阅读量:2389 次
发布时间:2019-05-10

本文共 4880 字,大约阅读时间需要 16 分钟。

1、什么是Spring MVC ?简单介绍下你对springMVC的理解?

Spring MVC的主要组件?
2.请求映射、restfulAPl、 返回值、JSON交互、异常处理、拦截器

文章目录

SpringMVC

Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

SpringMVC 能干什么

1) 天生与 Spring 框架集成, 如: (IOC,AOP)

2) 支持 Restful 风格
3) 进行更简洁的 Web 层开发
4) 支持灵活的 URL 到页面控制器的映射
5) 非常容易与其他视图技术集成, 如:Velocity、 FreeMarker 等等
6) 因为模型数据不存放在特定的 API 里, 而是放在一个 Model 里(Map 数据结构实现,
因此很容易被其他框架使用)
7) 非常灵活的数据验证、 格式化和数据绑定机制、 能使用任何对象进行数据绑定,
不必实现特定框架的 API
8) 更加简单、 强大的异常处理
9) 对静态资源的支持
10) 支持灵活的本地化、 主题等解析

Spring MVC的主要组件

(1)前端控制器 DispatcherServlet(不需要程序员开发)

作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。

(2)处理器映射器HandlerMapping(不需要程序员开发)

作用:根据请求的URL来查找Handler

(3)处理器适配器HandlerAdapter

注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。

(4)处理器Handler(需要程序员开发)

(5)视图解析器 ViewResolver(不需要程序员开发)

作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view)

(6)视图View(需要程序员开发jsp)

View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)

明确: 我们只需要编写处理具体业务的控制器以及视图。

SpringMVC 怎么玩

1) 将 Web 层进行了职责解耦, 基于请求-响应模型

2) 常用主要组件
1 DispatcherServlet: 前端控制器
2 Controller: 处理器/页面控制器, 做的是 MVC 中的 C 的事情, 但控制逻辑转移到前端控制器了, 用于对请求进行处理
3 HandlerMapping : 请求映射到处理器, 找谁来处理, 如果映射成功返回一个HandlerExecutionChain 对象( 包含一个 Handler 处理器(页面控制器)对象、 多个 HandlerInterceptor 拦截器对象)
4 View Resolver : 视图解析器, 找谁来处理返回的页面。 把逻辑视图解析为具体
的 View,进行这种策略模式, 很容易更换其他视图技术;
如 InternalResourceViewResolver 将逻辑视图名映射为 JSP 视图
5 LocalResolver: 本地化、 国际化
6 MultipartResolver: 文件上传解析器
7 HandlerExceptionResolver: 异常处理器

1) 新建 Web 工程, 加入 jar 包

spring-aop-4.0.0.RELEASE.jar

spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
commons-logging-1.1.3.jar
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar

2) 在 web.xml 中配置 DispatcherServlet

在这里插入图片描述

3) 加入 Spring MVC 的配置文件: springmvc.xml

1 增加名称空间

在这里插入图片描述2 增加配置
在这里插入图片描述

4) 需要创建一个入口页面, index.jsp

<a href="${pageContext.request.contextPath }/helloworld">Hello World</a>

5) 编写处理请求的处理器, 并标识为处理器

在这里插入图片描述

6) 编写视图

/WEB-INF/views/success.jsp

Sucess Page

7) 部署测试:

现象:进入index.jsp页面后,点击超链接,则可进入success.jsp页面

HelloWorld 请求流程图解:在这里插入图片描述流程分析:

在这里插入图片描述

基本步骤:

1 客户端请求提交到 DispatcherServlet
2 由 DispatcherServlet 控制器查询一个或多个 HandlerMapping, 找到处理请求的 Controller
3 DispatcherServlet 将请求提交到 Controller(也称为 Handler)
4 Controller 调用业务逻辑处理后, 返回 ModelAndView
5 DispatcherServlet 查询一个或多个 ViewResoler 视图解析器, 找到 ModelAndView 指定的视图
6 视图负责将结果显示到客户端

REST

1 参考资料:

1) 理解本真的 REST 架构风格:

2) REST:

2 RESTful CRUD

1) REST: 即 Representational State Transfer。(资源) 表现层状态转化。 是目前最流行的一种互联网软件架构。

GET 用来获取资源, POST 用来新建资源, PUT 用来 更新资源, DELETE 用来删除资源。

1) 配置 HiddenHttpMethodFilter 过滤器

在这里插入图片描述2) 代码

/**	 * Rest 风格的 URL. 以 CRUD 为例: 	 * 新增: /order POST 	 * 修改: /order/1 PUT update?id=1	 * 获取:/order/1 GET get?id=1 	 * 删除: /order/1 DELETE delete?id=1	 * 	 * 如何发送 PUT 请求和 DELETE 请求呢 ? 	 * 1. 需要配置 HiddenHttpMethodFilter 	 * 2. 需要发送 POST 请求	 * 3. 需要发送 POST 请求是携带一个 name="_method" 的隐藏域,值为 DELETE 或 PUT	 * 	 * 在 SpringMVC 的目标方法中 如何得到id 呢? 使用 @PathVariable 注解	 * 	 */	@RequestMapping(value = "/testRest/{id}", method = RequestMethod.PUT)	public String testRestPut(@PathVariable Integer id) {
System.out.println("testRest Put: " + id); return SUCCESS; } @RequestMapping(value = "/testRest/{id}", method = RequestMethod.DELETE) public String testRestDelete(@PathVariable Integer id) {
System.out.println("testRest Delete: " + id); return SUCCESS; } @RequestMapping(value = "/testRest", method = RequestMethod.POST) public String testRest() {
System.out.println("testRest POST"); return SUCCESS; } @RequestMapping(value = "/testRest/{id}", method = RequestMethod.GET) public String testRest(@PathVariable Integer id) {
System.out.println("testRest GET: " + id); return SUCCESS; }

3) 请求链接

testREST GET

处理响应数据

1) ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据

2) Map 及 Model: 入参org.springframework.ui.Model、
org.springframework.ui.ModelMap 或 java.uti.Map 时, 处理方法返回时, Map 中的数据会自动添加到模型中。
3) @SessionAttributes: 将模型中的某个属性暂存到 HttpSession 中, 以便多个请求之间可以共享这个属性
4) @ModelAttribute: 方法入参标注该注解后, 入参的对象就会放到数据模型中

1 ModelAndView 介绍

1) 控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息, 也包含模型
数据信息。
2) 添加模型数据:
MoelAndView addObject(String attributeName, Object attributeValue)
ModelAndView addAllObject(Map<String, ?> modelMap)
3) 设置视图:
void setView(View view)
void setViewName(String viewName)

文件上传

在这里插入图片描述

在这里插入图片描述

SpringMvc异常处理

在这里插入图片描述

在这里插入图片描述

面试

SpringMVC怎么样设定重定向和转发的?

(1)转发:在返回值前面加"forward:",比如"forward:user.do?name=method"

(2)重定向:在返回值前面加"redirect:",比如"redirect:http://www.baidu.com"
在这里插入图片描述

SpringMvc怎么和AJAX相互调用的?

通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :

(1)加入Jackson.jar

(2)在配置文件中配置json的映射

(3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。

SpringMVC常用的注解有哪些?

@RequestMapping:用于处理请求 url

映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。

@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。

@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。

未完待续~

转载地址:http://fvxab.baihongyu.com/

你可能感兴趣的文章
[转]linux文件系统基础知识
查看>>
[转]Centos5 下安装/配置lvm使用reiserfs文件系统
查看>>
[转]Use ReiserFS in CentOS 5(lvm)
查看>>
[转]KFS的部署与简单使用
查看>>
[转]KFS官方部署手册
查看>>
[转]Ubuntu 10.04 LTS 安装 sun-java6-jdk
查看>>
[转]mmap详解
查看>>
[转]HDFS和KFS 比较
查看>>
10 个令人惊喜的 jQuery 插件推荐
查看>>
Open Source GIS and Freeware GIS Applications
查看>>
Open Source GIS
查看>>
开源GIS软件SharpMap
查看>>
四个开源商业智能平台比较 (一)
查看>>
WinEdt如何使用中文
查看>>
Programmatic PlyQL via HTTP, ODBC, and JDBC
查看>>
Jackson 处理复杂类型(List,map)两种方法
查看>>
使用Apache Common的FileUpload的一点点注意事项
查看>>
arduino连接热敏打印机的资料
查看>>
用zxing生成条形码
查看>>
如何将OpenShift与eclipse集合使用
查看>>