持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情
SpringMVC
SpringMVC是一种基于Java实现MVC模型的轻量级web框架优点
优点:使用简单,开发便捷(相比于Servlet)灵活性强
入门案例
1.
2.创建SpringMVC控制器类
@Controller
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'module'+我成功了}";
}
3.创建springmvc的配置文件,加载controller对应的bean
@Configuration
@ComponentScan("xiaokasidi.controller")
public class SpringMvcConfig {
}
4.定义一个servlet容器启动的配置类,在里面加载spring的配置
public class ServletContainerslnitConfig extends AbstractDispatcherServletInitializer {
protected WebApplicationContext createServletApplicationContext() {
//加载springMVC容器配置
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
//设置哪些请求归属springMVC处理
protected String[] getServletMappings() {
return new String[]{"/"};
}
//加载spring容器配置
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
在此过程中,用到了几个新注解
在上述操作中的第四步中三个重写方法的含义如下
SpringMVC入门程序开发总结(1+N)一次性工作
- 创建工程,设置服务器,加载工程
- 导入坐标
- 创建web容器启动类,加载SpringMVc配置,并设置SpringMVC请求拦截路径
- SpringMVc核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)
多次工作
- 定义处理请求的控制器类
- 定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)
入门案例工作流程分析
启动服务器初始化过程
1.服务器启动,执行ServletContainersInitconfig类,初始化web容器
2.执行createServlgtApplicationContext方法,创建了WebApplicationContext对象
3.加载SpringMvcConfig
4.执行@ComponentScan加载对应的bean
5.加载UserController,每个@RequestMapping的名称对应一个具体的方法
6.执行getservletMappings方法,定义所有的请求都通过springMVC
单次请求过程
1.发送请求localhost/ save
2.web容器发现所有请求都经过SpringMVC,将请求交给SpringMVc处理
3.解析请求路径/save
4.由/save匹配执行对应的方法save()
5.执行save()
6.检测到有@ResponseBody直接将save()方法的返回值作为响应求体返回给请求方
Controller加载控制与业务bean加载控制
1.因为功能不同,如何避免Spring错误的加载到SpringMVC的bean——加载spring控制的bean的时候排除掉SpringMVC控制的bean
2种方法解决
SpringMVC相关bean加载控制
SpringMVC加载的bean对应的包均在com.itheima.controller包内
Spring相关bean加载控制
方式一:
Spring加载的bean设定扫描范围为com.itheima,排除掉controller包内的bean·
@ComponentScan(value="com.itheima",
excludeFilters = @ComponentScan.Filter(
type = FilterType.ANNOTATION,
classes = Controller.class
)
)
public class SpringConfig {
}
上面代码的意思是扫的是com.itheima包下,但排除了有@Controller注解的类
方式二:
Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
bean的加载格式
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
protected WebApplicationContext createRootApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringConfig.class);
return ctx;
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
可以变化为下面这种形式
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
两者的区别在于继承的类不同
明显,上面那种较为繁琐,下面这种较为简便。因此,日常中使用下面这种作为主要使用对象
PostMan简介
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件
作用:常用于进行接口测试
●特征:简单 实用 美观 大方
基本使用
- 注册登录
- 创建工作空间/进入工作空间
- 发起请求测试结果
作用:可以不用每次都通过调取网页来查看自己制作的web。特别是在不同工程下,想要查看之前做的web页面还得返回之前的包下找到启动类并通过输入网址进行web查看,较为繁琐。而这款软件可以保存任一时候的web页面,可以在不启动启动类而且不输入网址的情况下进行web页面查看。