介绍

这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长!

以下为小编最喜欢的两句话:

要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。

一个人为什么要努力? 我见过最好的答案就是:因为我喜欢的东西都很贵,我想去的地方都很远,我爱的人超完美。因此,小编想说:共勉!

目录

一、SpringMVC简介

1、什么是MVC

2、什么是SpringMVC

3、SpringMVC的特点

二、HelloWorld

1、开发环境

2、创建maven工程

3、配置web.xml

1)默认配置方式

2)扩展配置方式

4、创建请求控制器

5、创建springmvc的配置文件

6、测试HelloWorld


一、SpringMVC简介

1、什么是MVC

MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分

M:Model,模型层,指工程中的JavaBean,作用是处理数据

JavaBean分为两类:

  • 一类称为实体类Bean:专门存储业务数据的,如 Student、User 等

  • 一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理业务逻辑和数据访问。

V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据

C:Controller,控制层,指工程中的servlet,作用是接收请求和响应浏览器

MVC的工作流程: 用户通过视图层发送请求到服务器,在服务器中请求被Controller接收,Controller调用相应的Model层处理请求,处理完毕将结果返回到Controller,Controller再根据请求处理的结果找到相应的View视图,渲染数据后最终响应给浏览器

2、什么是SpringMVC

SpringMVC是Spring的一个后续产品,是Spring的一个子项目

SpringMVC 是 Spring 为表述层开发提供的一整套完备的解决方案。在表述层框架历经 Strust、WebWork、Strust2 等诸多产品的历代更迭之后,目前业界普遍选择了 SpringMVC 作为 Java EE 项目表述层开发的首选方案

注:三层架构分为表述层(或表示层)、业务逻辑层、数据访问层,表述层表示前台页面和后台servlet

3、SpringMVC的特点

  • Spring 家族原生产品,与 IOC 容器等基础设施无缝对接

  • 基于原生的Servlet,通过了功能强大的前端控制器DispatcherServlet,对请求和响应进行统一处理

  • 表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案

  • 代码清新简洁,大幅度提升开发效率

  • 内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可

  • 性能卓著,尤其适合现代大型、超大型互联网项目要求

二、HelloWorld

1、开发环境

IDE:idea 2022.3.2

JDK:jdk1.8

构建工具:maven3.8.1

服务器:tomcat9.0.75(下图中tomcat的名字虽然为10.0.27但是实际使用的是9.0.75,注意分辨)

Spring版本:5.3.1

2、创建maven工程

创建新的项目,选择maven项目

1)创建成功后pom.xml文件为下图的样子(打包方式为war包,因为在tomcat下运行的),不过还需要添加其他的依赖

2)左边的目录栏会出现webapp的文件夹,以及WEB-INF文件夹、子级web.xml、index.jsp

 

 添加其他的一些依赖

<!-- SpringMVC -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.1</version>
    </dependency>

    <!-- 日志 -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>

    <!-- ServletAPI -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>

小插曲

springmvc pom.xml文件中 <scope>provided</scope>有什么含义?

在SpringMVC的pom.xml文件中,<scope>provided</scope>是用来指定依赖的作用范围,其含义如下:

1)当一个依赖声明为<scope>provided</scope>时,表示这个依赖在编译和测试阶段需要使用,但是在打包成war包或者jar包时不需要打包进去,因为这个依赖在应用程序的服务器容器中已经存在。
2)在开发Web应用程序时,常见的可提供范围依赖包括Java Servlet API、Java Server Pages(JSP)API、JavaServer Faces(JSF)API等。这些API是Web容器提供的,因此编写Web应用程序时需要使用这些API,但是在部署Web应用程序时无需将这些API打包进入war包中。

需要注意的是,虽然<scope>provided</scope>指定的依赖不会打包进入war包或者jar包中,但是在开发和测试阶段需要将这些依赖添加到类路径中,否则会出现编译错误或运行时错误。

使用不同的工具类打war包,war包路径不同

在使用IntelliJ IDEA中通过Tomcat打成war包时,默认情况下war包会生成在工程的/target目录下。

具体来说,使用IntelliJ IDEA打成war包的步骤为:

1. 点击菜单栏中的“Build” -> “Build Artifacts...”打开“Build Artifacts”窗口。
2. 在“Build Artifacts”窗口中,选择需要打包的Web工程,然后点击底部的“Build”按钮。
3. 在弹出的“Build Artifacts”对话框中,选择“Build”或“Rebuild”操作,并勾选“Build 'artifact-name.war'”选项,最后点击“OK”按钮。
4. 打包完成后,war包会生成在工程的/target目录下,其中artifact-name为你在“Build Artifacts”窗口中设置的artifact名称。

需要注意的是,如果你使用的是Tomcat插件来启动Tomcat服务器,那么war包也会自动发布到Tomcat服务器目录中,例如在启动Tomcat时,会发现在Tomcat安装目录下的webapps目录中会出现一个对应Web工程的war包。

3、配置web.xml

注册SpringMVC的前端控制器DispatcherServlet

有两种方式可以去配置

1)默认配置方式

此配置作用下,SpringMVC的配置文件默认位于WEB-INF下,默认名称为springMVC-servlet.xml,一般配置文件都在resources下,所以小编不使用此方式

<!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <!--
        设置springMVC的核心控制器所能处理的请求的请求路径
        /所匹配的请求可以是/login或.html或.js或.css方式的请求路径
        但是/不能匹配.jsp请求路径的请求
    -->
    <url-pattern>/</url-pattern>
  </servlet-mapping>

2)扩展配置方式

可通过init-param标签设置SpringMVC配置文件的位置和名称,通过load-on-startup标签设置SpringMVC前端控制器DispatcherServlet的初始化时间

<!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 -->
    <init-param>
      <!-- contextConfigLocation为固定值 -->
      <param-name>contextConfigLocation</param-name>
      <!-- 使用classpath:表示从类路径查找配置文件,例如maven工程中的src/main/resources -->
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--
         配置加载顺序 正数 按顺序执行
 		(作为框架的核心组件,在启动过程中有大量的初始化操作要做
		而这些操作放在第一次请求时才执行会严重影响访问速度
		因此需要通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时)
	-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <!--
        设置springMVC的核心控制器所能处理的请求的请求路径
        /所匹配的请求可以是/login或.html或.js或.css方式的请求路径
        但是/不能匹配.jsp请求路径的请求
    -->
    <url-pattern>/</url-pattern>
  </servlet-mapping>

注:

<url-pattern>标签中使用/和/*的区别:

/所匹配的请求可以是/login或.html或.js或.css方式的请求路径,但是/不能匹配.jsp请求路径的请求

因此就可以避免在访问jsp页面时,该请求被DispatcherServlet处理,从而找不到相应的页面

/*则能够匹配所有请求,例如在使用过滤器时,若需要对所有请求进行过滤,就需要使用/*的写法

 web.xml的全部配置

<!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>
  <!--字符编码过滤器-->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <!--指定字符集-->
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 -->
    <init-param>
      <!-- contextConfigLocation为固定值 -->
      <param-name>contextConfigLocation</param-name>
      <!-- 使用classpath:表示从类路径查找配置文件,例如maven工程中的src/main/resources -->
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--
         配置加载顺序 正数 按顺序执行
 		(作为框架的核心组件,在启动过程中有大量的初始化操作要做
		而这些操作放在第一次请求时才执行会严重影响访问速度
		因此需要通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时)
	-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <!--
        设置springMVC的核心控制器所能处理的请求的请求路径
        /所匹配的请求可以是/login或.html或.js或.css方式的请求路径
        但是/不能匹配.jsp请求路径的请求
    -->
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

4、创建请求控制器

由于前端控制器对浏览器发送的请求进行了统一的处理,但是具体的请求有不同的处理过程,因此需要创建处理具体请求的类,即请求控制器

请求控制器中每一个处理请求的方法成为控制器方法

因为SpringMVC的控制器由一个POJO(普通的Java类)担任,因此需要通过@Controller注解将其标识为一个控制层组件,交给Spring的IoC容器管理,此时SpringMVC才能够识别控制器的存在

注意:如果在创建maven项目的时候,不出现java文件夹的话,需要创建一个普通的文件夹,并将它标记为sources root

 变为下图的颜色,即为java类

 HelloController

package com.springmvc.controller;

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

/**
 * @author:Lyn.R
 * @date:2023-05-24 23:12:09
 * @Description:
 * @note:
 **/
@Controller
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "success";
    }
}

5、创建springmvc的配置文件

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

    <!--扫描组件-->
    <context:component-scan base-package="com.springmcv"/>
    <!--视图解析器-->
    <bean id="internalResourceView" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--告诉前端控制器,所有的静态资源都不要拦截-->
    <mvc:default-servlet-handler/>
    <!--    <mvc:resources mapping="/js/**/" location="/js/"/>-->
    <!--开启SpringMVC 框架注释支持  默认加载 映射器和适配器-->
    <!--    <mvc:annotation-driven conversion-service="conversionServiceFactoryBean"/>-->
    <mvc:annotation-driven/>
</beans>

6、测试HelloWorld

index.jsp

 WEB-INF/pages/success.jsp(这个地方对应你的controller层return返回的地方,因为之前配置了视图解析器)

 最后的详细目录

运行成功,在浏览器的下面的地址localhost:8080/SpringMVC_helloworld_war_exploded/

可以看到index.jsp成功的目录 ,点击图中的hello

 

注意:可能运行成功时,控制台出现中文乱码(虽然现在没什么影响,但是当出现一些错误时,没有日志的提醒还是很难受的,所以建议将它解决)

更改tomcat的conf/logging.properties

控制台不出现乱码

注意:更改之后可能需要重启才能成功

 以上就是小编所实践的内容,希望能够帮助到大家,感谢各位大佬的观看!!!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐