欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringMVC-简介和执行原理分析(一)

程序员文章站 2023-12-02 12:10:34
什么是MVC MVC : 模型、视图、控制器 , 是一种软件设计规范,说明不是设计模式; 本质:将业务逻辑 , 数据 , 显示 分离的方式来编写代码; 前后端分离; Model:数据模型,提供要展示的数据,一般我们都会把这两个分离开来 , 数据Dao,服务层Service。 View :负责进行数据 ......

什么是mvc

mvc : 模型、视图、控制器 , 是一种软件设计规范,说明不是设计模式;

本质:将业务逻辑 , 数据 , 显示 分离的方式来编写代码; 前后端分离;

model:数据模型,提供要展示的数据,一般我们都会把这两个分离开来 , 数据dao,服务层service。

view :负责进行数据的渲染和展示;客户端想要看到的东西

controller:接收用户请求,交给model处理,从model更新后的数据或者结果,返回给前端。调度员

什么是springmvc

springmvc 是 spring的一部分,是基于java实现的mvc的轻量级web框架.

优点:简单,易学,轻量级,高效,基于请求和响应的mvc框架,约定优于配置,功能强大:restful、数据验证、格式化{json}、主题,本地化、异常处理......

the dispatcherservlet

springmvc框架围绕着dispatcherservlet(servlet请求分发器)设计;

SpringMVC-简介和执行原理分析(一)

 

SpringMVC-简介和执行原理分析(一)

 

springmvc的执行原理

SpringMVC-简介和执行原理分析(一)

1、dispatcherservlet表示前置控制器,是整个springmvc的控制中心。用户发出请求,dispatcherservlet接收请求并拦截请求。

我们假设请求的url为:

http://localhost:8080/springmvc/hello

如上url拆分成三部分:

http://localhost:8080服务器域名

springmvc部署在服务器上的web站点

hello表示控制器

通过分析,如上url表示为:请求位于服务器localhost:8080上的springmvc站点的hello控制器。

2、handlermapping为处理器映射。dispatcherservlet调用handlermapping,handlermapping根据请求url查找handler。

3、handlerexecution表示具体的handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。

4、handlerexecution将解析后的信息传递给dispatcherservlet,如解析控制器映射等。

5、handleradapter表示处理器适配器,其按照特定的规则去执行handler。

6、handler让具体的controller执行。

7、controller将具体的执行信息返回给handleradapter,如modelandview。

8、handleradapter将视图逻辑名或模型传递给dispatcherservlet。

9、dispatcherservlet调用视图解析器(viewresolver)来解析handleradapter传递的逻辑视图名。

10、视图解析器将解析的逻辑视图名传给dispatcherservlet。

11、dispatcherservlet根据视图解析器解析的视图结果,调用具体的视图。

12.最终视图呈现给用户。


 

hello,springmvc 

1.导包

配置tomcat

  <dependencies>
    <dependency>
      <groupid>junit</groupid>
      <artifactid>junit</artifactid>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!-- spring mvc 及 spring系列包 -->
    <dependency>
      <groupid>org.springframework</groupid>
      <artifactid>spring-webmvc</artifactid>
      <version>4.3.24.release</version>
    </dependency>
    <!--servlet核心-->
    <dependency>
      <groupid>javax.servlet</groupid>
      <artifactid>javax.servlet-api</artifactid>
      <version>4.0.1</version>
    </dependency>
    <!-- jstl -->
    <dependency>
      <groupid>javax.servlet</groupid>
      <artifactid>jstl</artifactid>
      <version>1.2</version>
    </dependency>
  </dependencies>

注意资源导出问题:

   <!--解决资源导出问题-->
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>

2.编写web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemalocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="webapp_id" version="3.0">
   <servlet>
     <servlet-name>springmvc</servlet-name>
     <servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class>
     <!--关联springmvc配置文件-->
     <init-param>
       <param-name>contextconfiglocation</param-name>
       <param-value>classpath:springmvc-servlet.xml</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
   </servlet>
  
  <!--
/和/*的区别:
< url-pattern > / </ url-pattern > 不会匹配到.jsp, 只针对我们编写的请求;
  即:.jsp不会进入spring的 dispatcherservlet类 。
< url-pattern > /* </ url-pattern > 会匹配*.jsp,
  会出现返回jsp视图时再次进入spring的dispatcherservlet 类,导致找不到对应的controller所以报404错。
-->

  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

注意点:

servlet-mapping 中的url-pattern  

/和/*的

区别: / 只针对我们编写的请求,即.jsp不会进入spring的dispatcherservlet类中.

    /* 会匹配*.jsp会出现返回jsp视图时再次进入spring的dispatcherservlet类,导致找不到对应的controller所以报404的错误.

3.编写springmvc的核心配置文件

在springmvc的核心配置文件中只用编写4个部分:

1.扫描指定包的注解

2.配置资源过滤

3.支持注解驱动

4.配置视图解析器

<?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:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemalocation="
        http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--扫描指定包下的注解,让指定的类能够被ioc容器管理-->
    <context:component-scan base-package="org.west.controller"/>

    <!--静态资源过滤-->
    <mvc:default-servlet-handler/>
    <!--支持注解驱动-->
    <mvc:annotation-driven/>

    <!--配置视图解析器-->

    <bean id="internalresourceviewresolver" class="org.springframework.web.servlet.view.internalresourceviewresolver">
        <property name="prefix" value="/web-inf/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    
</beans>

注意点:要导入对应的文件约束.

4.编写controller类

package org.west.controller;

import org.springframework.stereotype.controller;
import org.springframework.ui.model;
import org.springframework.web.bind.annotation.requestmapping;


@controller
@requestmapping("h1")
public class hellocontroller {

    @requestmapping("hello")
    public string hello(model model){

         model.addattribute("msg","hello,springmvc");
        return "hello";
    }

}

5.编写.jsp文件

<%@ page contenttype="text/html;charset=utf-8" language="java" %>
<html>
<head>
    <title>springmvc</title>
</head>
<body>

${msg}

</body>
</html>

6.运行结果

SpringMVC-简介和执行原理分析(一)