SpringMVC全面学习

一.认识springMVC框架

1.MVC概念

是一种设计思想,将一个应用分成3个基本部分,分别代表着Web应用程序中的3种职责 Model(模型):用于存储数据和完成业务逻辑处理,一个或多个JavaBean对象(数据访问对象和业务逻辑对象)。

Spring MVC的模型是应用程序的数据结构和业务逻辑。在Spring MVC中,模型通常由JavaBean或普通的Java类实现。模型类可以包含属性、getter和setter方法以及任何其他必要的业务逻辑方法。在控制器中,可以使用ModelMap对象将模型数据添加到模型中,以便在视图中呈现。

View(视图):用于显示数据和向控制器提交数据请求,一个或多个JSP页面,用于展示数据和提交表单请求。

Spring MVC的视图是用户界面,可以是HTML、JSP、Thymeleaf等任何支持的技术。视图可以使用JSP、FreeMarker等模板引擎来呈现动态数据。在Spring MVC中,视图可以通过使用视图解析器来呈现数据。视图解析器可以使用XML配置文件或注解来声明。

Controller(控制器):根据视图请求调用Model完成业务处理,将处理后的结果交由View进行展示,一个或多个Servlet对象,接收视图请求并交由Model处理,将处理结果输出给View显示。

Spring MVC的控制器是处理用户请求的组件。控制器可以使用注解或XML配置文件来声明。常用的注解包括@Controller、@RequestMapping和@RequestParam等。@Controller注解用于标识控制器类,@RequestMapping注解用于指定处理哪些请求,@RequestParam注解用于获取请求参数。

SpringMVC是Spring框架提供的构建Web应用程序的全功能MVC模块。

2.搭建SpringMVC项目

整体步骤:

1>创建Web工程

2>引入Jar包

3>配置文件(web.xml和spring-mvc.xml)

SpringMVC是基于Servlet的框架,DispatcherServlet是整个SpringMVC框架的核心 DispatcherServlet主要职责是接收所有用户请求,并将其分派给相应的Controller来处理

<!-- 配置DispatcherServlet -->
<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>
org.springframework.web.servlet.DispatcherServlet
          </servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
<!-- 配置DispatcherServlet接受所有URL请求 -->
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

注:url-pattern是”/”,千万不能写成”/*”

说明:

1、load-on-startup: (1)当值为0或者大于0时,表示tomcat在应用启动时就加载这个servlet (2)当是一个负数时或者没有指定时,则表示第一次URL请求的时候加载该servlet

2、servlet-mapping用于配置servlet接受哪些URL请求,<url-pattern>/</url-pattern>表示接受所有请求,注意,千万不要写成<url-pattern>/*</url-pattern>

<!-- 编码过滤器,解决中文乱码问题 -->
<!--在 web.xml添加 SpringMVC的一个过滤器,用于将请求和响应进行编码,以免中文乱码-->
	<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>设计Controller、View和Model

以下是一个简单的控制器示例:

@Controller  
@RequestMapping("/hello")  
public class HelloController {  
    @RequestMapping(method = RequestMethod.GET)  
    public String printHello(ModelMap model) {  
        model.addAttribute("message", "Hello Spring MVC Framework!");  
        return "helloworld";  
    }  
}

在上面的示例中,我们使用@Controller和@RequestMapping注解来声明一个控制器类。在printHello()方法中,我们接收一个ModelMap对象作为参数,并向其中添加一个message属性。最后,我们返回一个逻辑视图名称"helloworld",该名称将被解析为实际的视图实现。

定义视图解析器

在Spring MVC中,视图解析器用于将逻辑视图名称解析为实际的视图实现。以下是一个简单的视图解析器示例:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
    <property name="prefix" value="/WEB-INF/views/"/>  
    <property name="suffix" value=".jsp"/>  
</bean>

在上面的配置中,我们定义了一个InternalResourceViewResolver类作为视图解析器,并指定了前缀和后缀。这意味着当控制器返回一个逻辑视图名称时,视图解析器将在/WEB-INF/views/目录下查找与该名称匹配的JSP文件。

表单处理和数据绑定

Spring MVC提供了强大的表单处理和数据绑定功能。以下是一个处理用户注册的表单提交示例:

在控制器中处理表单提交:

@Controller  
@RequestMapping("/register")  
public class RegisterController {  
    @RequestMapping(method = RequestMethod.POST)  
    public String registerUser(@ModelAttribute("user") User user, BindingResult result) {  
        if (result.hasErrors()) {  
            return "register"; // 返回注册页面,显示错误信息  
        } else {  
            // 注册逻辑代码...  
            return "success"; // 注册成功页面  
        }  
    }  
}

在上面的示例中,我们使用@ModelAttribute注解将表单提交的数据绑定到一个User对象上。如果数据验证失败,我们将返回注册页面并显示错误信息;否则,我们将执行注册逻辑并返回成功页面。 还需要定义一个User类,包含需要绑定的属性和getter/setter方法。在视图中呈现表单:在JSP文件中,可以使用Spring标签库来呈现表单并绑定数据。以下是一个简单的注册页面示例:在HTML页面中使用form标签提交表单,使用input标签接收用户输入的值,并使用Spring标签库中的form标签绑定数据。例如:

<form:input path="username" />

其中path属性指定要绑定的属性名称。这样,当用户提交表单时,Spring MVC会自动将数据绑定到User对象上并执行相应的逻辑。

 异常处理在Spring MVC中,可以使用@ExceptionHandler注解来处理应用程序中发生的异常。以下是一个简单的异常处理示例:在控制器类中添加一个方法来处理特定类型的异常,并使用@ExceptionHandler注解来声明该方法用于处理异常。例如:

@ControllerAdvice public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class) public ResponseEntity<Object> exception(Exception exception) { 
    // 处理异常的逻辑代码 
return new ResponseEntity<>("发生异常:" + exception.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } }

 在上面的示例中,我们定义了一个GlobalExceptionHandler类来处理所有的异常。在exception()方法中,我们接收一个Exception对象作为参数并执行相应的处理逻辑。

说明:

1、@Controller注解标识该类为控制器

2、@RequestMapping("/hello")注解表示用户请求访问hello方法的映射路径url

3、控制器中的方法我们称为Action

二.SpringMVC工作原理

(1)用户发送请求至前端控制器DispatcherServlet

(2)DispatcherServlet收到请求调用HandlerMapping处理器映射器

(3)处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

(4)DispatcherServlet调用HandlerAdapter处理器适配器

(5)HandlerAdapter经过适配调用具体的Handler处理器(Controller,也叫后端控制器)。Controller执行完成返回ModelAndView。

(6)HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。

(7)DispatcherServlet将ModelAndView传给ViewReslover视图解析器

(8)ViewReslover解析后返回具体View视图

(9)DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

(10)DispatcherServlet根据View和Model渲染视图响应给客户端。

三.SpringMVC特点

Spring框架的一部分,无缝集成Spring框架 分离了控制器、模型对象、分派器以及处理程序对象的角色,更容易定制 支持注解驱动、数据验证等功能 高度可配置,支持多种视图技术,而不仅仅局限于JSP 采用松耦合可插入组件结构,比其他MVC框架更具备扩展灵活性。

四.注意事项

在使用Spring MVC时,需要注意以下几个关键知识。

  1. 控制器类 控制器类是Spring MVC中最重要的组件之一,它负责接收请求并处理请求。在控制器类中,需要使用@RequestMapping注解来指定处理哪些URL请求。同时,控制器类还可以使用@ModelAttribute注解来将表单数据绑定到模型对象中,方便处理业务逻辑。

  2. 视图解析器 Spring MVC采用视图解析器来将模型对象渲染为HTML或其他格式的响应。在Spring MVC中,可使用多种类型的视图解析器,如InternalResourceViewResolver、JstlView等。

  3. 拦截器 拦截器是Spring MVC中的另一个重要组件,它用于拦截请求并在请求处理前后执行一些操作,如记录日志、验证用户权限等。在Spring MVC中,可使用HandlerInterceptor接口来定义和实现拦截器。

  4. 表单处理 在处理表单时,Spring MVC提供了多种方式来绑定表单数据和模型对象。其中,最常用的方式是使用@ModelAttribute注解和BindingResult参数来将表单数据绑定到模型对象中,并进行数据校验。在控制器中,可以使用@RequestMapping注解来指定处理表单提交的请求,并使用@RequestParam注解来获取表单中的输入值。如果表单验证失败,可以将错误信息添加到Model中,以便在视图中呈现。如果表单验证成功,可以将模型数据添加到Model中,以便在视图中呈现表单提交的结果。

  5. 异常处理 在Web开发中,异常处理是一个非常重要的话题。在Spring MVC中,可使用@ControllerAdvice注解和@ExceptionHandler注解来处理异常。通过定义全局异常处理类,并使用@ExceptionHandler注解来捕获特定类型的异常,可以实现全局异常处理的功能。Spring MVC提供了异常处理功能,可以捕获应用程序中发生的异常并生成相应的HTTP响应。在控制器中,可以使用try-catch块捕获异常并生成HTTP响应。在生成的HTTP响应中,可以包含异常信息或其他必要的信息。

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值