SpringMVC之入门案例
一、概念1. 三层架构2. MVC模型
二、实现步骤1. 创建WEB工程,引入开发的jar包2. 配置核心的控制器(配置DispatcherServlet)3. 编写springmvc.xml的配置文件4. 编写index.jsp和HelloController控制器类5. 在WEB-INF目录下创建pages文件夹,编写success.jsp的成功页面
三、执行过程分析1. 入门案例的执行流程2. SpringMVC官方提供图形3. 入门案例中的组件分析
一、概念
1. 三层架构
咱们开发服务器端程序,一般都基于两种形式,一种C/S架构程序,一种B/S架构程序使用Java语言基本上都是开发B/S架构的程序,B/S架构又分成了三层架构三层架构
表现层:WEB层,用来和客户端进行数据交互的。表现层一般会采用MVC的设计模型业务层:处理公司具体的业务逻辑的持久层:用来操作数据库的
2. MVC模型
MVC全名是Model View Controller 模型视图控制器,每个部分各司其职。Model:数据模型,JavaBean的类,用来进行数据封装。View:指JSP、HTML用来展示数据给用户Controller:用来接收用户的请求,整个流程的控制器。用来进行数据校验等。
二、实现步骤
1. 创建WEB工程,引入开发的jar包
具体的坐标如下
<properties>
<project
.build
.sourceEncoding
>UTF
-8</project
.build
.sourceEncoding
>
<spring.version>5.0.2.RELEASE
</spring
.version
>
</properties
>
<dependencies>
<dependency>
<groupId>org
.springframework
</groupId
>
<artifactId>spring
-context
</artifactId
>
<version>$
{spring
.version
}</version
>
</dependency
>
<dependency>
<groupId>org
.springframework
</groupId
>
<artifactId>spring
-web
</artifactId
>
<version>$
{spring
.version
}</version
>
</dependency
>
<dependency>
<groupId>org
.springframework
</groupId
>
<artifactId>spring
-webmvc
</artifactId
>
<version>$
{spring
.version
}</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
>
</dependencies
>
2. 配置核心的控制器(配置DispatcherServlet)
在web.xml配置文件中核心控制器DispatcherServlet
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application
</display-name>
<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>
</web-app>
3. 编写springmvc.xml的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.hzxy"/>
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<mvc:annotation-driven conversion-service="conversionService"/>
</beans>
4. 编写index.jsp和HelloController控制器类
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title
</title>
</head>
<body>
<h3>入门程序
</h3>
<a href="/user/hello">入门程序
</a>
</body>
</html>
HelloController
package com
.hzxy
.controller
;
import org
.springframework
.stereotype
.Controller
;
import org
.springframework
.web
.bind
.annotation
.RequestMapping
;
@Controller
@RequestMapping(path
="/user")
public class HelloController {
@RequestMapping(path
="/hello")
public String
sayHello(){
System
.out
.println("Hello StringMVC");
return "success";
}
}
5. 在WEB-INF目录下创建pages文件夹,编写success.jsp的成功页面
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title
</title>
</head>
<body>
<h3>入门成功
</h3>
<%--${ msg }
${sessionScope}--%>
</body>
</html>
启动Tomcat服务器,结果展示
三、执行过程分析
1. 入门案例的执行流程
当启动Tomcat服务器的时候,因为配置了load-on-startup标签,所以会创建DispatcherServlet对象,就会加载springmvc.xml配置文件开启了注解扫描,那么HelloController对象就会被创建从index.jsp发送请求,请求会先到达DispatcherServlet核心控制器,根据配置@RequestMapping注解,找到执行的具体方法根据执行方法的返回值,再根据配置的视图解析器,去指定的目录下查找指定名称的JSP文件Tomcat服务器渲染页面,做出响应
2. SpringMVC官方提供图形
3. 入门案例中的组件分析
DispatcherServlet:前端控制器
用户请求到达前端控制器,它就相当于 mvc 模式中的 c,dispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet 的存在降低了组件之间的耦合性。
HandlerMapping:处理器映射器
HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
处理器(Handler)
它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由Handler 对具体的用户请求进行处理。
处理器适配器(HandlAdapter)
通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
视图解析器(View Resolver)
View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。
视图(View)
SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是 jsp。 一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
mvc:annotation-driven说明
在 SpringMVC 的各个组件中,处理器映射器、处理器适配器、视图解析器称为 SpringMVC 的三大组件。 使 用 mvc:annotation-driven 自动加载 RequestMappingHandlerMapping (处理映射器) 和RequestMappingHandlerAdapter ( 处 理 适 配 器 ) , 可 用 在 SpringMVC.xml 配 置 文 件 中 使 用mvc:annotation-driven替代注解处理器和适配器的配置。它就相当于在 xml 中配置了:
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerM
apping">
</bean>
<bean
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
</bean>
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerA
dapter">
</bean>
<bean
class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter">
</bean>
<bean
class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">
</bean>
<bean
class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExcept
ionResolver">
</bean>
<bean
class="org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolv
er">
</bean>
<bean
class="org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver">
</bean>