专栏首页Golang开发SpringMVC(1)——概述

SpringMVC(1)——概述

三层架构

表现层:也就是我们常说的 web 层。它负责接收客户端请求,向客户端响应结果,通常客户端使用 http 协议请求web 层,web 需要接收 http 请求,完成 http 响应。 表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。 表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。 表现层的设计一般都使用 MVC 模型。(MVC 是表现层的设计模型,和其他层没有关系) 业务层:也就是我们常说的 service 层。它负责业务逻辑处理,和我们开发项目的需求息息相关。web 层依赖业务层,但是业务层不依赖 web 层。 业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的,事务应该放到业务层来控制) 持久层:也就是我们是常说的 dao 层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体, 数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。通俗的讲,持久层就是和数据库交互,对数据库表进行曾删改查的。

MVC模型

Model(模型)模型数据,通常指的就是我们的数据模型。作用一般情况下用于封装数据。 View(视图)展现模型,与用户进行交互,通常指的就是我们的 jsp 或者 html。作用一般就是展示数据的。通常视图是依据模型数据创建的。 Controller(控制器)接受客户端的请求,是应用程序中处理用户交互的部分。作用一般就是处理程序逻辑的。

RequestMap

建立请求URL和处理请求方法之间的对应关系 属性 value:请求的URL,它和path属性作用是一样的。 method用于指导请求的方法 params:用于指定限制请求的条件,支持简单的表达式 headers:发送的请求必须包含请求头

SpringMVC核心组件

1DispatcherServlet 前置控制器 2Handle 处理器,完成具体的业务逻辑 3HandleMapping 将请求映射到Handler 4HandlerInterceptor 处理器拦截器 5 HandlerExecutionChain处理器执行链 6 HandleAdapter处理器适配器 7 ModelAndView 装载模型数据和视图信息 8 ViewResolver 视图解析器 在接收到 HTTP 请求后,DispatcherServlet 会查询 HandlerMapping 以调用相应的 Controller。 Controller 接受请求并根据使用的 GET 或 POST 方法调用相应的服务方法。 服务方法将基于定义的业务逻辑设置模型数据,并将视图名称返回给 DispatcherServlet。 DispatcherServlet 将从 ViewResolver 获取请求的定义视图。 当视图完成,DispatcherServlet 将模型数据传递到最终的视图,并在浏览器上呈现。 所有上述组件,即: HandlerMapping,Controller 和 ViewResolver 是 WebApplicationContext 的一部分,它是普通 ApplicationContext 的扩展,带有 Web 应用程序所需的一些额外功能。

SpringMVC实现流程

springmvc.jpg

1 客户端请求被DispatcherServlet接收 2 DispatcherServlet将请求映射到Handle 3 生成Handle以及HandlerInterceptor 4 返回HandlerExecutionChain(Handler+HandlerInterceptor) 5DispatcherServlet通过HandleAdapter 执行Handler 6 返回一个ModelAndView。 7 DispatcherServlet通过viewResolver进行解析 8 返回填充了模型数据的View,响应给客户端。

xml配置

mvn配置pom.xml

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.1.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>

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">

    <bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/user">userHandler</prop>
            </props>
        </property>
    </bean>
    <bean id="userHandler" class="com.bx.handler.UserHandler"></bean>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

web.xml配置

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <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>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

user.java

package com.bx.handler;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class UserHandler implements Controller {
    @Override
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        // 添加模型数据
        modelAndView.addObject("name","xiaoming");
        // 添加逻辑视图
        modelAndView.setViewName("user");
        return modelAndView;
    }
}

user.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>${name}</h3>
</body>
</html>

启动tomcat 访问http://localhost:8080/user

注解配置

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

@Controller
public class UserAnnotationHandler {

    @RequestMapping("user")
    public ModelAndView userRequest() {
        ModelAndView modelAndView = new ModelAndView();
        // 添加模型数据
        modelAndView.addObject("name","xiaowang");
        // 添加逻辑视图
        modelAndView.setViewName("user");
        return modelAndView;
    }
}

注解配置spring.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"
       xmlns:context="http://www.springframework.org/schema/context"
       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">

    <context:component-scan base-package="com.bx.handler"></context:component-scan>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring(3)——AOP

    作用:在程序运行期间,不修改源码对已有方法进行增强。 优势:1减少重复代码,2提高开发效率,3维护方便

    羊羽shine
  • ES6——函数

    只有在未传递参数,或者参数为 undefined 时,才会使用默认参数,null 值被认为是有效的值传递。

    羊羽shine
  • JS对象

    JavaScript中: js中的对象就是生活中对象的一个抽象, 没有特征和行为,取而代之的是有对应的属性和方法;

    羊羽shine
  • Spring MVC的入门程序

    1.1) 回顾MVC模式 模型model(javabean), 视图view(jsp/img) 控制器Controller(Action/servlet) ...

    微醺
  • 使用IntelliJ IDEA开发SpringMVC网站(二)框架配置 顶

    注:此文承接上一文:使用IntelliJ IDEA开发SpringMVC网站(一)开发环境

    Gaussic
  • 【Java框架型项目从入门到装逼】第七节 - 学生管理系统项目搭建

    剽悍一小兔
  • 干货--JMS(java消息服务)整合Spring项目案例

    Sprng-jms消息服务小项目 所需的包: spring的基础包 spring-jms-xx包 spring-messag...

    汤高
  • 第三十七章:基于SpringBoot架构以及参数装载完成接口安全认证

    恒宇少年
  • SSM 框架快速整合实例--学生查询

    SSM 框架即 Spring 框架、SpringMVC 框架、MyBatis 框架,关于这几个框架的基础和入门程序,我前面已经写过几篇文章作为基础和入门介绍了。

    compassblog
  • SSM 框架快速整合实例--学生查询

    SSM 框架即 Spring 框架、SpringMVC 框架、MyBatis 框架,关于这几个框架的基础和入门程序,我前面已经写过几篇文章作为基础和入门介绍了。...

    compassblog

扫码关注云+社区

领取腾讯云代金券