一、Spring MVC概述
1.MVC模型:是一种架构型的模式,帮助我们将开发的结构组织的更加合理,使展示与模型分离、流程控制逻辑、业务逻辑调用与展示逻辑分离。
M:model模型 V:view视图 C:controller控制器
2.Spring MVC
Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web 框架,即使用了MVC架构模式的思想,将web 层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发.
Spring MVC 请求处理流程:
二、简单的Spring MVC实现Hello World
1.所需jar包
2.在webapp目录下创建一个文件夹views,里面新建一个Hello.jsp,代码如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>hello World</h1>
<div>
<!--通过EL表达式可以实现从Controller向jsp传递数据-->
${attName}
</div>
</body>
</html>
3.创建applicationContext-mvc.xml配置文件,代码如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://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/aop
https://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
">
<!--将com.springboot.mvc.*.action包下的所有类扫描进ioc容器-->
<context:component-scan base-package="com.springboot.mvc.*.action"></context:component-scan>
<!--
配置视图解析器,prefix匹配前缀,suffix匹配后缀,如/views/sys/login.jsp在配置后应写为sys/login-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
4.在webapp/WEB-INF下创建web.xml文件,代码如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<!--配置前端控制器,拦截所有的WEB请求。只需要引入org.springframework.web.servlet.DispatcherServlet-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/applicationContext-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
5.创建HelloWorkdController类,
代码如下
//@Controller注解将其注释为控制器类,@RequestMapping("")写在类上,则访问处理器(带有@RequestMapping注解的方法)时加一层路径
@Controller
@RequestMapping("/hello")
public class HelloWorkdController {
//使用@RequestMapping注解的方法才是真正处理请求的处理器
@RequestMapping("/sayHello")
public ModelAndView sayHello() {
ModelAndView mav = new ModelAndView("/hello.jsp");
mav.addObject("attName", "attValue");
System.out.println("==========hello 在此路过============");
//处理器的返回值一般是一个ModelAndView对象,对象的属性值是key:value键值对。其中构造函数的参数是该处理器执行完毕后跳转的View页面,而addObject()方法则给该ModelAndView对象赋值并传递到执行完毕后跳转的页面,该值可以在jsp页面通过EL表达式获取
return mav;
}
@RequestMapping("/hello")
public String hello() {
//处理器还有另外一种方式来传递信息以及跳转页面,返回值为String类型,代表目标页面路径。参数列表中有一个Map类型的形参,代笔殴打是要传递的数据,只需要将数据放入Map集合即可,自动封装成ModelAndView对象
map.put("attName", "另外一种方式");
//正常情况下应该是views/hello.jsp,此处因为applicationContext-mvc.xml中配置了前缀与后缀,故省略
return "hello";
}
[注1]使用@Controller注解的类不需要继承特定的父类或者实现特定的接口,Controller接口的实现类只能处理一个单一请求动作,而@Controller注解的控制器可以支持同时处理多个请求动作,@Controller用于标记一个类,使用它标记的类就是一个Spring MVC Controller对象,即一个控制器类,类里的方法是控制器。
[注2]@RequestMapping注解的方法就是处理器,当url为该路径的时候就调用该处理器
6.总结(执行逻辑)
首先在浏览器地址栏输入从根目录到处理器的路径,本例为http://127.0.0.1:8080/springmvc/hello/sayHello。则tomcat会调用该方法,生成ModelAndView对象,跳转页面并传递数据