目录
springmvc简介
什么是springmvc
Spring下的子项目:Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。
springmvc的执行流程)
- 客户端请求提交到DispatcherServlet
- 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
- DispatcherServlet将请求提交到Controller
- Controller调用业务逻辑处理后,返回ModelAndView
- DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
- 视图负责将结果显示到客户端
springmvc框架搭建
1. 通过maven导入所需的jar
导入spring核心jar
<!--spring start-->
<!-- spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!--spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!-- spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!-- spring-expression -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!--spring end-->
导入springmvc jar
<!--spring mvc start-->
<!--spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!--spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!--spring mvc end-->
2. 配置springmvc
创建springmvc的配置文件 springmvc-config.xm
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--启用mvc注解-->
<mvc:annotation-driven>
</mvc:annotation-driven>
<!-- spring可以自动去扫描base-pack下面的包或者子包下面的java文件,
如果扫描到有Spring的相关注解的类,则把这些类注册为Spring的bean -->
<context:component-scan base-package="com.controller"/>
<!-- 视图解析器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<!-- 后缀 -->
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
配置web.xml文件 主要是配置 DispatcherServlet,即核心分发器:
<!--加入web.xml文件中-->
<!--配置springMVC-->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!--读取springmvc的配置文件-->
<param-value>classpath:spring-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3.创建Controller
返回页面
-
String返回页面
package controller; import mapper.User; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.SessionAttributes; import java.util.Map; /** * 作者:weisen * 日期:2019/9/28 9:38 */ @Controller public class IndexController{ /*@RequestMapping表示方法与那个请求URL来对应*/ @RequestMapping(value = "/index",method = RequestMethod.GET) public String index(){ return "index"; } }
@RequestMapping注释用来映射一个请求,value="/index"表示请求的路径,返回值表示是要返回那个页面的名称,他会根据之前配置的视图解析器中的前缀跟后缀来找到正确的页面,如示例中的 index 加上视图解析器的前缀和后缀后---->
/WEB-INF/jsp/index.jsp
从而找到页面 -
通过ModelAndView返回页面
/*@RequestMapping表示方法与那个请求URL来对应*/ @RequestMapping(value = "/index",method = RequestMethod.GET) public ModelAndView index(){ ModelAndView m = new ModelAndView(); m.setViewName("index"); return m; }
带参返回页面
-
通过ModelAndView返回参数
/*@RequestMapping表示方法与那个请求URL来对应*/ @RequestMapping(value = "/index",method = RequestMethod.GET) public ModelAndView index(){ ModelAndView m = new ModelAndView(); //保存基本数据类型 m.addObject("key","value"); //保存引用数据类型 m.addObject("key",对象); m.setViewName("index"); return m; }
-
通过参数传值
-
ModelMap
/*@RequestMapping表示方法与那个请求URL来对应*/ @RequestMapping(value = "/index",method = RequestMethod.GET) public String index(ModelMap modelMap){ //保存基本数据类型 modelMap.put("key","value"); //保存引用数据类型 modelMap.put("key",对象); return "index"; }
-
Model
/*@RequestMapping表示方法与那个请求URL来对应*/ @RequestMapping(value = "/index",method = RequestMethod.GET) public String index(Model model){ //保存基本数据类型 modelMap.addAttribute("key","value"); //保存引用数据类型 modelMap.addAttribute("key",对象); return "index"; }
-
Map
/*@RequestMapping表示方法与那个请求URL来对应*/ @RequestMapping(value = "/index",method = RequestMethod.GET) public String index(Map map){ //保存基本数据类型 map.put("key","value"); //保存引用数据类型 map.put("key",对象); return "index"; }
-
页面传入参数
-
容器自动注入
/*@RequestMapping表示方法与那个请求URL来对应*/ @RequestMapping(value = "/index",method = RequestMethod.GET) public String index(Map map,String name){ //保存基本数据类型 map.put("key","value"); //保存引用数据类型 map.put("key",对象); sout(name); return "index"; }
在请求中拼接参数 容器通过key–value自动映射到参数中
-
@RequestParam
/*@RequestMapping表示方法与那个请求URL来对应*/ @RequestMapping(value = "/index",method = RequestMethod.GET) public String index(Map map,@RequestParam String name){ //保存基本数据类型 map.put("key","value"); //保存引用数据类型 map.put("key",对象); sout(name); return "index"; }
在请求中拼接参数 容器通过key–value自动映射到参数中,如果没有参数会报出400的错误
-
@RequestMapper
/*@RequestMapping表示方法与那个请求URL来对应*/ @RequestMapping(value = "/index",method = RequestMethod.GET,params = "key") public String index(Map map, String name){ //保存基本数据类型 map.put("key","value"); //保存引用数据类型 map.put("key",对象); sout(name); return "index"; }
在请求中拼接参数 容器通过key–value自动映射到参数中,如果没有参数会报出400的错误
-
Rest风格
4.创建jsp页面
创建index.jsp页面,通过el表达式获取值
<%--
Created by IntelliJ IDEA.
User: isWeisen
Date: 2019/9/28
Time: 16:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${key}
</body>
</html>
如果el表达式在页面中不起作用,可以在头里加属性isELIgnored="false"
5. 通过url访问
在浏览器中输入访问路径
6.发送请求 返回json格式的值
/*@RequestMapping表示方法与那个请求URL来对应*/
@RequestMapping(value = "/index",method = RequestMethod.GET)
@ResponseBody
public String index(String name){
return json格式的值; //返回json格式的值
}