SpringMVC

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

<h4>Sucess Page</h4>
7) 部署测试:

http://localhost:8080/SpringMVC_01_HelloWorld/index.jsp
现象:进入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 架构风格: http://kb.cnblogs.com/page/186516/
2) REST: http://www.infoq.com/cn/articles/rest-introduction

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) 请求链接

<!-- 实验 1 测试 REST 风格 GET 请求 -->
<a href="springmvc/testRESTGet/1">testREST GET</a><br/><br/>
<!-- 实验 2 测试 REST 风格 POST 请求 -->
<form action="springmvc/testRESTPost" method="POST">
<input type="submit" value="testRESTPost">
</form>
<!-- 实验 3 测试 REST 风格 PUT 请求 -->
<form action="springmvc/testRESTPut/1" method="POST">
<input type="hidden" name="_method" value="PUT">
<input type="submit" value="testRESTPut">
</form>
<!-- 实验 4 测试 REST 风格 DELETE 请求 -->
<form action="springmvc/testRESTDelete/1" method="POST">
<input type="hidden" name="_method" value="DELETE">
<input type="submit" value="testRESTDelete">
</form>

处理响应数据

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对象响应给客户。

未完待续~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值