SpringMVC框架的作用&我的第一个SpringMVC例子,Hello SpringMVC!!!

    技术2025-02-12  16

    1.SpringMVC框架作用:

    MVC=Model(数据类型)+View(视图)+Controller(控制器) Spring框架主要解决了接收请求与处理响应的问题,也解决了V-C的交互问题。 传统的JavaEE开发由于Servlet组件的数量太大、代码量多,在管理项目上存在难度,并且会有大量的Servlet对象占用内存!而SpringMVC非常大的程度上简化了开发量。

    2.SpringMVC Hello SpringMVC:

    2.1案例目标:

    程序运行起来以后,在浏览器输入http://localhost:8080/项目名/hello.do就可以看到自定义输出的内容!

    2.2Eclipse添加Server

    打开Eclipse的Service面板,添加Tomcat,当添加成功以后,在Eclipse的项目的列表中, 就会有Servers项目,在使用Tomcat的时候要保证项目是存在打开的!

    2.3创建项目

    创建Maven Project,Group Id为cn.tedu,Artifact Id为springmvc01,Packaing必须选择war。

    当项目创建出来后,对项目名称点右键,在项目属性的Targeted Runtimes中勾选Tomcat。

    刚刚创建好的项目的pom.xml会报错,因为缺少web.xml文件,并且<failOnMissingWebXml>节点默认为true,结合指定Java版本的代码,在pom.xml中添加:

    <properties> <failOnMissingWebXml>false</failOnMissingWebXml> <java.version>1.8</java.version> <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.1.5.RELEASE</version> </dependency> </dependencies>

    2.4. 创建初始化类

    创建cn.tedu.spring包,在这个包中创建SpringMvcConfig配置类,并在这个类上配置组件扫描:

    package cn.tedu.spring; import org.springframework.context.annotation.ComponentScan; /** * SpringMvc的配置类 */ @ComponentScan("cn.tedu.spring") public class SpringMvcConfig { }

    在这个包中创建SpringMvcInitializer类,作为整个项目的初始化类,该类需要继承自AbstractAnnotationConfigDispatcherServletInitializer类,并重写该类中的抽象方法,在重写的getServletConfigClasses()方法中,返回以上SpringMvcConfig类,在重写的getServletMappings()方法中,返回的字符串数组中配置"*.do"即可:

    package cn.tedu.spring; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; /** * 项目的初始化类 */ public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return null; } @Override protected Class<?>[] getServletConfigClasses() { // 当项目初始化时,会加载当前方法的返回值 // 类似于创建了AnnotationConfigApplicationContext的对象,并且把当前方法的返回值作为构造方法参数 return new Class[] { SpringMvcConfig.class }; } @Override protected String[] getServletMappings() { // 所有以 .do 为后缀的请求都由SpringMVC框架处理 // 之所以使用 .do 是因为它不是一个正常的扩展名 // 可以与访问普通的文件区分开来 // 也可以换成其它后缀,例如 .action return new String[] { "*.do" }; } }

    以上2个类都可以不必放在cn.tedu.spring包中,但是,应该为这2个类确定一个合理的包名。

    2.5. 使用控制器接收并处理请求

    在组件扫描的cn.tedu.spring包中创建HelloController类,并在类的声明之前添加@Controller注解:

    package cn.tedu.spring; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; /** * 控制器类,SpringMVC框架中的控制器的名称是自定义的,并且,不需要继承自某个类,也不需要实现某个接口 */ @Controller public class HelloController { }

    然后,在这个中添加以下代码:

    // @RequestMapping用于配置请求路径 // 后续,当项目运行时,按照这个路径来访问 // 就会导致接下来的方法被执行 // 接下来的方法就相当于Servlet中的service()方法 @RequestMapping("hello.do") // @ResponseBody表示响应正文 // 会导致接下来的方法的返回值会直接响应到客户端去 @ResponseBody public String hello() { // 注意:不要返回中文或中文的标点符号,默认不支持 return "Hello, SpringMVC!!!"; }

    测试结果:

    Processed: 0.009, SQL: 9