【SpringMVC】十分钟跑起来一个SpringMVC项目

打印 上一主题 下一主题

主题 871|帖子 871|积分 2613

1 项目概述

1.项目结构剖析


项目在运行的时间 会自动生成 target文件夹

2. MVC项目标结构和每个组件的作用:


  • 项目根目录:springmvc-03-annotation

    • 名称表明这是一个利用注解方式设置的Spring MVC项目

  • 源代码目录:src/main/java

    • nuc.ss.controller 包:

      • HelloController 类:利用注解设置的控制器类
      • 控制器负责处置处罚用户哀求,进行业务逻辑处置处罚,并返回视图
      • 标注显示"100% methods"阐明所有方法都已实现


  • 资源设置目录:src/main/resources

    • springmvc-servlet.xml:Spring MVC的核心设置文件

      • 定义组件扫描
      • 设置视图剖析器
      • 设置静态资源处置处罚
      • 设置注解驱动等


  • Web应用目录:web

    • WEB-INF/ - 安全目录,外部无法直接访问

      • jsp/ 目录:存放JSP视图文件

        • hello.jsp - 展示"Hello World"的视图
        • index.jsp - 应用的首页

      • web.xml - Web应用的摆设描述文件

        • 设置DispatcherServlet
        • 设置URL映射
        • 设置字符编码过滤器等



  • 项目构建文件:

    • pom.xml:Maven项目设置文件

      • 定义项目坐标(groupId, artifactId, version)
      • 管理项目依靠(Spring MVC, Servlet, JSP等)
      • 设置构建插件
      • 管理项目生命周期


  • target/ 目录:

    • 存放编译后的类文件和资源
    • 包罗终极的WAR包

  • IDE相关文件:

    • springmvc-03-annotation.iml:IntelliJ IDEA的项目模块文件
    • 包罗项目设置信息和依靠关系

3. 项目标工作流程:


  • 用户发送哀求到服务器
  • 哀求被DispatcherServlet接收
  • 根据URL映射到对应的Controller方法
  • Controller处置处罚哀求并返回视图名称
  • 视图剖析器找到对应的JSP文件
  • 渲染视图并返回给用户

4 后期可以扩展的点:


  • 可以添加Service层处置处罚业务逻辑
  • 可以添加DAO层处置处罚数据访问
  • 考虑添加日志设置文件
  • 可以添加测试目录进行单元测试
  • 可以考虑利用更现代的视图技能(如Thymeleaf)更换JSP
这个项目结构是典范的Spring MVC应用,得当学习Spring MVC的根本知识和注解设置方式。
2.源码学习

src/main/java - 存放Java源代码
1. HelloController 类,Spring MVC控制器

  1. package nuc.ss.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.ui.Model;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. @Controller
  6. @RequestMapping("/hello")
  7. public class HelloController {
  8.     @RequestMapping("/h1")
  9.     public String hello(Model model) {
  10.         //封装数据
  11.         model.addAttribute("msg","Hello,这是最简单的SpringMVC!!!");
  12.         return "hello";//会被视图解析器处理
  13.     }
  14. }
复制代码
src/main/resources - 存放设置文件
2 springmvc-servlet.xml - Spring MVC的紧张设置文件

springmvc-servlet.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xmlns:mvc="http://www.springframework.org/schema/mvc"
  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  7.        http://www.springframework.org/schema/beans/spring-beans.xsd
  8.        http://www.springframework.org/schema/context
  9.        https://www.springframework.org/schema/context/spring-context.xsd
  10.        http://www.springframework.org/schema/mvc
  11.        https://www.springframework.org/schema/mvc/spring-mvc.xsd">
  12.     <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
  13.     <context:component-scan base-package="nuc.ss.controller"/>
  14.     <!-- 让Spring MVC不处理静态资源(css,js) -->
  15.     <mvc:default-servlet-handler />
  16.     <!--
  17.     支持mvc注解驱动
  18.         在spring中一般采用@RequestMapping注解来完成映射关系
  19.         要想使@RequestMapping注解生效
  20.         必须向上下文中注册DefaultAnnotationHandlerMapping
  21.         和一个AnnotationMethodHandlerAdapter实例
  22.         这两个实例分别在类级别和方法级别处理。
  23.         而annotation-driven配置帮助我们自动完成上述两个实例的注入。
  24.      -->
  25.     <mvc:annotation-driven />
  26.     <!-- 视图解析器 -->
  27.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  28.           id="internalResourceViewResolver">
  29.         <!-- 前缀 -->
  30.         <property name="prefix" value="/WEB-INF/jsp/" />
  31.         <!-- 后缀 -->
  32.         <property name="suffix" value=".jsp" />
  33.     </bean>
  34. </beans>
复制代码
3.web 目录 - Web应用步伐资源 WEB-INF/jsp - 存放JSP视图文件

3.1 hello.jsp

  1. <%--&lt;%&ndash;--%>
  2. <%--  Created by IntelliJ IDEA.--%>
  3. <%--  User: Administrator--%>
  4. <%--  Date: 2020/7/13 0013--%>
  5. <%--  Time: 14:26--%>
  6. <%--  To change this template use File | Settings | File Templates.--%>
  7. <%--&ndash;%&gt;--%>
  8. <%--<%@ page contentType="text/html;charset=UTF-8" language="java" %>--%>
  9. <%--<html>--%>
  10. <%--<head>--%>
  11. <%--    <title>Title</title>--%>
  12. <%--</head>--%>
  13. <%--<body>--%>
  14. <%--${msg}--%>
  15. <%--</body>--%>
  16. <%--</html>--%>
  17. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  18. <html>
  19. <head>
  20.     <title>Spring MVC Demo</title>
  21.     <style>
  22.         body {
  23.             font-family: Arial, sans-serif;
  24.             margin: 0;
  25.             padding: 20px;
  26.             background-color: #f0f2f5;
  27.             display: flex;
  28.             justify-content: center;
  29.             align-items: center;
  30.             min-height: 100vh;
  31.         }
  32.         .card {
  33.             background: yellowgreen;
  34.             padding: 30px;
  35.             border-radius: 8px;
  36.             box-shadow: 0 2px 4px rgba(0,0,0,0.1);
  37.             text-align: center;
  38.         }
  39.         .message {
  40.             color: #cb2525;
  41.             font-size: 24px;
  42.         }
  43.     </style>
  44. </head>
  45. <body>
  46. <div class="card">
  47.     <div class="message">
  48.         ${msg}
  49.     </div>
  50. </div>
  51. </body>
  52. </html>
复制代码
3.2 index.jsp

  1. <%--
  2.   Created by IntelliJ IDEA.
  3.   User: Administrator
  4.   Date: 2020/7/13 0013
  5.   Time: 14:21
  6.   To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10.   <head>
  11.     <title>$Title$</title>
  12.   </head>
  13.   <body>
  14.   $END$
  15.   </body>
  16. </html>
复制代码
4,WEB-INF/web.xml - Web应用步伐的摆设描述文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5.          version="4.0">
  6.     <!--1.注册servlet-->
  7.     <servlet>
  8.         <servlet-name>SpringMVC</servlet-name>
  9.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  10.         <!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->
  11.         <init-param>
  12.             <param-name>contextConfigLocation</param-name>
  13.             <param-value>classpath:springmvc-servlet.xml</param-value>
  14.         </init-param>
  15.         <!-- 启动顺序,数字越小,启动越早 -->
  16.         <load-on-startup>1</load-on-startup>
  17.     </servlet>
  18.     <!--所有请求都会被springmvc拦截 -->
  19.     <servlet-mapping>
  20.         <servlet-name>SpringMVC</servlet-name>
  21.         <url-pattern>/</url-pattern>
  22.     </servlet-mapping>
  23. </web-app>
复制代码
5. pom.xml - Maven项目标设置文件,用于管理项目依靠和构建过程

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <parent>
  6.         <artifactId>SpringMVC</artifactId>
  7.         <groupId>nuc.ss</groupId>
  8.         <version>1.0-SNAPSHOT</version>
  9.     </parent>
  10.     <modelVersion>4.0.0</modelVersion>
  11.     <artifactId>springmvc-03-annotation</artifactId>
  12.     <build>
  13.         <resources>
  14.             <resource>
  15.                 <directory>src/main/java</directory>
  16.                 <includes>
  17.                     <include>**/*.properties</include>
  18.                     <include>**/*.xml</include>
  19.                 </includes>
  20.                 <filtering>false</filtering>
  21.             </resource>
  22.             <resource>
  23.                 <directory>src/main/resources</directory>
  24.                 <includes>
  25.                     <include>**/*.properties</include>
  26.                     <include>**/*.xml</include>
  27.                 </includes>
  28.                 <filtering>false</filtering>
  29.             </resource>
  30.         </resources>
  31.     </build>
  32. </project>
复制代码
6. springmvc-03-annotation.iml - IntelliJ IDEA的项目模块文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <module version="4">
  3.   <component name="FacetManager">
  4.     <facet type="web" name="Web">
  5.       <configuration>
  6.         <descriptors>
  7.           <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/web/WEB-INF/web.xml" />
  8.         </descriptors>
  9.         <webroots>
  10.           <root url="file://$MODULE_DIR$/web" relative="/" />
  11.         </webroots>
  12.         <sourceRoots>
  13.           <root url="file://$MODULE_DIR$/src/main/java" />
  14.           <root url="file://$MODULE_DIR$/src/main/resources" />
  15.         </sourceRoots>
  16.       </configuration>
  17.     </facet>
  18.   </component>
  19. </module>
复制代码
这是一个利用注解设置方式的Spring MVC示例项目,从项目名称 springmvc-03-annotation 可以看出这可能是一个学习或练习项目。项目利用Maven进行依靠管理,并采用了JSP作为视图技能。
3 逐行学习代码

我来帮您详细注释每个关键代码文件:

  • HelloController.java:控制器类
  1. package nuc.ss.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.ui.Model;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. @Controller  // 标识这是一个Spring MVC控制器
  6. @RequestMapping("/hello")  // 类级别的请求映射,指定这个控制器的基础URL路径
  7. public class HelloController {
  8.    
  9.     @RequestMapping("/h1")  // 方法级别的请求映射,完整访问路径为/hello/h1
  10.     public String hello(Model model) {  // Model用于向视图传递数据
  11.         
  12.         // 向模型中添加属性,key为"msg",value为显示的消息
  13.         // 这个数据可以在视图(JSP)中通过${msg}获取
  14.         model.addAttribute("msg", "Hello,这是最简单的SpringMVC!!!");
  15.         
  16.         // 返回视图名称,会被视图解析器处理
  17.         // 根据配置会在返回的字符串前加上前缀/WEB-INF/jsp/,后加上后缀.jsp
  18.         return "hello";
  19.     }
  20. }
复制代码

  • springmvc-servlet.xml:Spring MVC设置文件
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xmlns:mvc="http://www.springframework.org/schema/mvc"
  6.        xsi:schemaLocation="..."> <!-- 这里是XML Schema位置定义 -->
  7.     <!-- 启用注解扫描,自动扫描包下的所有注解 -->
  8.     <!-- 会扫描指定包下的@Controller, @Service, @Repository, @Component等注解 -->
  9.     <context:component-scan base-package="nuc.ss.controller"/>
  10.     <!-- 配置静态资源处理,使Spring MVC不处理静态资源 -->
  11.     <!-- 例如.js,.css等文件会交由默认的servlet处理 -->
  12.     <mvc:default-servlet-handler />
  13.     <!-- 启用Spring MVC注解驱动 -->
  14.     <!-- 自动注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
  15.     <!-- 支持@Controller、@RequestMapping等注解 -->
  16.     <mvc:annotation-driven />
  17.     <!-- 配置视图解析器 -->
  18.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  19.           id="internalResourceViewResolver">
  20.         <!-- 配置视图路径前缀 -->
  21.         <property name="prefix" value="/WEB-INF/jsp/" />
  22.         <!-- 配置视图路径后缀 -->
  23.         <property name="suffix" value=".jsp" />
  24.     </bean>
  25. </beans>
复制代码

  • web.xml:Web应用设置文件
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="4.0">
  3.     <!-- 配置Spring MVC的前端控制器 -->
  4.     <servlet>
  5.         <!-- servlet的名称 -->
  6.         <servlet-name>SpringMVC</servlet-name>
  7.         <!-- DispatcherServlet是Spring MVC的核心,负责接收请求并分发 -->
  8.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  9.         
  10.         <!-- 配置Spring MVC配置文件的位置 -->
  11.         <init-param>
  12.             <param-name>contextConfigLocation</param-name>
  13.             <!-- 指定配置文件位置 -->
  14.             <param-value>classpath:springmvc-servlet.xml</param-value>
  15.         </init-param>
  16.         
  17.         <!-- 配置servlet启动顺序,数字越小优先级越高 -->
  18.         <load-on-startup>1</load-on-startup>
  19.     </servlet>
  20.     <!-- 配置servlet映射 -->
  21.     <servlet-mapping>
  22.         <servlet-name>SpringMVC</servlet-name>
  23.         <!-- /表示拦截所有请求,不包括.jsp -->
  24.         <!-- /*表示拦截所有请求,包括.jsp -->
  25.         <url-pattern>/</url-pattern>
  26.     </servlet-mapping>
  27. </web-app>
复制代码

  • hello.jsp:视图文件
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4.     <title>Spring MVC Demo</title>
  5.     <style>
  6.         /* 页面样式设置 */
  7.         body {
  8.             font-family: Arial, sans-serif;
  9.             margin: 0;
  10.             padding: 20px;
  11.             background-color: #f0f2f5;
  12.             display: flex;
  13.             justify-content: center;  /* 水平居中 */
  14.             align-items: center;      /* 垂直居中 */
  15.             min-height: 100vh;
  16.         }
  17.         .card {
  18.             background: yellowgreen;  /* 卡片背景色 */
  19.             padding: 30px;
  20.             border-radius: 8px;      /* 圆角边框 */
  21.             box-shadow: 0 2px 4px rgba(0,0,0,0.1);  /* 阴影效果 */
  22.             text-align: center;
  23.         }
  24.         .message {
  25.             color: #cb2525;          /* 文字颜色 */
  26.             font-size: 24px;
  27.         }
  28.     </style>
  29. </head>
  30. <body>
  31. <div class="card">
  32.     <div class="message">
  33.         ${msg}  <!-- 显示从控制器传来的消息 -->
  34.     </div>
  35. </div>
  36. </body>
  37. </html>
复制代码

  • index.jsp 的详细注释
  1. jspCopy<%--
  2.   Created by IntelliJ IDEA.  // IDE创建信息
  3.   User: Administrator        // 创建用户
  4.   Date: 2020/7/13 0013      // 创建日期
  5.   Time: 14:21               // 创建时间
  6.   To change this template use File | Settings | File Templates.  // 模板修改提示
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>  <%-- 页面指令:设置内容类型和编码 --%>
  9. <html>
  10.   <head>
  11.     <title>$Title$</title>  <%-- 页面标题占位符 --%>
  12.   </head>
  13.   <body>
  14.     $END$  <%-- 内容占位符,表示编辑器光标默认位置 --%>
  15.   </body>
  16. </html>
复制代码
这是一个根本的 JSP 模板文件,紧张包罗:
文件信息注释
IDE 创建信息
创建者信息
创建时间
模板修改提示
页面指令
<%@ page … %> - JSP页面指令
contentType=“text/html” - 指定内容类型为HTML
charset=UTF-8 - 利用UTF-8字符编码
language=“java” - 利用Java作为脚本语言
占位符
                                    T                         i                         t                         l                         e                              Title                  Title - 标题占位符
                                    E                         N                         D                              END                  END - 内容占位符
这是一个最根本的页面模板,通常用作:
新建JSP页面的出发点
快速创建页面的模板
同一项目中JSP页面的根本结构

  • pom.xml
:Maven设置文件
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="...">
  5.     <!-- 父项目配置 -->
  6.     <parent>
  7.         <artifactId>SpringMVC</artifactId>
  8.         <groupId>nuc.ss</groupId>
  9.         <version>1.0-SNAPSHOT</version>
  10.     </parent>
  11.    
  12.     <modelVersion>4.0.0</modelVersion>
  13.     <artifactId>springmvc-03-annotation</artifactId>
  14.     <!-- 构建配置 -->
  15.     <build>
  16.         <resources>
  17.             <!-- 配置Java源码目录下的资源文件处理 -->
  18.             <resource>
  19.                 <directory>src/main/java</directory>
  20.                 <includes>
  21.                     <include>**/*.properties</include>
  22.                     <include>**/*.xml</include>
  23.                 </includes>
  24.                 <filtering>false</filtering>
  25.             </resource>
  26.             <!-- 配置资源目录下的资源文件处理 -->
  27.             <resource>
  28.                 <directory>src/main/resources</directory>
  29.                 <includes>
  30.                     <include>**/*.properties</include>
  31.                     <include>**/*.xml</include>
  32.                 </includes>
  33.                 <filtering>false</filtering>
  34.             </resource>
  35.         </resources>
  36.     </build>
  37. </project>
复制代码
7 springmvc-03-annotation.iml 的注释阐明:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <module version="4">
  3.   <component name="FacetManager">
  4.     <!-- Web模块配置 -->
  5.     <facet type="web" name="Web">
  6.       <configuration>
  7.         <!-- Web应用描述符配置 -->
  8.         <descriptors>
  9.           <!-- web.xml的位置配置 -->
  10.           <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/web/WEB-INF/web.xml" />
  11.         </descriptors>
  12.         
  13.         <!-- Web资源根目录配置 -->
  14.         <webroots>
  15.           <!-- 指定web目录为Web应用的根目录 -->
  16.           <root url="file://$MODULE_DIR$/web" relative="/" />
  17.         </webroots>
  18.         
  19.         <!-- 源代码根目录配置 -->
  20.         <sourceRoots>
  21.           <!-- Java源代码目录 -->
  22.           <root url="file://$MODULE_DIR$/src/main/java" />
  23.           <!-- 资源文件目录 -->
  24.           <root url="file://$MODULE_DIR$/src/main/resources" />
  25.         </sourceRoots>
  26.       </configuration>
  27.     </facet>
  28.   </component>
  29. </module>
复制代码
这些设置文件共同构成了一个根本的Spring MVC项目结构。紧张的处置处罚流程是:

  • 用户哀求起首被web.xml
  • 中设置的DispatcherServlet接收
  • 根据springmvc-servlet.xml的设置,哀求被路由到对应的Controller
  • Controller处置处罚哀求并返回视图名称
  • 视图剖析器剖析视图名称,找到对应的JSP文件
  • JSP文件被渲染后返回给用户
如许的结构提供了一个清晰的MVC分层,便于后续维护和扩展。
4 服务器设置 tomcat



![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/18f6ec45b4f14210addd1b6a8df7cfed.png


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美丽的神话

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表