七、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 )
-
-