Talk is cheap , show me your code!
欢迎来到付振南Java博客,让我们一起学习Java吧!

SpringMVC入门 SpringMVC的基本概念

在软件开发中,一般分为C/S架构和B/S架构,我们Java很是用来做B/S架构。那么在B/S架构中,一般会给系统分层,在前面我们学了持久层的Mybatis框架,业务层的Spring框架, 现在我们要来学习表现层的SpringMVC框架了。

说SpringMVC之前,我们得先知道MVC是什么。

  • M-Model,通常指的就是我们的数据模型。作用一般情况下用于封装数据。
  • V-View,通常指的就是我们的 jsp 或者 html。作用一般就是展示数据的。
  • C-Controller,是应用程序中处理用户交互的部分。 作用一般就是处理程序逻辑的。

SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful 编程风格的请求。

SpringMVC在三层架构中的位置
SpringMVC执行流程

在实际项目中,所有客户端发送的Request请求都会到SpringMVC的前端控制器中,这个前端控制器叫做DispatcherServlet,它就相当于一个超级大的指挥调度中心,调度着一切。

前端控制器接收到请求之后,会把请求转发给处理器映射器,处理器映射器会根据具体的请求,映射到相应的Controller相应的方法,然后返回给前端控制器,但是处理器映射器并不会自己去执行相应的方法,他只是起到一个映射的作用,告诉前端控制器要执行什么方法。

前端控制器收到处理器映射器返回来的执行链之后,会请求处理器适配器去执行。处理器适配器根据不同的方法执行不同的事件,然后把ModelAndView返回给前端控制器。

前端控制器接收到之后,会把ModelAndView传给视图解析器,视图解析器会进行视图解析,然后返回给前端控制器要显示哪个View。

前端控制器接收到视图解析器传回来的View之后,会进行视图渲染,并将数据模型存到request域中,最后在响应(response)客户端,客户端就会展示页面了。

以上就是SpringMVC的整个执行过程了,光说可能有点枯燥难理解,我们用一个小案例来演示一下。

首先在maven中导入坐标。

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.11</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.11</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.0.2.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>5.0.2.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.0.2.RELEASE</version>
</dependency>
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.0</version>
  <scope>provided</scope>
</dependency>

然后我们就需要来配置核心控制器,也就是我们的前端控制器了,在web.xml文件中这么配置,记得在初始化的时候指定SpringMVC的配置文件路径。

<!--配置前端控制器-->
<servlet>
<servlet-name>dispatcherServlet</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>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

然后我们需要去配置我们的SpringMVC配置文件。

<!-- 开启注解扫描 -->
<context:component-scan base-package="cn.fuzhennan"/>

<!-- 配置视图解析器 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 指定文件所在路径 -->
<property name="prefix" value="/WEB-INF/pages/"/>
<!-- 指定文件后缀名 -->
<property name="suffix" value=".jsp"/>
</bean>

首先开启注解扫描,这不用多讲,然后需要配置一个视图解析器InternalResourceViewResolver,这个SpringMVC框架为我们提供了,然后我们需要告诉视图解析器需要解析的文件的路径。prefix属性就是指定文件路径,suffix属性的意思就是注定文件后缀名。

做完这些工作后,我们在WEB-IN/pages下写一个success的jsp文件,写上一个返回成功就行。

<h3>SUCCESS</h3>

配置工作到这就差不多了,首先第一步我们需要在客户端发送一个Request请求,所以我们在index.jsp页面写一个超链接吧。

<h3>入门小案例</h3>
<h3><a href="">点这?</a></h3>

点击超链接后,会发送一个请求,我们的DispatcherServlet接收到请求后,会把请求发给处理器映射器,让处理器映射器去映射相应的逻辑代码。

所以我们需要写逻辑代码,在controller包下面建一个HelloController类,写上一个sayHello方法吧,为了能让处理器映射器方便找到我们的方法,我们先在类上面加一个@RequestMapping注解,值就写user,然后在方法上也加上一个@RequestMapping注解,值就写/hello,然后return一个success的字符串。

package cn.fuzhennan.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * 控制层
 * @author fuzhennan
 */
@Controller
@RequestMapping(path = "user")
public class HelloController {

/**
 * 第一个入门案例
 * @return
 */
 @RequestMapping(path = "/hello")
public String sayHello(){
System.out.println("Hello springMVC");
return "success";
}
}

控制层代码写完了,那么我们就需要重新在index.jsp的超链接中指定我们方法的路径了。

<h3>入门小案例</h3>
<h3><a href="/user/hello">点这?</a></h3>

这样我们的前端请求和后端的方法就对应上了,处理器映射器就知道点击超链接后,要去HelloController类中找sayHello方法了,然后返回给处理器适配器。

处理器适配器拿到sayHello方法后,开始执行方法,首先打印输出Hello springMVC,然后返回success,前端控制器拿到success后,把success传给视图解析器。

前面我们在视图解析器中配置了路径和后缀名,所以视图解析器根据prefix+return值+suffix很快的就拼接出来了是WEB-INF/pages/success.jsp这个文件,然后把这个视图文件返回给前端控制器。

前端控制器知道是success.jsp之后,开始渲染success.jsp文件,然后响应给客户端浏览器,所以会在浏览器显示SUCCESS。

我们启动服务器来看看结果。

点击之后,跳转到success.jsp页面,成功显示SUCCESS。

同时后端控制台打印输出了Hello springMVC!

到此为止,springMVC的整个执行流程就结束了。

赞(1) 打赏
未经允许不得转载:付振南Java博客 » SpringMVC入门

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏