SpringMVC

一、SpringMVC概述

SpringMVC是一个WEB层、控制层框架,主要用来负责与客户端交互,业务逻辑的调用.
SpringMVC是Spring家族的一大组件.Spring整合SpringMVC可以做到无缝集成.
特点 简单易用性能佳。

为了么有了Servlet还要学SpringMVC

a. Servlet的开发配置相对麻烦,servlet特别多的时候web.xml文件将会非常臃肿
b. 每个Servlet都只能处理一个功能,如果需要多个功能就需要开发多个Servlet,项目中存在大量Servlet显得臃肿。
c. 获取请求参数 进行类型转换 封装数据到bean的 过程比较繁琐。
d.其他开发中不方便的地方,例如,乱码问题…数据格式处理…表单校验.

二、pringMVC的组件

a. 前端控制器(DispatcherServlet)
本质上是一个Servlet,相当于一个中转站,所有的访问都会走到这个Servlet中,再根据配置进行中转到相 应的Handler中进行 处理,获取到数据和视图后,在使用相应视图做出响应。
b. 处理器映射器(HandlerMapping)
本质上就是一段映射关系,将访问路径和对应的Handler存储为映射关系,在需要时供前端控制器查阅。
c. 处理器适配器(HandlerAdapter)
本质上是一个适配器,可以根据要求找到对应的Handler来运行。前端控制器通过处理器映射器找到对应的Handler信息之后,将请求响应和对应的Handler信息交由处理器适配器处理,处理器适配器找到真正handler执行后,将结果即model和view返回给前端控制器
d. 视图解析器(ViewResolver)
本质上也是一种映射关系,可以将视图名称映射到真正的视图地址。前端控制器调用处理器适配完成后得到model和view,将view信息传给视图解析器得到真正的view。
e. 视图(View)
本质上就是将handler处理器中返回的model数据嵌入到视图解析器解析后得到的jsp页面中,向客户端做出响应
f、图示
在这里插入图片描述

三、SpringMVC入门案例

a、创建web项目

b、导入SpringMVC包
导包,Tomcat的配置
在这里插入图片描述

c、配置前端控制器
本质上是一个servlet,在当前web项目中配置该servlet
web/WEB-INF/web.xml
在这里插入图片描述

<?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">
    <servlet>
        <!--servlet的名称,不能重复-->
        <servlet-name>SpringMVC</servlet-name>
        <!--servlet的完整类名-->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--指定springmvc配置文件位置-->
        <init-param>
            <!--指定的springmvc配置文名称-->
            <param-name>contextConfigLocation</param-name>
            <!--指定的springmvc配置文位置-->
            <param-value>classpath:/springmvc.xml</param-value>
        </init-param>
    </servlet>
   <!-- 配置servlet的映射-->
    <servlet-mapping>
        <!--servlet的名称,与servlet对应的名称一致-->
        <servlet-name>SpringMVC</servlet-name>
        <!--访问对应servlet的url:*.action表示的匹配方法-->
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>
</web-app>

d、生成SpringMVC的核心配置文件
SpringMVC默认会自动在web应用的WEB-INF目录下去寻找web.xml[前端控制器Servlet] 指向springmvc.xml作为当前SpringMVC的核心配置文件。
创建这个文件,这个文件本身其实就是Spring的配置文件,所以导入Spring相关的约束信息,包括 beans、context、mvc
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop.xsd
        ">

</beans>

e、配置处理器映射器中的路径和处理器的映射关系
核心配置文件springmvc加入

 <!--配置处理器映射器-->
    <bean name="/first.action" class="cn.tedu.controller.FirstController"></bean>

f、创建处理器,编写代码
想要开发一个处理器,写一个类实现Controller接口,在其中的handlerRequest中编写代码处理请求,并将处理好的数据和目标视图封装到ModelAndView中返回
在这里插入图片描述
g、配置视图解析器
核心配置文件springmvc加入

<!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

h、开发视图
在web/WEB-INF/jsp下创建文件first.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>springmvc</title>
</head>
<body>
first.jsp....
    ${msg1}
    ${msg2}
</body>
</html>

i、发布应用,通过浏览器访问
启动tomcat、访问:http://localhost/SpringMVC_Demo01/first.action
下图为对应的设置:
在这里插入图片描述
j、整体流程
在这里插入图片描述

四、 SpringMVC细节

a、修改SpringMVC核心配置文件的位置
SpringMVC默认在和web.xml相同的位置即WEB-INF目录下寻找核心配置文件,文件名默认[前端控制器Servlet-name]-servlet.xml
如果需要,可以通过配置,手动指定核心配置文件的位置,和文件的名称:
在这里插入图片描述

<init-param>
            <!--指定的springmvc配置文名称-->
            <param-name>contextConfigLocation</param-name>
            <!--指定的springmvc配置文位置-->
            <param-value>classpath:/springmvc.xml</param-value>
        </init-param>

b、SpringMVC的注解方式配置
SpringMVC支持使用注解方式配置,比配置文件方式更加的灵活易用,是SpringMVC使用的主流模式。
1>在配置文件中开启SpringMVC的注解模式
在这里插入图片描述

	<!--配置包扫描-->
    <context:component-scan base-package="cn.tedu.controller"></context:component-scan>
    <!--开启注解方式mvc-->
    <mvc:annotation-driven/>

2> 使用注解开发Handler
在这里插入图片描述

3>发布应用,通过浏览器进行访问
在这里插入图片描述
4>SpringMVC注解方式工作原理
i. 当服务器启动时,先会加载web.xml,创建前端控制器Servlet,前端控制器加载并解析SpringMVC的配置文件。
ii. 当解析到包扫描时,扫描指定的包,并将含有@Controller注解的类解析为处理器
iii. 如果配置过mvc:annotation-driven/ 就会解析Spring-MVC注解
iv. 解析@RequestMapping(value="/hello.action"),将指定的地址和当前方法的映射关系进行保存
v.当用户发出请求访问一个地址时,SpringMVC寻找该地址映射关系,如果存在,则找到响应处理器相应方法执行,如果找不到,则报404。
5>整体流程
在这里插入图片描述

c、@RequestMapping
i. 基本使用
通过注解方式实现路径到处理器方法的映射。可以用在类或方法上。用在方法上表示将该方法变为一个处理器,且和指定路径做映射。用在类上则配置的路径会作为这个类中所有处理器的路径的父路径使用。

@RequestMapping("/test01.action")
public ModelAndView test01() {
	ModelAndView mav = new ModelAndView();
	mav.addObject("attr1", "hello anno~");
	mav.addObject("attr2", "hello mvc~");
	mav.setViewName("first");
	return mav;
}

ii.注解属性
1>String [] value() default {};
指定要将当前处理器绑定到哪个访问路径上。
可以配置多个路径。路径中也可以使用*号作为通配符匹配部分路径。

@RequestMapping({"/test02.action","/test002.action","/test002*.action"})
	public ModelAndView test02() {
		ModelAndView mav = new ModelAndView();
		mav.addObject("attr1", "hello anno~");
		mav.addObject("attr2", "hello mvc~");
		mav.setViewName("first");
		return mav;
	}

2>RequestMethod[] method() default {}
指定当前处理器处理哪种提交方式提交的请求。

@RequestMapping(value="/test03.action",method= RequestMethod.POST)
public ModelAndView test03() {
	ModelAndView mav = new ModelAndView();
	mav.addObject("attr1", "hello anno~");
	mav.addObject("attr2", "hello mvc~");
	mav.setViewName("first");
	return mav;
}

3>String[] params() default {};
用来限定当前请求中必须包含指定名称的请求参数才会被当前处理器处理
通过params属性指定只处理请求参数符合指定要求的请求

格式1:只指定名称,要求必须具有该名称的请求参数
格式2:以"名称=值"或"名称!=值"的方式指定必须具有某个请求参数,且值必须等于或不等于给定值
格式3:以"!名称"的方式指定必须不包含指定名称的请求参数

@RequestMapping(value="/test04.action",params= {"name","gender=male","!age","addr!=bj"})
public ModelAndView test04() {
	ModelAndView mav = new ModelAndView();
	mav.addObject("attr1", "hello anno~");
	mav.addObject("attr2", "hello mvc~");
	mav.setViewName("first");
	return mav;
}

4>String[] headers() default {};
用来限定当前请求中必须包含指定名称的请求头才会被当前处理器处理

格式1:只指定名称,要求必须具有该名称的请求头
格式2:以"名称=值"或"名称!=值"的方式指定必须具有某个请求头,且值必须等于或不等于给定值
格式3:以"!名称"的方式指定必须不包含指定名称的请求头

@RequestMapping(value="/test05.action",headers= {"host=localhost"})
public ModelAndView test05() {
	ModelAndView mav = new ModelAndView();
	mav.addObject("attr1", "hello anno~");
	mav.addObject("attr2", "hello mvc~");
	mav.setViewName("first");
	return mav;
}

d、获取请求参数
i. 通过request对象获取
在SpringMVC的注解开发中,可以选择性的接收Request和Response对象来使用,可以用request对象来获取请求参数。

ii、直接接收请求参数
可以在Controller方法中直接接收请求参数相同名称的方法形参,可以直接得到请求参数的值。

iii、请求参数中的名称和属性名不同的处理@RequestParam
可以通过@RequestParam来修饰Controller方法中用来接收请求参数的形参,有如下属性可以配置:

参数作用
value参数名字,即入参的请求参数名字,如value=“delId”表示请求的参数区中的名字为delId的参数的值将传入
required是否必须,默认是true,表示请求中一定要有相应的参数,否则将报400错误码;
defaultValue默认值,表示如果请求中没有同名参数时的默认值

value来指定 将那个请求参数赋值给当前形参
将required声明为true,则请求参数中必须有该属性,如果没有客户端将受到400
在这里插入图片描述
defaultValue可以设定当前形参的默认值
在这里插入图片描述
iv、自动封装请求参数信息到bean
SpringMVC框架可以自动将请求参数封装到bean中,要求bean中必须提供属性的setXxx方法,且bean的属性名和请求参数中请求参数的名字必须一致,才可以自动设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值