SpringMvc 学习总结

MVC模型

MVC模型的由来
一、Model1 模型:

Model1 模型是很早以前项目开发的一种常见模型(此模型不是MVC模型),项目主要由JSP和 JavaBean 两部分组成。JSP的职责是展示数据和处理数据,所有逻辑代码都写在JSP中,导致代码重用性很低,维护也不方便。
请添加图片描述

二、Model2 模型:

Model2 模型是基于MVC架构的设计模式,是在 Model1 的基础上进行改良。它把处理请求和展示数据进行了分离。Servlet作为前端控制器,负责接收客户端发送的请求,后端JavaBean来完成实际的逻辑处理,最后转发到相应的JSP页面处理显示响应。

请添加图片描述

SpringMVC

Spring MVC是一个基于Java的实现了MVC设计模式的轻量级Web框架,通过把Model、View、Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发。

SpringMVC 的执行流程:

请添加图片描述

SpringMVC 中三大组件:

1、处理器映射器: HandlerMapping
负责解析请求URL,分配请求到对应的Handler进行处理,HandlerMapping会将处理器和拦截器封装,形成一个处理器执行链(HandlerExecuteChain),@RequestMapping中拦截特定方式(get)提交的请求就是通过拦截器实现的。Spring MVC提供了许多HandlerMapping的实现,默认使用的是BeanNameUrlHandlerMapping。
2、处理器适配器: HandlerAdapter
Spring mvc 采用适配器模式来适配调用指定Handler,根据Handler的不同种类采用不同的适配器Adapter
例举三种适配器:
SimpleControllerHandlerAdapter:使用此适配器的控制器写法:需要实现 Controller 接口

public class ControllerTest implements Controller {

@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, 

HttpServletResponse httpServletResponse) throws Exception {

    ModelAndView mv = new ModelAndView();
    mv.setViewName("success");
    return mv;
  } 
}

还需要在SpringMvc.XML中配置:

<bean id="simpleControllerHandlerAdapter " class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> 
<bean name="/hello" class="com.test.web.controller.ControllerTest"></bean>

HttpRequestHandlerAdapter:使用此适配器的控制器写法:需要实现HttpRequestHandler接口:

public class ControllerTest implements HttpRequestHandler {
 
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
   } 
}

还需要在SpringMvc.XML中配置:

<bean name="/hello" class="com.test.web.controller.ControllerTest"></bean> 
<bean id=" httpRequestHandlerAdapter" class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>

RequestMappingHandlerAdapter:这种是实际开发中使用最多的:使用注解@Controller 配置

@Controller
public class ControllerTest {

@RequestMapping("hello")
public String sayHello() {
    System.out.println("控制器方法执行了");
    return "success";
  } 
}

配置有两种方式:

常用:
<mvc:annotation-driven></mvc:annotation-driven>

不常用:
<bean id="requestMappingHandlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>

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

每一种映射策略对应一个具体的视图解析器实现,还可以通过 order 属性指定解析器的优先顺序,order 越小优先级越高,SpringMVC 会按视图解析器顺序的优先顺序对逻辑视图名进行解析。

常用注解
@ RequestParam

将请求参数绑定到控制器的方法参数上,是springmvc中的接收普通参数的注解

属性value是请求参数的名称,可以指定获取某一个参数值,也可以用Map接收所有参数值
required是请求参数是否必须提供参数,默认是true,表示必须提供。


@RequestBody

通过Http传递参数一般有两种方式,一种是通过url,一种是通过body,@RequestBody就是去解析body然后映射到我们的参数上。

属性required是否必须有请求体,默认是true,在使用该注解时,当为true时get的请求方式会报错,取值为false的话,get的请求是null。


@ResponseBody

@ResponseBody 是作用在方法上的,表示该方法的返回结果直接写入response body中,可以也直接用在类上 ,最典型的例子就是 @RestController 这个注解,它就包含了 @ResponseBody 这个注解,但在类上用@RestController时,其内的所有方法都会默认加上@ResponseBody,也就是默认返回JSON格式。


@PathVariable

该注解是用于绑定url中的占位符,spring3.0以后,url才开始支持占位符的,它是springmvc支持的rest风格url的一个重要的标志,占位符:@RequestMapping(value=“/test/{name}/{id}”),{name}和{id}就是url的占位符,然后请求路径可以这样写:(http://localhost:8080/test/张三/1)


@RequsetMappring

用来处理请求地址映射的,也就是说将其中的所有处理器方法都映射到该url路径上,有6个属性

method:指定请求类型,比如get、post、delete等,也可以直接用GetMapping等注解。
value:指请求的地址,如果是多个地址可以用{}来指定。
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。
consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html。
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
params:指定request中必须包含某些参数值是,才让该方法处理。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值