七、SpringMVC
(1)SpringMVC简介
SpringMVC概述
- SpringMVC技术与Servlet技术功能等同,均属于web层开发技术,web程序大都基于三层架构实现
-
如果所有的处理都交给Servlet来处理的话,所有的东西都耦合在一起,对后期的维护和扩展极为不利
将后端服务器Servlet拆分成三层,分别是web
、service
和dao
-
web层主要由servlet来处理,负责页面请求和数据的收集以及响应结果给前端
-
service层主要负责业务逻辑的处理
-
dao层主要负责数据的增删改查操作
-
servlet处理请求和数据的时候,存在的问题是一个servlet只能处理一个请求
针对web层进行了优化,采用了MVC设计模式,将其设计为controller
、view
和Model
-
controller负责请求和数据的接收,接收后将其转发给service进行业务处理
-
service根据需要会调用dao对数据进行增删改查
-
dao把数据处理完后将结果交给service,service再交给controller
-
controller根据需求组装成Model和View,Model和View组合起来生成页面转发给前端浏览器
-
这样做的好处就是controller可以处理多个请求,并对请求进行分发,执行不同的业务操作。
SpringMVC==主要==负责的就是
-
controller如何接收请求和数据
-
如何将请求和数据转发给业务层
-
如何将响应数据转换成json发回到前端
定义
-
SpringMVC是一种基于Java实现MVC模型的轻量级Web框架
优点
-
使用简单、开发便捷(相比于Servlet)
-
灵活性强
(2)Spring入门案例
Servlet是如何进行开发的?
-
1.创建web工程(Maven结构)
-
2.设置tomcat服务器,加载web工程(tomcat插件)
-
3.导入坐标(Servlet)
-
4.定义处理请求的功能类(UserServlet)
@WebServlet("/user/save")
public class UserSave extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,IOException{
//1.接受请求参数
String name = req.getParameter("name");
System.out.println("servlet save name ==>"+name);
//2.产生相应
res.setContentType("text/json;charset=utf-8");
PrintWriter writer = res.getWriter();
writer.write("{'module':'servlet save'}");
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
this.doGet(req,res);
}
}
-
5.设置请求映射(配置映射关系) ==》xml
SpringMVC的实现流程?
-
1.创建web工程(Maven结构)
-
2.设置tomcat服务器,加载web工程(tomcat插件)
- 3.导入坐标(SpringMVC+Servlet) ,同时添加tomcat插件
<dependencies>
<!--1.导入springmvc和servlet依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.19</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>9.0.83</version>
</dependency>
</dependencies>
<build>
<finalName>SpringMVC_01_quickstart</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-api</artifactId>
<version>7.0.37</version>
</plugin>
</plugins>
</build>
- 4.定义处理请求的功能类(UserController)
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/save")
public String save(String name){
System.out.println("springmvc user save name==>"+name);
return "{'info':'springmvc save'}";
}
@RequestMapping("/delete")
public String delete(String name){
System.out.println("springmvc user delete name==>"+name);
return "{'info':'springmvc delete'}";
}
@RequestMapping("/update")
public String update(String name){
System.out.println("springmvc user update name==>"+name);
return "{'info':'springmvc update'}";
}
@RequestMapping("/find")
public String find(String name){
System.out.println("user find name==>"+name);
return "{'info':'springmvc find'}";
}
}
- 5.设置请求映射(配置映射关系)==》配置类替代xml配置文件
//springmvc配置类
@Configuration
@ComponentScan({"com.presentationLayer.controller"})
public class SpringMVCConfig{...}
//web容器配置类
public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
//产生springMVC对象,本质上还是spring容器
protected WebApplicationContext createServletApplicationContext() {
//初始化web容器
AnnotationConfigWebApplicationContext ctx =
new AnnotationConfigWebApplicationContext();
//加载springMVC配置类
ctx.register(SpringMVCConfig.class);
return ctx;
}
//设置由springmvc控制器处理的请求映射路径
protected String[] getServletMappings() {
return new String[]{"/"};
}
//加载spring配置类
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
- 6.将SpringMVC设定加载到Tomcat容器中
protected WebApplicationContext createServletApplicationContext() {
//初始化web容器
AnnotationConfigWebApplicationContext ctx =
new AnnotationConfigWebApplicationContext();
//加载springMVC配置类
ctx.register(SpringMVCConfig.class);
return ctx;
}
-
7.启动tomcat服务器
- 原因:由于业务有json数据类型的返回值,需要在方法体上使用@ResponseBody进行指定该方法返回一个json数据格式的返回值
@RequestMapping("/save")
//设置当前操作返回结果为指定json数据(本质上是一个字符串信息)
@ResponseBody
public String save(String name){
System.out.println("springmvc user save name==>"+name);
return "{'info':'springmvc save'}";
}
...
-
-
8.总结
-
一次性工作
-
创建工程,设置服务器,加载工程
-
导入坐标 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径 SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)
-
-
多次工作
-
定义处理请求的控制器类
-
定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据 (@ResponseBody )
-
-