目录

1、SpringMVC

1.1、回顾MVC架构

1.2、SpringMVC概述

1.3、SpringMVC的特点

1.4、SpringMVC整体架构

2、SpringMVC快速入门

2.1、创建一个web工程

2.2、导入依赖坐标

2.3、tomcat插件

2.4、配置DispatcherServlet前端控制器

2.5、SpringMVC核心配置文件

2.6、创建页面

2.7、自定义Headler(Controller)

3、注解开发

3.1、创建Controller类

4、五种映射

4.1、标准映射

4.2、Ant风格url映射

4.3、占位符映射

4.4、限定请求方式映射

4.5、限定请求参数

5、SpringMVC页面跳转

5.1、返回字符串

5.2、转发(forward关键字)

5.3、重定向(redirect关键字)

6、SpringMVC存储数据

6.1、servlet存储数据

6.2、Model存储数据


1、SpringMVC

1.1、回顾MVC架构

MVC是模型(Model) 、视图(View) 、控制器(Controller) 的缩写,是一种软件设计规范。

Model :      javaBean (1.处理业务逻辑,2. 封装数据)
View:        视图  jsp/html(展示数据)
controller:  控制器 (1.接收请求,2.调用模型,3.转发视图)

MVC是将业务逻辑、数据、显示进行分离的方式来组织代码。MVC主要作用是降低了视图与业务逻辑间的耦合度。MVC不是一种设计模式,MVC是一种架构模式。当然不同的MVC存在一些差异!

1.2、SpringMVC概述

Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。它可以通过一套注解,让一个简单的Java类成为控制器,而无须实现任何接口。

简单一句话:SpringMVC简化Servlet的开发!!,SpringMVC主要解决web层的代码,本质是Servlet。

1.3、SpringMVC的特点

1、轻量级,简单易学。
2、高效 , 基于请求响应的MVC框架。
3、与Spring兼容性好,无缝结合。
4、约定优于配置(SpringBoot)。
5、功能强大:RESTful、数据验证、格式化、本地化、主题等。
6、简洁灵活。

1.4、SpringMVC整体架构

主要组件有五个:

前端控制器(DispatcherServlet):只负责接收和响应

处理器映射器(HandlerMapping):根据请求的url查找对应的处理器

处理器(Handler):程序员自己定义的处理器

处理器适配器(HandlerAdpter):对处理器handler进行执行

视图解析器(ViewResvoler):进行视图解析,返回的数据,进行处理,可以解析成对应的页面信息

1、用户发起请求到控制器 DispatcherServlet(前端控制器)
2、前端控制器去handlerMapper查找Handler对象
3、HandlerMapper返回HandlerExecutorChain 执行链(包含两部分内容:Handler ,拦截器集合)
4、前端控制器,通过HandlerAdapter 适配器执行 Handler对象
5、Handler处理具体的业务逻辑
6、Handler处理完业务逻辑之后,返回ModelAndView  其中的View是视图名称
7、将ModelAndView返回前端控制器
8、前端控制器,通过ModelAndView 中的视图名称。在视图解析器中查找视图
9、返回真正的View 视图对象
10、渲染视图
11、返回用户响应

2、SpringMVC快速入门

2.1、创建一个web工程

创建的maven web工程

2.2、导入依赖坐标

<!--springmvc依赖包,springmvc 只有这一个包-->
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.9.RELEASE</version>
</dependency><!--serlvet-->
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope>
</dependency><!--jsp-->
<dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope>
</dependency><!--日志-->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.6.4</version>
</dependency><!--测试-->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope>
</dependency>

2.3、tomcat插件

<build><plugins><!--添加tomcat插件--><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port><path>/</path></configuration></plugin></plugins>
</build>

点击右上角的Add Configuration

点击左上角的+号,选择下面的Maven添加,在后面的配置栏中填写tomcat7:run后应用ok

2.4、配置DispatcherServlet前端控制器

在web.xml配置文件中进行配置DIspatcherServlet前端控制器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><!--前端控制器--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--加载指定配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-servlet.xml</param-value></init-param><!--指定servlet在tomcat启动时创建--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><!--*.do           匹配后缀/              请求不了 html,js,css,img/*             只能访问controller请求--><url-pattern>*.do</url-pattern></servlet-mapping>
</web-app>

2.5、SpringMVC核心配置文件

配置springmvc-servlet.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--HandlerMapping 映射器  springmvc会自己配置无需配置  --><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/><!--HandlerAdapter 适配器 springmvc会自己配置无需配置--><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/><!--配置自定义的handler controller--><bean name="handler" class="cn.itssl.controller.Hello"/><!--配置视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean>
</beans>

2.6、创建页面

根据前缀创建一个对应位置的页面hello.jsp,注意:这里的视图名一定要和自定义Headler里setViewName方法中写的名字一致,因为前端控制器会根据这个视图名去寻找页面后进行数据回显。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
${msg}
</body>
</html>

2.7、自定义Headler(Controller)

创建一个Hello类去实现Controller接口,并重写里面的方法handleRequest。

public class Hello implements Controller {public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {ModelAndView mv = new ModelAndView();mv.addObject("msg","这是第一个springmvc程序!!");//设置视图名   hello仅仅是视图的名字mv.setViewName("hello");return mv;}
}

注意:这里的setViewName里面填写的名字就是视图名,会自动为我们进行拼接前缀和后缀,因为在配置文件中我们进行了配置,所以它最后请求的路径即为:localhost:8080/hello.do,这里的.do是我在web.xml中的url-pattern中配置的匹配后缀,跟拼接后缀.jsp没有任何关系。

3、注解开发

入门案例中的思考:
    1、每个类需实现Controller,麻烦
    2、每个类只能处理一个业务逻辑,不能是controller处理多个业务逻辑。
    3、每一个Controller都需要进行配置
    使用注解:解决上述问题

学会了使用xml配置文件后,总觉得太过于麻烦,那么注解开发可以很简单的进行,省略了xml配置的繁琐。

3.1、创建Controller类

@Controller//注解声明这是一个Controller类
@RequestMapping("/hello")
public class Hello2 {//标准映射 value可以省略不写,以及/也可省略不写@RequestMapping(value = "/show")public ModelAndView test1(){ModelAndView mv=new ModelAndView();mv.addObject("msg","这是第一个springmvc注解!!");mv.setViewName("hello");return mv;}
}

配置核心配置文件(开启注解扫描和开启springMVC注解驱动)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--扫描包下的注解--><context:component-scan base-package="cn.itssl.*"/><!--开启注解驱动--><mvc:annotation-driven/>
</beans>

启动tomcat服务器测试

4、五种映射

4.1、标准映射

  //标准映射@RequestMapping(value = "/show")public ModelAndView test1(){ModelAndView mv=new ModelAndView();mv.addObject("msg","这是第一个springmvc注解!!");mv.setViewName("hello");return mv;}

4.2、Ant风格url映射

 //Ant风格url映射@RequestMapping("/test/*/show2")public ModelAndView test2(){ModelAndView mv=new ModelAndView();mv.addObject("msg","这是第一个springmvc注解!!2222");mv.setViewName("hello");return mv;}

多级目录可以写单级目录

//多级目录可以写单级目录@RequestMapping("/test/**/show3")public ModelAndView test3(){ModelAndView mv=new ModelAndView();mv.addObject("msg","这是第一个springmvc注解!!2222");mv.setViewName("hello");return mv;}

4.3、占位符映射

@RequestMapping(“/user/{userId}/query")

通过@PathVariable(“xxx”) 获取请求路径中参数值

//占位符映射@RequestMapping("/show4/{itemId}/{name}")public ModelAndView test4(@PathVariable("itemId") String itemId,@PathVariable("name") String name){ModelAndView mv=new ModelAndView();mv.addObject("msg","itemId:"+itemId+" name:"+name);mv.setViewName("hello");return mv;}

4.4、限定请求方式映射

RequestMethod.POST @PostMapping("xx")

RequestMethod.GET @GetMapping("xx")

//限制请求方式映射//post请求方式@RequestMapping(value = "/show5",method = RequestMethod.POST)public ModelAndView test5(){ModelAndView mv=new ModelAndView();mv.addObject("msg","这是指定了post请求方式");mv.setViewName("hello");return mv;}//限制请求方式映射//get请求方式@RequestMapping(value = "/show6",method = RequestMethod.GET)public ModelAndView test6(){ModelAndView mv=new ModelAndView();mv.addObject("msg","这是指定了get请求方式");mv.setViewName("hello");return mv;}//限制请求方式映射//post/get请求方式  @RequestMapping默认@RequestMapping(value = "/show7",method = {RequestMethod.GET,RequestMethod.POST})public ModelAndView test7(){ModelAndView mv=new ModelAndView();mv.addObject("msg","这是指定了get/post请求方式");mv.setViewName("hello");return mv;}

以上方式可由下面替代

    @GetMapping("show8")public ModelAndView test8(){ModelAndView mv=new ModelAndView();mv.addObject("msg","这是指定了get请求方式");mv.setViewName("hello");return mv;}@PostMapping("show9")public ModelAndView test9(){ModelAndView mv=new ModelAndView();mv.addObject("msg","这是指定了post请求方式");mv.setViewName("hello");return mv;}

4.5、限定请求参数

可以防止用户把不必要的信息注入进来

@GetMapping(value = "show15",params = "id")          必须包含id
@GetMapping(value = "show15",params = "!id")         不能包含id
@GetMapping(value = "show15",params = "id!=1007")    包含id其值不为1007

    //请求参数必须包含id  方式一@GetMapping(value = "show10",params = "id")public ModelAndView test10(@RequestParam("id") int id){ModelAndView mv=new ModelAndView();mv.addObject("msg","限定请求参数:"+id);mv.setViewName("hello");return mv;}//请求参数必须包含id   方式二@GetMapping(value = "show11")public ModelAndView test11(@RequestParam("id") int id){ModelAndView mv=new ModelAndView();mv.addObject("msg","限定请求参数:"+id);mv.setViewName("hello");return mv;}//请求参数不包含id@GetMapping(value = "show12",params = "!id")public ModelAndView test12(){ModelAndView mv=new ModelAndView();mv.addObject("msg","非id参数");mv.setViewName("hello");return mv;}//请求参数包含id其值不能为1007@GetMapping(value ="show13",params = "id!=1007")public ModelAndView test13(@RequestParam("id") int id){ModelAndView mv = new ModelAndView();mv.addObject("msg","限定请求参数:"+id);mv.setViewName("hello");return mv;}

5、SpringMVC页面跳转

5.1、返回字符串

@Controller
@RequestMapping("hello3")
public class Hello3 {@RequestMapping("show1")public ModelAndView show1(){//第一种 ModelAndView 转发到视图解析器return new ModelAndView("hello");}//第二种 String 转发到视图解析器@RequestMapping("show2")public String show2(){return "hello";}//第三种 void 没有返回的视图@RequestMapping("show3")@ResponseStatus(HttpStatus.OK)public void show3(){System.out.println("我没有要返回的结果..");}//第四种 转发--通过servlet内置对象@RequestMapping("show4")public void show4(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.getRequestDispatcher("/WEB-INF/jsp/hello.jsp").forward(request,response);}
}

5.2、转发(forward关键字)

    //第一种 转发--webapp   页面@RequestMapping("show5")public String show5(){return "forward:/user.html";}//第二种 转发--webapp   controller类@RequestMapping("show6")public String show6(){return "forward:/hello/show.do";}//第三种 转发--ModelAndView@RequestMapping("show7")public ModelAndView show7(ModelAndView mv){mv.setViewName("forward:/user.html");//webapp下的页面return mv;}//第三种 转发--ModelAndView@RequestMapping("show8")public void shiw8(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {request.getRequestDispatcher("/user.html").forward(request,response);}

5.3、重定向(redirect关键字)

此关键字的底层:response.sendRedirect("web项目地址+重定向地址");

@Controller
@RequestMapping("hello4")
public class Hello4 {//第一种 重定向 redirect关键字@RequestMapping("show1")public String show1(){return "redirect:/user.html";//重定向webapp下的具体页面}//第二种 重定向 ModelAndView@RequestMapping("show2")public ModelAndView show2(ModelAndView mv){mv.setViewName("redirect:/user.html");return mv;}//第三种 重定向 绑定servlet内置对象@RequestMapping("show3")public void show3(HttpServletRequest request, HttpServletResponse response) throws IOException {response.sendRedirect(request.getContextPath()+"/user.html");}
}

6、SpringMVC存储数据

在webapp包下创建list.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
姓名:
${requestScope.name}
城市:
${requestScope.city}
年龄:
${requestScope.age}
</body>
</html>

6.1、servlet存储数据

@Controller
@RequestMapping("test")
public class ServletTest {@RequestMapping("requestAPI")public void requestAPI(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setAttribute("name","itssl");request.getRequestDispatcher("/list.jsp").forward(request,response);}}

6.2、Model存储数据

//方式一 ModelAndView存数据@RequestMapping("modelAndViewTest")public ModelAndView modelAndViewTest(ModelAndView mv){mv.addObject("name","jack");mv.setViewName("list");return mv;}//方式二 Model@RequestMapping("TestModel")public String modelAndViewTest2(Model model){model.addAttribute("name","rose");return "forward:/list.jsp";}//方式三 ModelMap@RequestMapping("TestModelMap")public String modelAndViewTest3(ModelMap modelMap){modelMap.addAttribute("city","zhengzhou");return "forward:/list.jsp";}//方式四 Map@RequestMapping("TestMap")public String modelAndViewTest4(Map<Object,Object> map){map.put("age",21);return "forward:/list.jsp";}

SpringMVC——快速入门相关推荐

  1. SpringMVC 快速入门程序

    一.介绍   通过学习了 Spring MVC 框架原理,我们将更好的掌握 Spring MVC.废话不多说,我们现在正式开始 Spring MVC 快速入门程序--以查询商品信息为例. 二.Spri ...

  2. SpringMVC快速入门-代码实现

    ①导入Spring和SpringMVC的坐标.导入Servlet和Jsp的坐标 <!--Spring坐标--><dependency><groupId>org.sp ...

  3. SpringMVC快速入门-开发步骤

    开发步骤 ①导入SpringMVC相关坐标 ②配置SpringMVC核心控制器DispathcerServlet ③创建Controller类和视图页面 ④使用注解配置Controller类中业务方法 ...

  4. SpringMVC 快速入门

    核心类 DispatcherServlet 前端控制器,一个Servlet,配置在web.xml中初始化,所有的请求由它来分发给其他Controller <servlet><serv ...

  5. SpringMVC快速入门,看这一篇就够了!

    springmvc概述 Springmvc是spring框架的一个模块,spring和springmvc无需中间整合层整合. Springmvc是一个基于mvc的web框架 表现层的三大任务: URL ...

  6. SpringMVC学习----SpringMvc快速入门

    SpringMVC简介 它是基于MVC开发模式的框架,用来优化控制器.它是Spring家族的一员.它也具备IOC和AOP. 什么是MVC? 它是一种开发模式,它是模型视图控制器的简称.所有的web应用 ...

  7. SpringMVC:学习笔记(1)——理解MVC及快速入门

    SprigMVC-理解MVC及快速入门 说明: 传统MVC-->JSPModel2-->Front Controller + Application Controller + Page C ...

  8. JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署...

    接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...

  9. SpringBoot系列: RestTemplate 快速入门

    ==================================== 相关的文章 ==================================== SpringBoot系列: 与Sprin ...

最新文章

  1. hihocoder 1152 Lucky Substrings
  2. 报名 | 智进未来:AI在医疗健康领域的应用、挑战及发展趋势
  3. Cissp-【第4章 通信与网络安全】-2021-3-14(543页-560页)
  4. MongoDB和Java(4):Spring Data整合MongoDB(XML配置)
  5. python多线程扫描_python实现多线程扫描网站目录
  6. [Linux] 命令行工具
  7. eclipse 导入zip
  8. 基于DirectUI技术开发的发卡系统
  9. 数据库的那些事(全是干货)
  10. 2019 中国.NET 开发者峰会正式启动
  11. shell脚本_Shell脚本
  12. 获取hdfs_收好!Hadoop-HDFS读写原理的超详细教程
  13. Android Service使用需要注意事项
  14. 中国新能源汽车产业销售模式与十四五竞争格局展望报告2022版
  15. excel信息表怎么转换成word形式?在线免费转换2步完成
  16. python 爬取财经新闻_Python爬虫并自制新闻网站,太好玩了
  17. 美国如果把根域名服务器封了,中国会从网络上消失?
  18. UE4学习之材质系统初探
  19. 钰泰ETA2821,42V/1.5A降压转换器,集成OVP功能防浪涌
  20. 说说各种手机输入法的体验

热门文章

  1. 世界上最美的诗----孩子,别怕
  2. revit二次开发的一些前期准备
  3. 转载-simon:个人总结前端开发规范
  4. python2 python3 转换函数 b2a_hex a2b_hex 使用区别
  5. 边缘计算服务器浪潮信息,浪潮发布边缘计算微服务器EIS800系列产品
  6. 世界大学经济与商科排名:香港科大中国第一
  7. Mac使用ADB连接手机调试
  8. 小米平板安装linux系统版本,ubuntu(linux)占领小米平板2(mipad2)
  9. 【Simulink教程案例13】基于QPSK的位同步simulink建模与仿真分析
  10. 大学四年看了这18般书籍,我成了别人眼中的程序员大神!