1.SpringMVC框架概述
1.1 SpringMVC框架的基本说明
SpringMVC是基于Spring的,是Spring中的一个模块,专门用来做web开发使用的。
SpringMVC 也叫 Spring web mvc。是 Spring 框架的一部分,是在Spring3.0 后发布的。基于 MVC 架构,功能分工明确、解耦合。
SpringMVC也是一个容器,使用IoC核心技术,管理界面层中的控制器对象。SpringMVC的底层就是servlet,以servlet为核心,接收请求、处理请求,显示处理结果给用户。在此之前这个功能是由Servlet来实现的,现在使用SpringMVC来代替Servlet行驶控制器的角色和功能。
其核心Servlet是:DispatcherServlet
1.2 SpringMVC 框架的优点
1. 基于 MVC 架构,功能分工明确。解耦合。
2.容易理解,上手快;使用简单。就可以开发一个注解的 SpringMVC 项目,SpringMVC 也是轻量级的,jar 很小。不依赖的特定的接口和类。
3.作为 Spring 框架一部分,能够使用 Spring 的 IoC 和 Aop。方便整合Strtus,MyBatis,Hiberate, JPA 等其他框架。
4.SpringMVC 强化注解的使用,在控制器,Service,Dao 都可以使用注解。方便灵活。使用@Controller 创建处理器对象,@Service 创建业务对象,@Autowired 或者@Resource 在控制器类中注入 Service, Service 类中注入Dao。
1.3 SpringMVC实现步骤
servlet 的实现方式: jsp发起-----servlet-----jsp显示结果
步骤:1)创建web应用
2)加入web依赖 Spring-webmvc(springmvc框架依赖) ,servlet依赖
3)声明springmvc核心对象DispatcherServlet
1.DispatcherServlet是一个servlet对象
2.DispatcherServlet叫做前端控制器(front controller)
3.DispatcherServlet作用:在servlet的init()方法中,创建springmvc中的容器对象 作为servlet,接收请求
4)创建一个jsp,发起请求
5)创建一个普通类,作为控制器使用(代替之前的servlet)
1.在注解上面加入@Controller注解
2.在类中定义方法,方法上面加入@RequestMapping注解方式处理请求,相当于servlet得doGet,doPost
6)创建作为结果得jsp页面
7)创建springmvc得配置文件(spring的配置文件一样)
1.声明组件扫描器,指定@Controller注解所在的包名
2.声明视图解析器对象
2.第一个注解的SpringMVC程序
2.1 IDEA中使用maven创建一个web项目![](https://img-blog.csdnimg.cn/direct/a629228de7cb43d2bfabe247f06798bb.png)
2.2 在pom.xml中加入相关依赖
<!-- springmvc依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!-- servlet依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- jsp依赖 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
2.3 在web.xml中声明DispatcherServlet对象
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--声明springmvc的核心对象
访问mymvc地址后,报错,文件没有找到。找到文件是/WEB-INF/springmvc-servlet.xml或者myweb-servlet.xml(这个)
错误原因:在Servlet的init()方法中,创建springmvc使用的容器对象WebApplicationContext
WebApplicationContext ctx=new ClassPathXmlApplicationContext(配置文件)
配置文件的默认路径:/WEB-INF/<servlet-name>-servlet.xml
DispatcherServlet作用:
1.在init()中创建springmvc的容器对象 WebApplicationContext,创建springmvc配置文件的所有Java对象。
java对象就是Controller对象
2.DispatcherServlet 是一个Servlet,能够接受请求。
-->
<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.xml</param-value>
</init-param>
<!-- 在服务器启动时候创建对象,和容器的顺序 在启动时装载对象 随意给个值要求大于等于0 数值越小,创建的越早-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- url-pattern 作用:把一些请求交给servlet处理 就例如将/mymvc交给springmvc处理
使用中央调度器(DispatcherServlet) 1.使用扩展名方式,格式/*.xxx 例如:xxx.xml表示以xml结尾的都算
-->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
2.4 创建一个发起请求的jsp页面(index.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>第一个springmvc</title>
</head>
<body>
<a href="some.do">发起一个som.do的请求</a>
</body>
</html>
2.5 创建一个普通的类,作为控制器使用,代替之前的servlet
package com.liuhaiyang.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
/** @Controller: 创建控制器(处理器)对象
* 控制器:叫做后端控制器(back controller),自定义的类处理请求的。
* 位置:在类的上面,表示创建此类的对象,对象放在springmvc的容器中
*
*/
@Controller
public class MyController {
/*
Springmvc框架使用 ,使用控制器类中的方法,处理请求
方法的特点: 1.方法的形参,表示请求中的参数 2.方法的返回值,表示本次请求的处理请求
*/
/**
* @RequestMapping :请求映射
* 属性:value 请求中的uri地址,唯一值,以"/"开头
* 位置:1.在方法上面(必须) 2.在类定义的上面(可选)
* 作用:指定的请求,交给指定的方法处理,等同于url-pattern(个人理解 相当于可以做doget相关的操作)
* 返回值ModelAndView:表示本次请求的处理结果(数据和视图) model:表示数据 view:表示视图
*/
//可以在一个类中定义多个方法使用多个@RequestMapping注解
@RequestMapping(value = {"/some.do","/first.do"}) //value是一个数组,可以有多个值,相当于将该方法起一个名字
public ModelAndView doSome(){ //doGet()
//使用这个方法处理请求,能够处理请求的方法叫做控制器方法
//调用service对象,处理请求,返回数据
ModelAndView mv=new ModelAndView();
//添加数据
mv.addObject("msg","在ModelAddView中处理了some.do的请求");
mv.addObject("fun","执行了dosome的方法");
//指定视图,setviewName("视图路径") 相当于请求转发request.getRequestDis...("/show.jsp").forward(..)
// mv.setViewName("/WEB-INF/view/show.jsp");
//当配置了视图解析器,使用文件名称作为视图名使用,叫做视图逻辑名称
//使用了逻辑名称,框架使用配置文件中视图解析器的前缀和后缀,拼接为完整地视图路径 ,例如/WEB-INF/view/ + show + .jsp
mv.setViewName("show");
/*
当框架调用完dosome方法后,得到返回中modelandview 框架会在后续的处理逻辑值,处理mv对象里的数据和视图
对数据执行requert,setAttribute(“msg”,“处理了some.do请求”);把数据放到request作用域中
对视图进行转发操作
*/
return mv;
}
}
2.6 创建显示处理结果的jsp页面(webapp\WEB-INF\view\show.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
/show.jsp,显示request作用域中的数据<br>
<h2>msg数据:<%=request.getAttribute("msg")%></h2>
<h2>fun数据:${fun}</h2>
</body>
</html>
2.7 创建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"
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">
<!--spring的配置文件 声明组件扫描器-->
<context:component-scan base-package="com.liuhaiyang.controller"/>
<!-- 声明视图解析器;帮助处理视图 主要帮助我们处理重复的多余的冗余路径等-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀:指定试图文件的路径-->
<property name="prefix" value="/WEB-INF/view/"/>
<!-- 后缀,试图文件的扩展名-->
<property name="suffix" value=".jsp"/> <!--表示所有的jsp文件-->
</bean>
</beans>