Java Spring MVC框架 I

Java Spring MVC框架 I

1.关于Spring MVC框架

● Spring MVC是基于Spring框架基础之上的,主要解决了后端服务器接收
客户端提交的请求,并给予响应的相关问题
● MVC = Model + View + Controller,它们分别是:
– Model:数据模型,通常由业务逻辑层(Service Layer)和数据访问层(Data
Access Object Layer)共同构成
– View:视图
– Controller:控制器
– MVC为项目中代码的职责划分提供了参考
● 需要注意:Spring MVC框架只关心V - C之间的交互,与M其实没有任何
关系。

● Spring MVC的核心执行流程图如下所示:
在这里插入图片描述

2.接收客户端的请求

2.1创建Spring MVC工程

● 请参考 http://doc.canglaoshi.org/doc/idea_tomcat/index.html 创建
项目,首次练习的项目名称请使用springmvc01。

2.2接收客户端的请求

● 【案例目标】开发使用Spring MVC框架的项目,将其部署到Tomcat,最
终,部署此项目启动Tomcat,用户在浏览器中输入指定的URL提交请求
后,项目可以对此进行简单的响应

● 在pom.xml中添加spring-webmvc依赖项:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.14</version>
</dependency>

● 提示:如果后续运行时提示不可识别Servlet相关类,则补充添加以下依
赖项:

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

● 以上代码中的provided表示此依赖不会参与测试或部
署,因为当Web项目部署到Tomcat中后,Tomcat环境会包含此依赖项

● 准备2个配置类,一个是Spring框架的配置类:

package cn.tedu.springmvc.config;
import org.springframework.context.annotation.Configuration;
@Configuration // 此注解不是必须的
public class SpringConfig {
}

● 另一个是Spring框架的配置类:

package cn.tedu.springmvc.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration // 此注解不是必须的
@ComponentScan("cn.tedu.springmvc") // 必须配置在当前配置类,不可配置在Spring的配置类
public class SpringMvcConfig implements WebMvcConfigurer {
}

● 接下来,需要创建项目的初始化类,此类必须继承自
AbstractAnnotationConfigDispatcherServletInitializer,并在此类中
重写父类的3个抽象方法,返回正确的值(各方法的意义请参见以下代码
中的注释):

package cn.tedu.springmvc;
import cn.tedu.springmvc.config.SpringConfig;
import cn.tedu.springmvc.config.SpringMvcConfig;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
/**
* Spring MVC项目的初始化类
*/
public class SpringMvcInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
// 返回自行配置的Spring相关内容的类
return new Class[] { SpringConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
// 返回自行配置的Spring MVC相关内容的类
return new Class[] { SpringMvcConfig.class };
}
@Override
protected String[] getServletMappings() {
// 返回哪些路径是由Spring MVC框架处理的
return new String[] { "*.do" };
}
}

● 最后,创建控制器类,用于接收客户端的某个请求,并简单的响应结果:

package cn.tedu.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller // 必须是@Controller,不可以是此前在Spring框架中学习到的其它组件注解
public class UserController {
public UserController() {
System.out.println("UserController.UserController()");
}
// http://localhost:8080/springmvc01_war_exploded/login.do
@RequestMapping("/login.do")
@ResponseBody
public String login() {
return "UserController.login()";
}
}

● 全部完成后,启动项目,会自动打开浏览器并显示主页,在主页的地址栏
URL上补充/login.do即可实现访问,并看到结果
● 在启动过程中,你还可以在IntelliJ IDEA的控制台中看到控制器类的构造
方法中输出的内容

● 关于以上案例:
– 当启动Tomcat时,会自动将项目打包并部署到Tomcat,通过自动打开的浏览器中的URL即可访问主页,在URL中有很长一段是例如springmvc01_war_explored 这一段是不可以删除的,其它的各路径必须补充在其之后,例如 /login.do 就必须在此之后
– 当启动Tomcat时,项目一旦部署成功,就会自动创建并加载AbstractAnnotationConfigDispatcherServletInitializer的子类,即当前项目中自定义的SpringMvcInitialier,无论这个类放在哪个包中,都会自动创建并加载
– 由于会自动调用这个类中所有方法,所以会将Spring MVC框架处理的请求路径设置为 *.do,并执行对 cn.tedu.springmvc 的组件扫描,进而会创建 UserController 的对象
– 由于在 UserController 中配置的方法使用了@RequestMapping(“/login.do”),则此时还将此方法与/login.do进行了绑定,以至于后续随时访问/login.do时都会执行此方法

● 关于以上案例的注意事项:
– 注意:组件扫描必须配置在Spring MVC的配置类中
– 注意:控制器类上的注解必须是@Controller,不可以是@Component、@Service、@Repository – 各注解的作用并不是注解自身决定的,而是运行环境或框架决定的,在Spring框架中,这4个注解是完全等效的,但是,在部分版本的Spring MVC框架中并不相同 – 注意:方法返回的值应该是ASCII码字符,不推荐使用中文、中文标点符号等非ASCII码字符,否则可能显示为乱码
– 某些版本的Spring MVC默认的字符编码是ISO-8859-1,只支持ASCII字符
– 乱码的问题暂不解决

我是将军;我一直都在,。!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值