0
点赞
收藏
分享

微信扫一扫

SpringMVC系列笔记一——SpringMvc基本使用

陬者 2022-02-25 阅读 84

MVC 架构模式简介

  • MVC 是 Model、View 和 Controller 的缩写,分别代表 Web 应用程序中的 3 种职责
    • 模型:用于存储数据以及处理用户请求的业务逻辑
    • 视图:向控制器提交数据,显示模型中的数据
    • 控制器:根据视图提出的请求判断将请求和数据交给哪个模型处理,将处理后的有 关结果交给哪个视图更新显示
  • 基于 Servlet 的 MVC 模式
    • 模型:一个或多个 JavaBean 对象,用于存储数据(实体模型,由 JavaBean 类创建)和处理业务逻辑(业务模型,由一般的 Java 类创建)
    • 视图:一个或多个 JSP 页面,向控制器提交数据和为模型提供数据显示,JSP 页 面主要使用 HTML 标记和 JavaBean 标记来显示数据
    • 控制器:一个或多个 Servlet 对象,根据视图提交的请求进行控制,即将请求转发 给处理业务逻辑的 JavaBean,并将处理结果存放到实体模型 JavaBean 中,输出给视图显示
      在这里插入图片描述

SpringMVC 简介

SpringMVC概念

SpringMVC是一个基于MVC模式的Web框架,是Spring框架的一个模块 。它以SpringIOC容器为基础,并利用容器的特性来简化它的配置,所以 SpringMVC 和 Spring 可直接整合使用。SpringMVC 对 MVC 流程进行了封装,屏蔽掉很多底层代码,让开发者可以更加轻松快 捷的完成基于 MVC 模式的 Web 开发

SpringMVC 中重要的组件

  • DispatcherServlet:前端控制器,接受所有请求
  • HandlerMapping:处理器映射器,根据配置的映射规则,找到对应的处理器
  • HandlerAdapter:处理器适配器,执行处理器中处理请求的方法
  • ViewResolver:视图解析器,定位视图

工作流程

在这里插入图片描述
Spring MVC 的工作流程如下:

  1. 客户端请求提交到 DispatcherServlet
  2. 由 DispatcherServlet 控制器通过HandlerMapping,找到处理请求的Controller
  3. DispatcherServlet 将请求提交到 Controller
  4. Controller 调用业务逻辑处理后返回 ModelAndView
  5. DispatcherServlet通过 ViewResolver 视图解析器,找到 ModelAndView 指定的视图

SpringMVC 的基本使用

基于xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 
</beans>

配置前端控制器

  • 修改 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> 
<!--配置 SpringMVC 的前端控制器--> 
	<servlet> 
		<servlet-name>springmvc</servlet-name> 
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
		<!--如果未指定 springMVC 配置文件的路径以及名称,那么前端控制器默认 会去 WEB/INF 目录中查找一个名称为'springmvc'-servlet.xml--> 
		<init-param> 
			<param-name>contextConfigLocation</param-name> 
			<param-value>classpath:springmvc.xml</param-value> 
		</init-param> 
		<load-on-startup>1</load-on-startup> 
	</servlet> 
	<servlet-mapping> 
		<servlet-name>springmvc</servlet-name> 
		<url-pattern>/</url-pattern> 
	</servlet-mapping> 
</web-app>

创建 Controller 处理请求

public class DemoController implements Controller { 
	@Override 
	public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { 
		ModelAndView modelAndView = new ModelAndView(); 
		modelAndView.setViewName("/index.jsp"); 
		modelAndView.addObject("msg","Hello SpringMVC"); 
		return modelAndView; 
	}
}

配置Controller

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 
<!--配置 Controller--> 
<bean id="/demo" class="com.lanh.web.controller.DemoController"/> 
</beans>

SpringMVC 基于注解的使用方式

在 SpringMVC 的基本使用中我们是以传统方式创建的控制器,它需要实现 Controller 接 口。传统风格的控制器不仅需要在配置文件中配置映射,而且只能编写一个处理方法,不够 灵活。
使用基于注解的控制器具有以下两个优点

  • 在基于注解的控制器类中可以编写多个处理方法,进而可以处理多个请求,这就允许将 相关的操作编写在同一个控制器类中,从而减少控制器类的数量,方便以后的维护。
  • 基于注解的控制器不需要在配置文件中部署映射,仅需要使用@RequestMapping注解就可以将一个 URI 绑定到类或方法上

注解介绍:

  • @Controller注解:用于指定 Bean 对象为控制器
  • @RequestMapping注解:用于将一个 URI 绑定到类上或类的方法中

配置前端控制器

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> 
<!--配置前端控制器--> 
	<servlet> 
		<servlet-name>springmvc</servlet-name> 
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
		<init-param> 
			<param-name>contextConfigLocation</param-name> 
			<param-value>classpath:springmvc.xml</param-value> 
		</init-param> 
		<load-on-startup>1</load-on-startup> 
	</servlet> 
	<servlet-mapping> 
		<servlet-name>springmvc</servlet-name> 
		<url-pattern>/</url-pattern> 
	</servlet-mapping> 
</web-app>

创建控制器

@Controller 
@RequestMapping("/lanh") 
public class AnnController { 
	@RequestMapping("/index") 
	public ModelAndView annDemo(){ 
		ModelAndView modelAndView = new ModelAndView(); 
		modelAndView.setViewName("/index.jsp"); 
		modelAndView.addObject("msg","Hello lanh"); 
		return modelAndView; 
	} 
}

配置注解扫描、注解驱动

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd" >
	<context:component-scan base-package="com.lanh.web.controller"/> 
	<!-- 注解驱动 -->
	<mvc:annotation-driven/>
</beans>

<mvc:annotation-driven/>的作用是提供扩展功能的
它的处理类 AnnotationDrivenBeanDefinitionParser 会注册很多基于注解开发时所用到的 Bean 对 象 到 容 器 中 。 其 中包含RequestMappingHandlerMapping 、 RequestMappingHandlerAdapter与ExceptionHandlerExceptionResolver 三个 bean

举报

相关推荐

0 条评论