新建一个SpringMVC项目

步骤1:创建Maven项目
打开IDEA,创建一个新的web项目
步骤2:补全目录结构
因为使用骨架创建的项目结构不完整,需要手动补全
步骤3:导入jar包
将pom.xml中多余的内容删除掉,再添加SpringMVC需要的依赖


<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0modelVersion>
	<groupId>com.itheimagroupId>
	<artifactId>springmvc_01_quickstartartifactId>
	<version>1.0-SNAPSHOTversion>
	<packaging>warpackaging>
	<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>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.tomcat.mavengroupId>
				<artifactId>tomcat7-maven-pluginartifactId>
				<version>2.1version>
				<configuration>
					<port>80port>
					<path>/path>
				configuration>
			plugin>
		plugins>
	build>
	project>

说明:servlet的坐标为什么需要添加provided ?
scope是maven中jar包依赖作用范围的描述,
如果不设置默认是compile在在编译、运行、测试时均有效
如果运行有效的话就会和tomcat中的servlet-api包发生冲突,导致启动报错
provided代表的是该包只在编译和测试的时候用,运行的时候无效直接使用tomcat中的,就避
免冲突
步骤4:创建配置类

@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMvcConfig {
}

步骤5:创建Controller类

@Controller
public class UserController {
	@RequestMapping("/save")
	public void save(){
		System.out.println("user save ...");
	}
}

步骤6:使用配置类替换web.xml
将web.xml删除,换成ServletContainersInitConfig

public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
	//加载springmvc配置类
	protected WebApplicationContext createServletApplicationContext() {
		//初始化WebApplicationContext对象
		AnnotationConfigWebApplicationContext ctx = new
		AnnotationConfigWebApplicationContext();
		//加载指定配置类
		ctx.register(SpringMvcConfig.class);
		return ctx;
	}
	//设置由springmvc控制器处理的请求映射路径
	protected String[] getServletMappings() {
		return new String[]{"/"};
	}
	//加载spring配置类
	protected WebApplicationContext createRootApplicationContext() {
		return null;
	}
}

步骤7:配置Tomcat环境
步骤8:启动运行项目
步骤9:浏览器访问

浏览器输入http://localhost/save进行访问,会报如下错误:
新建一个SpringMVC项目_第1张图片
页面报错的原因是后台没有指定返回的页面,目前只需要关注控制台看user save …有没有被执行
即可。
步骤10:修改Controller返回值解决上述问题
前面我们说过现在主要的是前端发送异步请求,后台响应json数据,所以接下来我们把Controller
类的save方法进行修改

@Controller
public class UserController {
	@RequestMapping("/save")
	public String save(){
		System.out.println("user save ...");
		return "{'info':'springmvc'}";
	}
}

再次重启tomcat服务器,然后重新通过浏览器测试访问,会发现还是会报错,这次的错是404
新建一个SpringMVC项目_第2张图片
出错的原因是,如果方法直接返回字符串,springmvc会把字符串当成页面的名称在项目中进行查找返回,因为不存在对应返回值名称的页面,所以会报404错误,找不到资源。
步骤11:设置返回数据为json

@Controller
public class UserController {
	@RequestMapping("/save")
	@ResponseBody
	public String save(){
		System.out.println("user save ...");
		return "{'info':'springmvc'}";
	}
}

再次重启tomcat服务器,然后重新通过浏览器测试访问,就能看到返回的结果数据
注意

  • SpringMVC是基于Spring的,在pom.xml只导入了spring-webmvc jar包的原因是它会自动依赖
    spring相关坐标
  • AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器 的抽象类
  • AbstractDispatcherServletInitializer提供了三个接口方法供用户实现
    createServletApplicationContext方法,创建Servlet容器时,加载SpringMVC对应的bean并放入 WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围。
    getServletMappings方法,设定SpringMVC对应的请求映射路径,即SpringMVC拦截哪些请求
    createRootApplicationContext方法,如果创建Servlet容器时需要加载非SpringMVC对应的bean,使用当前方法进行,使用方式和createServletApplicationContext相同。
    createServletApplicationContext用来加载SpringMVC环境。
    createRootApplicationContext用来加载Spring环境。
    新建一个SpringMVC项目_第3张图片

你可能感兴趣的:(spring学习笔记,java,servlet,spring)