(一)Springmvc请求响应模式的演示过程
三层架构:
浏览器发出一个请求给后端服务器以后,由Servlet处理请求,而Servlet只能接受请求产生响应,并不能进行正真的数据处理,于是我们将他拆分成三层架构,分别为Web(页面数据的收集并产生页面),service(由它进行数据处理),dao(进行数据的持久化,例如存储、查询),通过这样的三层架构,最终可以得到数据并在表现层组织出最终要看的页面,并在该页面反馈给浏览器完成整个调用。
但是也有弊端,因为一个service一次只能处理一次请求,所有就有了全新的开发模式MVC。
MVC:
将servlet拆成了三个块,当我们现在发送请求的时候先发给控制器,由控制器转发给业务层(service),业务层再调用我们的数据层,最后将得到数据后组织出来形成最终要展示的数据模型,但是光有模型用户是看不了,于是我们将页面(view)抽取出来,由页面和我们的模型配合在一起工作,最终得到的页面反馈给用户
小视频
这样一个servlet就可以做分发了,达到一个servlet就可以处理多个请求,这是jsp技术
异步调用:
view发生了一些变化,前端我们用HTML、CSS、VUE、ElementUI来构建页面,后端服务器也发生了调整,现在浏览器再发请求过来的话用异步调用的形式调用后端服务器,后端服务器controller调用service,service调用dao,dao返回service返回controller,最后得到model对象(也就是我们需要展示的数据),而model是java对象,不能直接返回页面,于是对model对象进行调整——用json模式,
(二)SpringMVC概述
SpringMVC是一种基于Java实现MVC模型的轻量级Web框架
优点:使用简单,开发便捷(相比于Servlet),灵活性强
(三)入门案例
1.创建web工程(Maven结构)
2.导入坐标(SpringMVC+Servlet)
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
3.定义处理请求功能类(UserController)
3.1建一个新的包com.gcxy.config配置类,并创建一个类,名为SpringMvcConfig
package com.gcxy.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@ComponentScan("com.gcxy.controller")
@Configuration
public class SpringMvcConfig {
}
@ComponentScan("包名")这个注释的作用是扫描,加这个包名的意思在这个包下都是处理请求的,扫描这个包下的类
3.2建一个com.gcxy.controller,在包内创建一个类,名为:UserController
package com.gcxy.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {
@RequestMapping("/save")
public void save(){
System.out.println("user save");
}
}
@RequestMapping是做映射,后面可以通过请求save调用该方法
4.设置请求映射(配置映射关系)
再在controller包下创建名为ServletControllerConfig类
package com.gcxy.config;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
public class ServletControllerConfig extends AbstractDispatcherServletInitializer {
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
createServletApplicationContext下加载SpringMVC对应的容器对象,通过AnnotationConfigWebApplicationContext初始化容器对象,再用register方法将你的配置注册到容器中,然后返回回去,一旦tomcat一启动就会将这个容器装入到tomcat中,这样在tomcat中访问到springmvc容器了
getServletMappings在Springmvc里面做处理的方法 ,createRootApplicationContext()方法的作用是加载除了springmvc以外的spring容器对应的内容的
createRootApplicationContext加载Spring对应的容器对象
5.设置tomcat服务器,加载web工程(tomcat插件)
点击ok
最后再点击ok就配置成功了
6.启动项目
首先看到的是这个页面
然后在浏览器那里加一个save回车
只要tomcat中出现user save...就说明执行成功了
7.如果想改上面的错误可以修改UserController类的代码
package com.gcxy.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UserController {
@RequestMapping("/save")
// public void save(){
// System.out.println("user save");
//
// }
@ResponseBody
public String save(){
System.out.println("user save...");
return "{'info':'springmvc'}";
}
}
我们在这里返回了一个json数据,其中@ResponseBody注解的作用是告诉springmvc这个返回的是数据,不是页面,再运行后就修正了错误,得到下图