springMVC---1

简介

SpringMVC 是一种基于 Java 的实现 MVC 设计模型
的请求驱动类型的轻量级 Web 框架,属于 Spring     
  FrameWork 的后续产品,已经融合在 Spring Web
 Flow 里面。Spring 框架提供了构建 Web 应用程序的
全功 能 MVC 模块。使用 Spring 可插入的 MVC 架
构,从而在使用 Spring 进行 WEB 开发时,可以选择
使用 Spring 的 Spring MVC 框架'

执行过程

1、服务器启动,应用被加载。读取到 web.xml 中的配
置创建 spring 容器并且初始化容器中的对象
2、浏览器发送请求,被 DispatherServlet 捕获,该 S
ervlet 并不处理请求,而是把请求转发出去。转发 的
路径是根据请求 URL,匹配@RequestMapping 中的
内容。 
3、匹配到了后,执行对应方法。该方法有一个返回值。 
4、根据方法的返回值,借助 InternalResourceViewR
esolver 找到对应的结果视图。 
5、渲染结果视图,响应浏览器

spring组成部分

DispatcherServlet:前端控制器

用户请求到达前端控制器,它就相当于 mvc 模式中的
 c,dispatcherServlet 是整个流程控制的中心,由 它
调用其它组件处理用户的请求,dispatcherServlet 的
存在降低了组件之间的耦合性。 

springMVC的三大组件

HandlerMapping:处理器映射器

 HandlerMapping 负责根据用户请求找到 Handler 即
处理器,SpringMVC 提供了不同的映射器实现不同的
 映射方式,例如:配置文件方式,实现接口方式,注
解方式等。 

 HandlAdapter:处理器适配器

 通过 HandlerAdapter 对处理器进行执行,这是适配
器模式的应用,通过扩展适配器可以对更多类型的处理
 器进行执行

View Resolver:视图解析器 

View Resolver 负责将处理结果生成 View 视图,View 
Resolver 首先根据逻辑视图名解析成物理视图名 即具
体的页面地址,再生成 View 视图对象,最后对 View
 进行渲染将处理结果通过页面展示给用户。

 

 

  

重要注解

@RequestMapping

标注在方法上,该方法成为一个请求处理方法
标注到类所有方法都映射为相对于类级别的请求
用于建立请求 URL 和处理请求方法之间的对应关系。  
属性:
value:用于指定请求的 URL。它和 path 属性的作用是一样的。  
method:用于指定请求的方式。
params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和 配置的一模一样。 

@ RequestParam

 作用:  把请求中指定名称的参数给控制器中的形参赋
值。 属性:  value:请求参数中的名称。  
required:请求参数中是否必须提供此参数。默认值:
true。表示必须提供,如果不提供将报错
例如
@RequestMapping("/useRequestParam")
public String useRequestParam(@RequestParam("name")String username, 

@RequestBody

作用:  用于获取请求体内容。直接使用得到是 key=value&key=value...结构的数据。  
get 请求方式不适用。
 属性:  required:是否必须有请求体。默认值是:true。当取值为 true 时,get 请求方式会报错。
如果取值 为 false,get 请求得到是 null

@ PathVaribale

 作用:  用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},这个{id}就是 url 占位符。  
url 支持占位符是 spring3.0 之后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志。
 属性:  value:用于指定 url 中占位符名称。 
 required:是否必须提供占位符。 
例如
<a href="springmvc/usePathVariable/100">pathVariable 注解</a> 
@RequestMapping("/usePathVariable/{id}") public String usePathVariable(@PathVariable("id") Integer id){
....... 
}

@ SessionAttribute(value = "a")

作用: 用于多次执行控制器方法间的参数共享。
属性: value:用于指定存入的属性名称
type:用于指定存入的数据类型。
例如
mod.addAttribute("a","相当于request域");
取出String a = (String) mod.get("a");

 请求参数的绑定

如果是基本类型或者 String类型:  要求我们的参数名
称必须和控制器中方法的形参名称保持一致。(严格区
分大小写) 如果是 POJO类型,或者它的关联对象:  要
求表单中参数名称和 POJO 类的属性名称保持一致。
并且控制器方法的参数类型是 POJO 类型。 如果是集
合类型,有两种方式: 
 第一种:   要求集合类型的请求参数必须在 POJO
 中。在表单中请求参数名称要和 POJO 中集合属性名
称相同。
   给 List 集合中的元素赋值,使用下标。   给 Map 集
合中的元素赋值,使用键值对。  第二种:   接收的请
求参数是 json 格式数据。需要借助一个注解实现。 

响应数据和结果视图 

1响应之返回值是String类型

//存入到请求(request)域对象
model.addAttribute("user",user);

2.响应之返回值是void类型--转发

//转发
request.getRequestDispatcher("/WEB-INF/pages/succeed.jsp").forward(request,response);

3.响应之返回值是void类型---重定向

//3.1重定向(两次请求)
//response.sendRedirect(request.getContextPath()+"/index.jsp"); //请求不到web-inf下的文件

4.响应之返回值是void类型---model AND view

//实例化
ModelAndView m=new ModelAndView();
//模拟从数据库拿到数据
User user=new User();
user.setUsername("小李2232");
user.setPassword("121111113");
m.addObject("a",user);//存入a
m.setViewName("succeed");//跳转的jsp页面
return m;

5.响应之使用 SpringMVC框架提供forward和redirect进行页面跳转

// return "forward:/WEB-INF/pages/succeed.jsp";
return "redirect:/index.jsp";

6.响应json数据之过滤静态资源

@RequestMapping("/ajaxTests")
public @ResponseBody Person ajaxTest(@RequestBody Person person){ //RequestBody获取这个请求体的数据
//客户端发送ajax请求,传输的是json字符窜,后端把json字符串封装到user对象中
System.out.println(person+"执行了");
//模拟查询数据库
person.setUserName("响应");
person.setPassWord("12333");
return person;//user;拦截器

拦截器可以配置多个

springconfig.xml
<!--2.配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!-- 哪些方法进行拦截 -->
<mvc:mapping path="/user/*"/>

<!-- 哪些方法不进行拦截
<mvc:exclude-mapping path=""/>
-->
<!-- 注册拦截器对象 -->
<bean class="controller.MyInterceptor"/><!--第一个拦截器-->
</mvc:interceptor>
</mvc:interceptors>

HandlerInterceptor 里面有三个实现方法
preHandle1.预处理方法---拦截1器执行了
postHandle2.后执行---拦截器1执行了
afterCompletion3.最后输出---拦截器1执行

配置文件

<mvc:mapping path="/**" /><!-- 用于指定对拦截的 url -->  
 <mvc:exclude-mapping path=""/><!-- 用于指定排除的 url--> 

posted @ 2020-07-07 15:55  三只坚果  阅读(187)  评论(0编辑  收藏  举报