ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringMVC入门

2021-01-23 11:02:58  阅读:160  来源: 互联网

标签:入门 SpringMVC 视图 Controller springframework org 请求


SpringMVC入门

MVC思想将一个应用分成3个基本组成,即Model(模型),View(视图)和Controller(控制器)。让这3个部分以最低的耦合进行协同工作。从而提高应用的可扩展性及可维护性。SpringMVC是一款优秀的基于MVC思想的应用框架,它是Spring提供的一个实现了WebMVC设计模式的轻量Web框架。

MVC模式与SpringMVC工作原理

MVC模式

  1. MVC的概念

MVC是Model、View和Controller的缩写,分别代表Web应用程序中的3种职责。

  • 模型:用于存储数据及处理用户请求的业务逻辑。
  • 视图:向控制器提交数据,显示模型中的数据。
  • 控制器:根据视图提出的请求判断将请求和数据交给哪个模型处理,将处理后的有关结果交给哪个视图更新显示。
  1. 基于Servlet的MVC模式

基于Servlet的MVC模式的具体实现如下:

  • 模型:一个或多个JavaBean对象,用于存储数据(实体数据,由JavaBean类创建)和处理业务逻辑(业务模型,由一般的Java类创建)。
  • 视图:jsp页面,向控制器提交数据和为模型提交数据显示,jsp页面主要使用HTML标记和JavaBean标记来显示数据。
  • 控制器:Servlet对象,根据视图提交的请求进行控制,即将请求转发给处理业务逻辑的JavaBean,并将处理结果存放到实体模型JavaBean中,输出给视图显示。

基于Servlet的MVC模式的流程如下:

基于Servlet的MVC模式

SpringMVC的工作原理

SpringMVC框架是高度可配置的,包括多种视图技术,例如JSP技术,Velocity、Tiles、iText和POI。SpringMVC框架并不关心使用的视图技术,也不会强迫开发者只使用JSP技术,但是这里只讨论JSP。

SpringMVC框架主要由DispatcherServlet、处理器映射、控制器、视图解析器、视图组成。其工作原理如下图所示:

SpringMVC工作原理

SpringMVC的接口

在上图中包含了4个SpringMVC接口,即DispatcherServlet,HandlerMapping,Controller和ViewResolver。

SpringMVC所有的请求都需要经过DispatcherSerlvet来统一分发,在DispatcherSerlvet将请求分发给Controller之前需要借助SpringMVC提供的HandlerMapping定位到具体的Controller。

HandlerMapping接口负责完成客户请求到Controller映射。

Controller接口将处理用户请求,这和JavaServlet扮演的角色一样,一旦Controller处理完用户请求,将返回对象ModelAndView给DispatcherServlet,前端控制器ModelAndView中包含了模型和视图。从宏观角度考虑,DispatcherSerlvet是整个Web应用的控制器。从微观角度考虑,Controller是单个HTTP请求处理过程中的控制器,而ModelAndView对象是HTTP请求过程中返回的模型和视图。

ViewResolver接口(视图解析器)在Web应用中负责查找View对象,从而将相应结果渲染给用户。

第一个SpringMVC应用

创建Web应用并引入jar包

<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.2</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aop</artifactId>
  <version>5.0.2.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-beans</artifactId>
  <version>5.0.2.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.0.2.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>5.0.2.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-expression</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>

在资源文件中添加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="cn.example"/>
    <!--视图解析器-->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--开启SpringMVC框架注解的支持-->
    <mvc:annotation-driven/>
</beans>

该文件的目录必须明确,在web.xml中需要指定该文件位置。

在web.xml文件中配置DispatcherServlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        id="WebApp_ID" version="3.1">
<!--部署DispatcherServlet-->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--指定springmvc.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类

package cn.example.controller;

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

@Controller
public class HelloController {
    @RequestMapping(path = "/hello")
    public String sayHello(){
        System.out.println("hello SpringMVC");
        return "success";
    }
}

编写index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h3>入门程序</h3>
    <a href="/hello">入门程序</a>
</body>
</html>

在WEB-INF目录下创建pages文件夹,编写success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h3>成功访问</h3>
</body>
</html>

第一个SpringMVC应用的分析

入门案例的执行流程

  1. 当启动Tomcat服务器的时候,因为配置了load-on-startup标签,所以会创建DispatcherServlet对象,就会加载springmvc.xml文件。
  2. 开启了注解扫描,那么HelloController对象就会被创建。
  3. 从index.jsp发送请求,请求会到达DispatcherServlet核心控制器,根据配置@RequestMapping注解找到执行的具体方法。
  4. 根据执行方法的返回值,再根据配置的视图解析器,去指定的目录下找到指定名称的jsp文件。
  5. Tomcat服务器渲染页面,做出响应。

入门案例中的组件

  1. 前端控制器(DispatcherServlet)
  2. 处理器映射器(HandlerMapping)
  3. 处理器(Handler)
  4. 处理器适配器(HandlAdapter)
  5. 视图解析器(ViewResolver)
  6. 视图(View)

开启注解的支持,会自动加载处理映射器,处理适配器,可用springmvc.xml配置文件中使用开启注解扫描来替代注解处理器和适配器的配置。

RequestMapping注解

  1. RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系。(发起请求路径执行方法)

  2. RequestMapping注解可以作用在方法和类上。

    1. 作用于类上:第一级的访问目录
    2. 作用于方法上:第二级的访问目录
    3. 细节:路径可以不编写/表示应用的根目录。
    4. 细节:${pageContext.request.contextPath}也可以省略不写。但是路径上不能写/
  3. RequestMapping的属性

    1. path:指定请求路径的url。
    2. value:value属性和path属性一样。(一个参数时默认可以不写)
    3. method:请求方式的定义。参数设定method = {RequestMethod.GET,RequestMethod.POST}
    4. params:用于制定限定请求参数的条件,它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样。例如:params={"acconutName"}表示请求参数中必须含有accountName,params={"money!100"}表示请求参数money不能是100,params={"username=haha"}表示请求参数username必须是haha。
    5. headers:用于指定限制请求消息头的条件。例如:headers = {"Accept"}表示请求头必须包含该信息。

    注意:以上属性,出现任意2个都是与的关系。

标签:入门,SpringMVC,视图,Controller,springframework,org,请求
来源: https://www.cnblogs.com/acknowledge/p/14316857.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有