写点什么

SpringMVC 框架基础知识(01)

  • 2021 年 12 月 31 日
  • 本文字数:3449 字

    阅读完需:约 11 分钟

1. SpringMVC 框架的作用

MVC = Model(数据模型) + View(视图) + Controller(控制器),MVC 思想是建议每个项目中至少有这 3 种核心的角色,用于处理不同的问题,其中,Model 表示的数据处理,例如数据的增删改查等,View 表示软件的界面,Controller 表示控制器,用于接收客户端提交到服务器端的请求,并在处理完请求后给予客户端响应结果。


在不同的技术领域,这种思想可能也不同,例如在一些客户端软件的开发中,会使用 MVP、MVVP 等思想。


SpringMVC 框架是基于 Spring 框架的,所以,在 SpringMVC 中,会使用到 Spring 框架的作用,例如通过 Spring 框架来创建对象、管理对象,也会使用到 Spring 框架中的一些注解。


SpringMVC 框架主要解决了 V-C 交互的问题,即:客户端将请求提交到服务器后,肯定是由服务器端的控制器接收请求,SpringMVC 就解决了如何接收请求(包含请求中的参数等)的问题,当服务器端处理完请求之后,应该给予客户端响应结果,SpringMVC 也解决了如何响应的问题!事实上,SpringMVC 框架与“M”完全没有任何关系,所以,在 SpringMVC 的学习过程中,完全不考虑数据的增删改查相关数据库技术。

2. 为什么要使用 SpringMVC 框架

……

3. SpringMVC HelloWorld

【案例目标】

写完项目后,运行项目,打开浏览器,输入http://localhost:8080/项目名称/hello.do即可看到预期显示的内容。

【准备工作】

在 Eclipse 中找到 Servers 面板,如果当前没有配置 Tomcat,则点击该面板中的链接即可开始添加 Tomcat!


如果 Eclipse 中没有显示 Servers 面板,则点击 Window 菜单的 ShowView 的 Other 选项,并在弹出的对话框输入Servers进行筛选,即可打开该面板!


在添加 Tomcat 的对话框中,结合本机中已有的 Tomcat 版本进行选择,然后,在对话框的第 2 个界面中浏览到本机的 Tomcat 文件夹,即可完全配置。


配置完成后,在 Servers 面板中就会出现刚才配置的 Tomcat,同时,在项目列表中还会出现名为 Servers 的项目,该项目表示 Tomcat 的配置,在使用 Tomcat 的过程中,该项目必须是打开的,如果关闭了,Tomcat 将无法启动!

【创建项目】

创建新的 Maven Project,在创建过程中勾选 Create a simple projectGroup Id 填为cn.haiyongArtifact Id 填为springmvc01Packaging 必须选择war


如果创建的项目是客户端项目,是通过某个类的main()方法启动的项目,应该选择jar;如果创建的项目是服务器端项目,是需要运行在 Tomcat 上的,就要选择war


在 Eclipse 中,创建的war项目默认会报错,因为在项目中缺少 web.xml 文件,但是,war项目并不一定需要该文件!可以在 pom.xml 中添加以下配置:


<properties>    <failOnMissingWebXml>false</failOnMissingWebXml></properties>
复制代码


当然,以上配置也可以结合关于开发、编译版本的配置为:


<properties>    <failOnMissingWebXml>false</failOnMissingWebXml>    <maven.compiler.source>1.8</maven.compiler.source>    <maven.compiler.target>1.8</maven.compiler.target></properties>
复制代码


并且,继续在 pom.xml 中添加spring-webmvc的依赖:


<dependencies>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-webmvc</artifactId>        <version>5.2.5.RELEASE</version>    </dependency></dependencies>
复制代码


最后,对项目点右键,选择 Properties,并在弹出的项目属性对话框中,左侧选择 Targeted Runtimes,在右侧勾选 Tomcat。

【使用 SpringMVC 框架处理请求】

首先,在项目中创建cn.haiyong.spring包,用于存放相关文件;


然后,自定义某个类(类名可以自定义),继承自AbstractAnnotationConfigDispatcherServletInitializer类:


package cn.haiyong.spring;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override protected Class<?>[] getRootConfigClasses() { // TODO Auto-generated method stub return null; }
@Override protected Class<?>[] getServletConfigClasses() { // TODO Auto-generated method stub return null; }
@Override protected String[] getServletMappings() { // TODO Auto-generated method stub return null; }
}
复制代码


由于AbstractAnnotationConfigDispatcherServletInitializer是抽象类,所以,继承之后,需要重写其中的 3 个抽象方法:


  • getRootConfigClasses():获取 Spring 的配置类,在简单的 SpringMVC 项目中,也许并不需要编写任何 Spring 环境的配置,则该方法返回null即可,后续,如果整合 MyBatis 框架或其它框架时,可能需要编写相关配置;

  • getServletConfigClasses():获取 SpringMVC 的配置类,SpringMVC 的配置类可以自定义,且必须实现WebMvcConfigurer接口;

  • getServletMappings():获取框架所处理的请求的路径,假设所有以.do为后缀的请求都需要被 SpringMVC 框架处理,则可以配置为*.do


例如,可以将以上方法重写为:


package cn.haiyong.spring;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override protected Class<?>[] getRootConfigClasses() { return null; }
@Override protected Class<?>[] getServletConfigClasses() { return new Class[] { SpringMvcConfigurer.class }; }
@Override protected String[] getServletMappings() { return new String[] { "*.do" }; }
}
复制代码


以上SpringMvcInitializer类的作用就类似于 web.xml 的作用!例如,后续,当项目中需要使用到Filter组件时,也可以在这个类中添加配置!


接下来,在 SpringMVC 的配置类SpringMvcConfigurer的声明之前配置组件扫描:


package cn.haiyong.spring;
import org.springframework.context.annotation.ComponentScan;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@ComponentScan("cn.haiyong.spring")public class SpringMvcConfigurer implements WebMvcConfigurer {
}
复制代码


注意:在 SpringMVC 项目中,组件扫描必须配置在 SpringMVC 的配置类之前,不可以只配置在 Spring 的配置类之前!


在原生的 Java EE 技术中,控制器类就是一个个自定义的Servlet类,需要继承自HttpServlet的!而在 SpringMVC 项目中,控制器类不需要继承自某个特定的类,也不需要实现任何接口,仅有的要求是:


  • 必须放在组件扫描的包中;

  • 必须添加@Controller注解。


如果需要 SpringMVC 框架处理某个路径的请求,需要在控制器类中自定义方法,然后在方法内部编写代码进行处理,关于方法的声明:


  • 在方法的声明之前添加@RequestMapping注解,用于配置处理哪个路径的请求;

  • 应该使用public权限;

  • 返回值类型暂时使用String类型;

  • 方法的名称可以自定义;

  • 方法的参数列表暂时为空。


例如,可以设计为:


package cn.haiyong.spring;
import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;
@Controllerpublic class HelloController { // http://localhost:8080/springmvc01/hello.do @RequestMapping("hello.do") public String hello() { System.out.println("HelloController.hello()"); return ""; }
}
复制代码


完成到以上步骤时,就可以将项目部署到 Tomcat 中,启动 Tomcat,在浏览器中输入测试网址http://localhost:8080/springmvc01/hello.do后,在浏览器应该会提示 404 错误,但是,在 Eclipse 的控制台中,应该可以看到以上hello()方法中的输出语句!


最后,如果希望访问后,能够在浏览器输出自定义的内容,可以在方法的声明之前添加@ResponseBody注解,并将期望返回的内容写在hello()方法返回的字符串中即可!例如:


package cn.haiyong.spring;
import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;
@Controllerpublic class HelloController { @RequestMapping("hello.do") @ResponseBody public String hello() { System.out.println("HelloController.hello()"); return "<font color=red>Hello</font>, <font color=blue>SpringMVC</font>!!!"; }
}
复制代码


发布于: 41 分钟前
用户头像

公众号:海拥 2021.11.29 加入

【个人网站】haiyong.site 【软件技能】Java,Python,JS 【兴趣爱好】学习使我快乐,编程令我永生 【个人称号】HDZ核心组成员,CSDN原力作者

评论

发布
暂无评论
SpringMVC框架基础知识(01)