Spring之路(16)--完整实现一个SpringMVC实例(使用xml配置SpringMVC)

简介: 本文目录1. 背景2. 开发环境3. 创建web项目4. 项目结构5. 配置web.xml文件6. 配置springmvc-config.xml文件7. 编写具体控制器处理请求8. 编写视图页面9. 运行验证

1. 背景

之前所讲的程序,都是普通的Java Project,也就是说输出都是从控制台输出的,比较简单。


SpringMVC是web应用,所以需要部署到web服务器(本文采用Tomcat)上运行,项目结构与Java Project也不同。


所以本文会从头到尾详细的说明下使用SpringMVC开发web项目的过程。


注意本文依然使用导入jar包的形式进行操作,而不使用mavan,还是因为觉得会maven的应该都会导jar包,而会导jar包的不一定会maven,此处还是最大限度的照顾基础比较薄弱的小弟弟小妹妹们。


2. 开发环境

本系列文章已经讲过开发环境了,此处再次提示下:


安装JDK,并配置环境变量

下载解压eclipse

下载解压tomcat

将JDK和tomcat配置到eclipse中

下载spring相应的jar包准备使用

具体步骤详见下面链接,此处不再赘述

Spring之路(2)–绕不过去的开发环境配置


3. 创建web项目

打开Eclipse,然后点击菜单栏【File】-【New】-【Other】,选择Dynamic Web Project,即创建一个动态的web网站,如下图:

image.png

第二步直接默认,然后第三步按下图中操作:

image.png

点击Finish后已经为我们创建了一个web项目,项目名称为SpringMvcFirst


4. 项目结构

如下图,我们需要关注的目录如下:


src目录存放我们编写的java源代码

WebContent目录存放web网站内容

WEB-INF下的lib目录可以存放我们需要引用的jar包

WEB-INF下的web.xml是整个项目的配置文件

image.png

我们先在src下建立org.maoge.first包存放代码,然后将spring相关的jar包放入lib目录下,准备就绪开始开发。

5. 配置web.xml文件

作为一个web项目,它的配置是由web.xml定义的,所以我们先来配置下web.xml文件如下:

<?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">
  <display-name>SpringMvcFirst</display-name>
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/springmvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>

理解这个配置文件非常重要,所以我们逐一剖析里面的内容。


1、<?xml version="1.0" encoding="UTF-8"?>

这一行表示本文件是xml文件,没啥意思,xml配置文件都是这样开头的。


2、<web-app>

该标签表示这是一个web应用的配置文件,对web应用的配置都在这个标签内部。这个是自动生成的不用管。


3、<display-name>SpringMvcFirst</display-name>

此书是项目的显示名称,没啥大意思,可以删掉。


4、<servlet>与<servlet-mapping>

注意这两个标签是成对存在的,可以看到servlet-name都是springmvc,所以这两个标签是一对。<servlet>包含了对servlet的配置,而servlet-mapping说明了指定名称的servlet接受请求的url匹配。上面的配置说明以.do结尾的请求都交给名字是springmvc的servlet处理,注意*是通配符,表示所有。


5、<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

通过上面的配置,我们已经确定xxxxx.do这样的请求,都会交给名字为springmvc的servlet处理,然后该servlet具体的实现类是DispatcherServlet,也就是说从此处开始我们将传统的servlet替换为了SpringMVC封装的DispatcherServlet,所以相关请求会由DispatcherServlet处理。


6、<load-on-startup>1</load-on-startup>

该标签的意思是已启动容器就加载该servlet,这个不用说,应用启动了就该马上加载servlet,不然谁来处理请求?


7、<init-param>

这个表示初始化参数,此处是理解整个web项目的关键我们要好好琢磨琢磨。


    <init-param>

  <param-name>contextConfigLocation</param-name>

  <param-value>/WEB-INF/springmvc-config.xml</param-value>

 </init-param>


我们详细的看下这个配置,我们配置了一个名字叫contextConfigLocation的参数,它的值为/WEB-INF/springmvc-config.xml。


参数是啥意思呢,context之前我们多次遇到了,一般表示Spring容器,config表示配置,location表示位置,那么我们可以推测出该参数指定了spring容器所使用的配置文件的位置。


OK,从此处我们就可以知道了,web项目运行时首先会加载web.xml,根据web.xml对项目的配置启动整个web项目,然后发现了contextConfigLocation,根据/WEB-INF/springmvc-config.xml的配置对spring相关容器进行配置和加载。从而实现了web项目与spring的结合。


6. 配置springmvc-config.xml文件

然后我们看下springmvc-config.xml文件的配置内容,是不是非常简单,就是一个完全遵循Spring中xml配置规则普通配置文件啊。


稍微值得我们注意的是开启了对org.maoge.first包的扫描,如果该包下有相应的bean配置,会被Spring容器发现并纳入容器管理。


<?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-4.0.xsd">

<context:component-scan base-package="org.maoge.first" />

</beans>


7. 编写具体控制器处理请求

现在已经配置了DispatcherServlet接受用户请求,此时我们需要编写控制器具体处理用户的请求,代码如下:


package org.maoge.first;

import org.springframework.stereotype.Controller;

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

import org.springframework.web.servlet.ModelAndView;

@Controller

public class HelloController {

@RequestMapping("/hello")

public ModelAndView hello() {

 ModelAndView mv=new ModelAndView();

 mv.setViewName("hello.jsp");

 return mv;

}

}


如果曾经写过SSM或者SpringBoot相关的项目,看到这段代码应会倍感亲切。此处我还是要详细介绍下这段代码。


@Controller注解将HelloController类注册为容器管理的bean,不同于@Componet注册的普通bean,@Controller注册的bean具备处理器的功能,可以接受DispatcherServlet传递过来的请求并进行处理返回,所以叫控制器么。


@RequestMapping("/hello")表示该方法接受请求路径为/hello的请求,也就是说一个请求经过DispatcherServlet后,如果其请求url中匹配了/hello,则该请求由hello()方法处理。


ModelAndView是一个封装好的类,表示模型和视图,我们可以看到上述代码返回了一个含有视图名称为hello.jsp的mv对象,意思就是返回hello.jsp页面


8. 编写视图页面

最后简单的编写一个hello.jsp下,放入WebContent目录下,代码如下:


<%@ page language="java" contentType="text/html; charset=UTF8"

pageEncoding="UTF8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF8">

<title></title>

</head>

<body>

hello:springmvcfisrt

</body>

</html>


9. 运行验证

将项目部署到tomcat并运行,打开浏览器输入路径http://127.0.0.1:8080/SpringMvcFirst/hello.do,其中SpringMvcFirst是我们在新建项目时配置的项目context root,hello是控制器配置的访问路径,而.do是xml中配置的DispatcherServlet匹配的请求路径。


注意此时报错


More than one fragment with the name [spring_web] was found. This is not legal with relative ordering.

1

在web.xml的<display-name>后添加<absolute-ordering />接近该问题。


再次运行,浏览器访问成功!

相关文章
|
10月前
|
Java 关系型数据库 MySQL
Spring Boot自动配置:魔法背后的秘密
Spring Boot 自动配置揭秘:只需简单配置即可启动项目,背后依赖“约定大于配置”与条件化装配。核心在于 `@EnableAutoConfiguration` 注解与 `@Conditional` 系列条件判断,通过 `spring.factories` 或 `AutoConfiguration.imports` 加载配置类,实现按需自动装配 Bean。
|
10月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
2983 0
|
9月前
|
前端开发 Java 应用服务中间件
《深入理解Spring》 Spring Boot——约定优于配置的革命者
Spring Boot基于“约定优于配置”理念,通过自动配置、起步依赖、嵌入式容器和Actuator四大特性,简化Spring应用的开发与部署,提升效率,降低门槛,成为现代Java开发的事实标准。
|
10月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1795 5
|
10月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
558 0
探索Spring Boot的@Conditional注解的上下文配置
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
1439 0
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
1351 0
|
前端开发 Java 数据库
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
588 0
|
9月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
649 4
|
9月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
1178 3

热门文章

最新文章