springmvc进不到controller_SpringMVC--->01

什么是SpringMVC

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器 (controller)的缩写,它是一种软件设计典范,是一种软件架构设计分层模式。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
View(视图)是应用程序中处理数据显示的部分。
Controller(控制器)是应用程序中处理用户交互的部分。
最典型的MVC就是JSP + servlet + javabean的模式。

SpringMVC运行流程

1、用户发起request请求至前端控制器。前端控制器(DispatcherServlet)。
2、前端控制器发送请求至处理器映射器(HandlerMapping)查找Handler,这个处理器映射器会根据url找到对应的处理器。(可以根据xml配置或者注解进行查找)
3、处理器映射器(HandlerMapping)像前端控制器返回Handler(处理器)
4、前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行Handler。
5、处理器适配器(HandlerAdapter)去执行Handler。
6、Handler执行完成后给适配器返回ModelAndView
	ModelAndView是SpringMVC框架的一个底层对象,包括模型和视图。
7、处理器适配器向前端控制器返回ModelAndView。
8、前端控制器请求视图解析器进行视图解析。
	根据逻辑视图名称解析真正的视图(jsp)。
9、视图解析器向前端控制器返回View。
10、前端控制器进行视图渲染
	视图渲染将模型数据填充到request作用域中。
11、前端控制器向用户做出响应。

组件:
	1、前端控制器或中央控制器(DispatcherServlet):   --->不需要程序员开发
				接收请求,响应结果。用户请求到达前端控制器,相当于MVC中的C,而DispatherServlet是整个流程的核心,它来调用其他组件来处理用户的请求,
而其他组件之间也就没有了交互,前端控制器的存在降低了其他组件之间的耦合度。
	2、处理器映射器(HandlerMapping):		--->不需要程序员开发
				根据请求的url查找Handler。
	3、处理器适配器(HandlerAdapter):	
				按特定规则(DispatcherServlet)去执行Handler。
				也就是说在编写Handler时就需要按照HandlerApapter的要求编写,这样处理器适配器才能正确执行Handler。
	4、处理器(Handler):			
				注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler
				Handler是后端控制器,在前端控制器的控制下后端控制器对具体的用户请求进行处理,Handler涉及到具体的用户业务请求,
所以一般情况下需要程序员根据业务需求开发.
	5、视图解析器(ViewResolver):		--->不需要程序员开发
				进行视图解析,根据逻辑视图解析成View视图。

SpringMVC搭配环境

1、创建web项目
2、导入jar包。
3、在web.xml中添加Spring前端控制器。
4、编写后端控制器,后端控制器在src下编写。(配置式开发,要求处理器实现controller接口,注解式不需要实现接口)。
           添加约束头信息
           注册后端控制器
       <bean id="/请求.do" class="后端控制器的全限定类名"></bean>  <!--请求路径-->

v2-bde9a6b689822503208b98c19cceb142_b.jpg
jar包

v2-1c21336f6847b4e01d1c9a0b3d9ae458_b.jpg
前端控制器的配置文件

url-pattern配置

当时用/*进行拦截,所有资源都会被拦截。
当时用/进行拦截的时候,所有的静态资源都拦截不到了。
当请求方式为restful风格时必须使用/的拦截方式,但是使用/会将所有的静态资源拦截,为了解决这个问题,需要静态资源释放。

静态资源释放

v2-cdb918082cd7829f2942fece490c6356_b.png
静态资源释放

SpringMVC注解开发

实行注解开发,后端控制器就不用再去实现Controller接口了,只需要在类体上增加相应的注解即可。

环境搭配:

1、在后端控制器类体上增加注解      
 2、SpringMVC配置文件无需注册Controller。       
 3、SpringMVC配置文件中添加组件扫描器、注解驱动。
           3.1注册组件扫描器,组件扫描器在context标签中
           3.2、注册注解驱动

v2-162deefd9dc30dafa56b429bfd93f95c_b.jpg
@Controller,表示将该类交给Spring容器进行管理

v2-c769a395fed0be54f3e41d0ae85c5bc8_b.png
&amp;lt;!-- base-package=&amp;quot;要扫描哪个包下面的注解&amp;quot; --&amp;gt;

v2-b9d53a1ce2dced0569f55e830c92ffd2_b.jpg
&amp;lt;mvc:annotation-driven /&amp;gt;,该标签会自动注册处理器映射器(HandlerMapping)和处理器适配器(HandlerAdapter)。

常用注解:

@Controller:该注解表示将当前类交给Spring容器管理。
@Scope:默认是singleton,可以改为prototype。
@RequestMapping,该注解可以放在类体上或者方法体上。
		放在类体上表示起到限定范围的作用。
		放在方法体上表示请求映射路径。

v2-225a80af2abeb12df5197666f41cabe1_b.png
访问地址为:/springmvc/my 。

v2-059aa230f8618e15b9714833eff6d518_b.png

视图解析器:

视图解析器分为前缀和后缀。
当你返回一个视图资源时,后台会自动查找是否配置了视图解析器,如果配置了,那么它会把你的前缀拼接,然后拼接视图名,最后拼接后缀,形成完整路径。

v2-65272db8e13778a46cc54b6d3e4fc7ed_b.png
前缀是哪个文件夹下的,后缀是扩展名

处理器方法常用的参数:

        1、HttpServletRequest
	2、HttpServletResponse
	3、HttpSession
	4、用于承载数据的Model、Map、ModelMap
	5、请求中所携带的请求参数。

接受请求参数:

1、逐个接收
定义ModelAndView对象并返回,这样对象中可添加moderl数据,指定view视图。
		从页面发送请求数据至后台处理器中,定义相应的参数,用参数进行接受(在SpringMVC中参数可以自动的进行类型转换),这样就可以完成参数接收。
	注意:	接收数据时参数名称要与name属性的值一致,否则接收不到数据。

v2-4bf89d3d1d984407fc065b1425ef4aab_b.jpg
使用注解形式,参数接收之@RequestParam
		为了解决传过来的参数与接收的时候参数名称不一致的问题,使用@RequestParam注解("form表单中的name名称")

v2-e2e5ecc1b75f5363efea52ef528770cb_b.jpg
不常用
2、以对象形式整体接收:
                2.1--->创建pojo实体类,需要注意的是,类中的属性名要和form表单中传过来的name属性值一致,否则无法封装。
		2.2--->后台控制器中的方法参数改为实体类。
		2.3--->使用get进行赋值。

v2-ceb8ba760b1253254ab8d014201b1105_b.jpg
将对象作为参数,调用对象内的属性
3、域属性参数的接收:
		在对象中有一个属性,而这个属性是一个对象属性,这样的属性就被称作为域属性。restful风格的参数接收。

v2-e31dc415e001eaf34d37ebefd9afa7d0_b.jpg
在实体类中,设置一个对象作为属性
4、数组或集合参数的接收:
		数组:后端控制器内的方法参数为数组形式,通过循环遍历获取数据。
		集合:在接收的时候,需要在参数内加上@RequestParam进行效正。

v2-9402be39c7efe0bd34ec2ca69b99bdc6_b.jpg
5、restfull风格传参:
                在方法体上的@RequestMapping中添加值。
		@PathVariable:路径变量。	在参数内使用@PathVariable进行接收。
		参数作为路径变量的一部分,通过路径传递过来。

v2-e650903b8fbd2f1101e58fc3fd2483c4_b.png
6、接收json字符串

v2-bff636a5f9c9789d1344f73c0c185906_b.png
jar包

v2-a744a6437f255b5ed5cdd26f646cd70e_b.jpg
jsp页面,通过点击触发函数,发送ajax请求

v2-ebdc8e7b752e92dcb6c473a17c6df011_b.jpg
后端控制器

处理器方法返回值类型String数据

如果想承载数据,可以在方法参数内添加承载数据的对象 ,通过对象进行存储数据。
1、后端控制器获取数据
2、将数据封装到Model,Map,ModelMap中。
3、跳转页面。

v2-2e8f02d2e1fc1971286bbdd6df4e81b8_b.jpg
可以通过参数内的对象进行存值,在jsp页面使用el表达式取值

处理器方法返回值类型String之设置编码格式

在RequestMapping中设置编码格式
@ResponseBody:将当前方法的返回值放到响应体中,并且将返回值转换成json格式字符串。

v2-d7708be93f42db83e3c717935475c9dd_b.png

处理器无方法返回值void

1、将HttpServletResponse作为参数。
2、通过对象参数调用方法将字符串响应给前端。

v2-dd38c3cdb947c8f634ae006af727be0e_b.jpg
后端控制器,拼接json字符串,并将字符串通过作用域响应
前端如果想取某一个值的话,可以将json格式字符串转换成对象,使用eval。

v2-4f68780d9e715293c1cfb98764b01e7d_b.jpg

处理器方法返回值类型Object

在方法体上使用@ResponseBody。

v2-95bf3466fe528de17de87ff1be88e830_b.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值