SpringMVC_01

1.1SpringMVC 概述

1)Spring 为展现层提供的基于 MVC 设计理念的优秀的 Web 框架,是目前最主流的MVC 框架之一
2)Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架。
3)Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口。
4)支持 REST 风格的 URL 请求。
5)采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。

1.2 SpringMVC是什么

 一种轻量级的、基于MVC的Web层应用框架。偏前端而不是基于业务逻辑层。Spring框架的一个后续产品。

1.3 SpringMVC能干什么

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

1.4 SpringMVC的组成

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

1.5 SpringMVC运行准备

1.5.1 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

1.5.2 在 web.xml 中配置 DispatcherServlet

<servlet>
	<servlet-name>DispatcherServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> //前端控制器
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:springmvcxml.xml</param-value> //类路径下的xml配置文件
		  <!-- 实际上也可以不通过 contextConfigLocation 来配置 SpringMVC 的配置文件, 
		  而使用默认的.默认的配置文件为: /WEB-INF/<servlet-name>-servlet.xml -->
	</init-param>
</servlet>

<servlet-mapping>
	<servlet-name>DispatcherServlet</servlet-name>
	<url-pattern>/</url-pattern> // /表示接收除以.jsp结尾的任何请求
</servlet-mapping>

1.5.3 xml文件中进行配置

<!-- 设置扫描组件的包: -->`
<context:component-scan base-package="com.atguigu.springmvc"/>

<!-- 配置映射解析器:如何将控制器返回的结果字符串,转换为一个物理的视图文件-->
<bean id="internalResourceViewResolver" 
  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/> //跳转页面的前缀
<property name="suffix" value=".jsp"/> //跳转页面的后缀
</bean>

第2 章 @RequestMapping注解

2.1 @RequestMapping 映射请求注解

2.1.1 @RequestMapping 概念

1)SpringMVC使用@RequestMapping注解为控制器指定可以处理哪些 URL 请求
2)在控制器的类定义及方法定义处都可标注 @RequestMapping
①标记在类上:提供初步的请求映射信息。相对于 WEB 应用的根目录
②标记在方法上:提供进一步的细分映射信息。相对于标记在类上的 URL。
3)若类上未标注 @RequestMapping,则方法处标记的 URL 相对于 WEB 应用的根目录
4) 作用:DispatcherServlet 截获请求后,就通过控制器上 @RequestMapping 提供的映射信息确定请求所对应的处理方法。

2.2 RequestMapping 可标注的位置

Controller 类 或方法上

@RequestMapping(value="/helloworld")
public String helloworld(){
System.out.println("hello,world");
return "success"; //根据xml中视图解析器的配置将跳转到 /WEB-INF/view/success.jsp 页面中
}        

2.3 RequestMapping映射请求方式

2.3.1 映射请求参数、请求方法或请求头

1)@RequestMapping 除了可以使用请求 URL 映射请求外,还可以使用请求方法、请求参数及请求头映射请求
2)@RequestMapping 的 value【重点】、method【重点】、params【了解】 及 heads【了解】 分别表示请求 URL、请求方法、请求参数及请求头的映射条件,他们之间是与的关系,联合使用多个条件可让请求映射更加精确化。

@RequestMapping(value="/testMethord",method=RequestMethod.POST)

3)params 和 headers支持简单的表达式:
param1: 表示请求必须包含名为 param1 的请求参数
!param1: 表示请求不能包含名为 param1 的请求参数
param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1
{“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2 的两个请求参数,且 param1 参数的值必须为 value1

2.4 RequestMapping映射请求参数&请求头

2.4.1 RequestMapping_请求参数&请求头

@RequestMapping(value="/testParamsAndHeaders",
params= {"username","age!=10"}, headers = { "Accept-Language=en-US,zh;q=0.8" })

2.5 RequestMapping支持Ant 路径风格

2.5.1 Ant

?:匹配文件名中的一个字符

/user/createUser??
匹配 /user/createUseraa、/user/createUserbb 等 URL

*:匹配文件名中的任意字符

/user/*/createUser
匹配 /user/aaa/createUser、/user/bbb/createUser 等 URL

** :匹配多层路径

/user/**/createUser
匹配 /user/createUser、/user/aaa/bbb/createUser 等 URL

2.6 RequestMapping映射请求占位符PathVariable注解

带占位符的URL 是 Spring3.0 新增的功能,该功能在 SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:
URL 中的 {xxx} 占位符可以通过 @PathVariable(“xxx”) 绑定到操作方法的入参中。

//@PathVariable 注解可以将请求URL路径中的请求参数,传递到处理请求方法的入参中
浏览器的请求:  testPathVariable/1001
@RequestMapping(value="/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id){
System.out.println("testPathVariable...id="+id);
return "success";
}

第3章 REST

3.1REST是什么?

1)REST:即 Representational State Transfer。

(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用
①资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息。
它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。
可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的 URI 。
获取这个资源,访问它的URI就可以,因此 URI 即为每一个资源的独一无二的识别符。
②表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层(Representation)。比如,文本可以用 txt 格式表现,也可以用 HTML 格式、XML 格式、JSON 格式表现,甚至可以采用二进制格式。
③状态转化(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。HTTP协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“状态转化”(State Transfer)
而这种转化是建立在表现层之上的,所以就是 “表现层状态转化”。
④具体说,就是 HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。
它们分别对应四种基本操作:
GET 用来获取资源,
POST 用来新建资源,
PUT 用来更新资源,
DELETE 用来删除资源。

2)URL风格

示例:
/order/1 HTTP GET :得到 id = 1 的 order gerOrder?id=1
/order/1 HTTP DELETE:删除 id = 1的 order deleteOrder?id=1
/order HTTP PUT:更新order
/order HTTP POST:新增 order

3)HiddenHttpMethodFilter

浏览器 form 表单只支持 GET 与 POST 请求,而DELETE、PUT 等 method 并不
支持,Spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使
得支持 GET、POST、PUT 与 DELETE 请求。

第4章 处理请求数据

4.1请求处理方法签名

1)Spring MVC 通过分析处理方法的签名(方法名+ 参数列表),HTTP请求信息绑定到处理方法的相应形参中。
2)Spring MVC 对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任何方式对方法进行签名。
3)必要时可以对方法及方法入参标注相应的注解( @PathVariable 、@RequestParam、@RequestHeader 等)、
4)Spring MVC 框架会将 HTTP 请求的信息绑定到相应的方法入参中,并根据方法的返回值类型做出相应的后续处理。

4.2 @RequestParam注解

1)在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法
2)value:参数名
3)required:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常
4)defaultValue: 默认值,当没有传递参数时使用该值

@RequestMapping(value="/testRequestParam")
public String testRequestParam(
@RequestParam(value="username") String username,
@RequestParam(value="age",required=false,defaultValue="0") int age){
System.out.println("testRequestParam - username="+username +",age="+age);
return "success";
}

4.3 @RequestHeader 注解

1)使用 @RequestHeader 绑定请求报头的属性值
2)请求头包含了若干个属性,服务器可据此获知客户端的信息,通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参中
在这里插入图片描述

4.4 @CookieValue 注解

1)使用 @CookieValue 绑定请求中的 Cookie 值
2)@CookieValue 可让处理方法入参绑定某个 Cookie 值
在这里插入图片描述

4.5 使用POJO作为参数

1)使用 POJO 对象绑定请求参数值
2)Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。如:dept.deptId、dept.address.tel 等

@RequestMapping("/testPOJO")
public String testPojo(User user) {
System.out.println("testPojo: " + user);
return "success";
}



<!-- 测试 POJO 对象传参,支持级联属性 -->
<form action=" testPOJO" method="POST">
username: <input type="text" name="username"/><br>
password: <input type="password" name="password"/><br>
email: <input type="text" name="email"/><br>
age: <input type="text" name="age"/><br>
city: <input type="text" name="address.city"/><br>
province: <input type="text" name="address.province"/>
<input type="submit" value="Submit"/>
</form>

拓展——配置字符集

<!-- 配置字符集 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

4.6使用Servlet原生API作为参数

1)MVC 的 Handler 方法可以接受哪些 ServletAPI 类型的参数
1)HttpServletRequest
2)HttpServletResponse
3)HttpSession

4)java.security.Principal
5)Locale
6)InputStream
7)OutputStream
8)Reader
9)Writer

**今日大纲**

SpringMVC运行基本流程

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值