个人主页: 叶落闲庭
我的专栏:
c语言
数据结构
javaweb
石可破也,而不可夺坚;丹可磨也,而不可夺赤。
web程序工作流程:web程序通过浏览器访问页面,前端页面使用异步提交的方式发送请求到后端服务器,后端服务器采用表现层、业务层、数据层的三层架构的形式进行开发,页面发送的请求,由表现层接收,获取用户的请求参数号将参数传递到业务层,再由业务层访问数据层,得到用户需要访问的数据后,将数据返回给表现层,表现层拿到数据后,将数据转换成json格式发送给前端页面,前端页面接收数据后解析数据并组织成用户浏览的最终页面信息交给浏览器。
<dependencies>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.2.10.RELEASEversion>
dependency>
dependencies>
//2.定义Controller,使用@Controller定义bean
@Controller
public class UserController {
//2.1设置当前操作的访问路径
@RequestMapping("/save")
//2.2设置当前操作的返回值类型
@ResponseBody
public String save() {
System.out.println("user save...");
return "{'module':'springmvc'}";
}
}
//3.创建Springmvc配置文件,加载controller对应的bean
@Configuration
@ComponentScan("com.practice.controller")
public class SpringMvcConfig {
}
package com.practice.config;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
/**
* @Author YJ
* @Date 2023/8/3 11:01
* Description:定义一个Servlet容器启动的配置类,在里面加载spring配置
*/
public class ServletContainsInitConfig extends AbstractDispatcherServletInitializer {
/**
* 加载springmvc容器配置
*
* @return
*/
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
/**
* 设置哪些请求归属springMVC处理
*
* @return
*/
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
/**
* 加载spring容器配置
*
* @return
*/
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
AbstractDispatcherServletInitializer
类是SpringMVC提供的快速初始化Web3.0容器的抽象类AbstractDispatcherServletInitializer
提供三个接口方法供用户实现
createServletApplicationContext()
方法,创建Servlet容器时,加载SpringMVC对应的bean并放入WebApplicationContext
对象范围中,而WebApplicationContext
的作用范围为ServletContext
容器范围protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
getServletMappings()
方法,设定SpringMVC对应的请求映射路径,设置为“/”表示拦截所有请求,任意请求都将转入到SpringMVC进行处理protected String[] getServletMappings() {
return new String[]{"/"};
}
ServletContainsInitConfig
类,初始化web容器public class ServletContainsInitConfig extends AbstractDispatcherServletInitializer
createServletApplicationContext
方法,创建了WebApplicationContext
对象protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
SpringMvcConfig
@Configuration
@ComponentScan("com.practice.controller")
public class SpringMvcConfig {
}
@ComponentScan
加载对应的bean@ComponentScan("com.practice.controller")
UserController
,每个@RequestMapping
的名称对应一个具体的方法@Controller
public class UserController {
//2.1设置当前操作的访问路径
@RequestMapping("/save")
//2.2设置当前操作的返回值类型
@ResponseBody
public String save() {
System.out.println("user save...");
return "{'module':'springmvc'}";
}
}
getServletMappings
方法,定义所有的请求都通过SpringMVC@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
SpringMVC相关bean(表现层bean)
Spring控制的bean
SpringMVC相关bean加载控制
com.practice.controller
包内Spring相关bean加载控制
com.practice
,排除controller包内的bean名称:@ComponentScan
类型:类注解
范例:
@ComponentScan(value = "com.practice",
excludeFilters = @ComponentScan.Filter(
type = FilterType.ANNOTATION,
classes = Controller.class
)
)
public class SpringConfig {
}
excludeFilters
:排除扫描路径中加载的bean,需要指定类别(type)与具体项(classes)includeFilters
:加载指定的bean,需要制定类别(type)与具体项(classes)package com.practice.config;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
/**
* @Author YJ
* @Date 2023/8/3 11:01
* Description:定义一个Servlet容器启动的配置类,在里面加载spring配置
*/
public class ServletContainsInitConfig extends AbstractDispatcherServletInitializer {
/**
* 加载springmvc容器配置
*
* @return
*/
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
/**
* 设置哪些请求归属springMVC处理
*
* @return
*/
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
/**
* 加载spring容器配置
*
* @return
*/
@Override
protected WebApplicationContext createRootApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringConfig.class);
return ctx;
}
}
public class ServletContainsInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}