SpringMVC笔记一

it2023-08-09  73

文章目录

一、SpringMVC概述1.MVC2.SpringMVC简介 二、SpringMVC入门案例三、SpringMVC组件1.基本组件2.三大组件 四、SpringMVC的执行流程五、@RequestMapping注解的使用

一、SpringMVC概述

1.MVC

MVC概述:

MVC是一种软件设计模式,将业务逻辑、数据存储、界面显示分层开发;使用MVC可以将M和V的实现代码分离,从而使得同一个程序可以使用不同的表现形式

MVC组成:

组成说明JavaWeb中的对应实现M model模型层JavaBean,即业务层和持久层以及实体类V view视图层前端页面HTML\CSS\JSP\JSTL\EL等C Control控制层Servlet

普通三层架构访问流程:

1.用户发起请求到浏览器

2.servlet接收请求

3.servlet调用业务层方法

4.业务层调用持久层方法

5.执行完操作返回数据给业务层

6.业务层接收返回的结果处理之后返回给servlet

7.servlet把结果以响应的形式返回给页面

8.页面根据返回的数据修改部分内容

MVC三层架构访问流程:

1.用户发起请求访问控制器

2.控制器接收指令和数据调用模型层方法

3.模型层根据方法选择不同的视图层进行数据传输

4.将渲染后的视图层返回给用户

注意:

在JavaWeb开发中即用到了三层架构也用到了MVC分层,因为三层架构只是分的更细了一点,而且MVC分层的主要目的是为了可以适配更多的表现层,也就是适配更多的页面;

2.SpringMVC简介

概述:

SpringMVC是一个 web应用 基于MVC设计模式 轻量级 开源框架

SpringMVC的优点:

优点说明清晰的角色划分前端控制器( DispatcherServlet)处理器映射器( HandlerMapping)处理器适配器( HandlerAdapter)视图解析器( ViewResolver)处理器或页面控制器( Controller)验证器( Validator)命令对象(Command请求参数绑定到的对象)表单对象(FormObject提供给表单展示和表单提交的对象)可拓展性好容易拓展与Spring框架无缝集成这个没啥好说的,毕竟是同一家公司同一个家族的框架可适配性好可以通过HandlerAdapter支持任意类作为处理器可定制性好提供从最简单的url映射,到复杂、专用的定制策略单元测试方便利用Spring提供的Mock对象可以简单对Web应用进行单元测试本地化、主题的解析的支持支持包括数据绑定、主题(theme)之类的许多功能jsp标签库强大的JSP标签库,使JSP编写更容易

二、SpringMVC入门案例

SpringMVC坐标

<!--如果发现配置文件报错,其实是因为没有API的缘故,导入对应的API即可,但是tomcat运行时是有API的,所以运行不会报错--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.6.RELEASE</version> </dependency>

配置web.xml

<!--配置前端控制器--> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--配置初始化参数,即配置SpringMVC的配置文件路径--> <init-param> <param-name>contextConfigLocation</param-name> <!--SpringMVC的配置文件路径--> <param-value>classpath:SpringMVC.xml</param-value> </init-param> <!--因为servlet默认第一次访问创建,为了避免第一次访问比较慢,配置下面的属性标签在服务器启动时创建--> <!--取值范围:0~6,数值越小越先被创建,如果数值不在范围之内则无效--> <load-on-startup>1</load-on-startup> </servlet> <!--配置前端控制器的映射路径,即要控制那些请求需要被处理--> <servlet-mapping> <!--必须和上面的servlet名字一致--> <servlet-name>dispatcherServlet</servlet-name> <!--配置访问路径--> <url-pattern>*.do</url-pattern> </servlet-mapping> <!--配置项目首页是那个页面,默认会在webapp下寻找index页面,如果没有则不会显示--> <welcome-file-list> <welcome-file>/pages/index.jsp</welcome-file> </welcome-file-list> <!--配置编码过滤器--> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!--设置码表为UTF-8--> <init-param> <!--为Spring MVC过滤器配置编码格式--> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <!--配置映射地址--> <url-pattern>/*</url-pattern> </filter-mapping>

配置SpringMVC配置文件

<!--配置注解扫描--> <context:component-scan base-package="com.ps"></context:component-scan> <!-- &lt;!&ndash;处理器映射器&ndash;&gt; <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean> &lt;!&ndash;处理器适配器&ndash;&gt; <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean> --> <!--只要配置了这个,就可以自动创建大部分对象,包括处理器映射器和处理器适配器--> <mvc:annotation-driven></mvc:annotation-driven> <!--视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--控制方法,直接返回要跳转视图的名字即可,即直接返回index/success即可--> <!--配置后缀,一般配置页面的后缀名或拓展名--> <property name="suffix" value=".jsp"></property> <!--配置目录前缀,只要是前缀都可以--> <property name="prefix" value="/pages/"></property> </bean>

控制器(即servlet):

package com.ps.controller; import com.ps.pojo.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * 用于代替之前servlet * 注解作用: * 1.把普通类表示为SpringMVC控制类 * 2.创建类对象并添加到Spring IOC容器中 */ @Controller() public class MyController { //注解作用,表面这是一个控制器,并配置访问路径 @RequestMapping("/success.do") public String success() { System.out.println("方法已经被调用!"); return "success"; } }

页面成功页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>success</title> </head> <body> success </body> </html>

三、SpringMVC组件

1.基本组件

前端控制器:

DispatcherServlet/前端控制器/核心控制器

作用:用于接收并分发从浏览器发起的请求到控制器

后端控制器:

Controller/处理器/控制器/后端控制器作用:表现层处理用户请求的对象

视图:

View/视图作用: 描述响应内容的对象: 页面(比如页面的内容, 路径, 样式)

2.三大组件

处理器映射器:

HandlerMapping/处理器映射器作用:匹配处理器的执行方法(hello.do -> hello())

处理器适配器

HandlerAdapter/处理器适配器作用: 适配调用处理器的方法 (hello(): method.invoke())

视图解析器

ViewResolver/视图解析器作用: 根据名称解析出视图对象 (可以根据前缀后缀拼接出具体的页面路径): rd.forward(req, res)

四、SpringMVC的执行流程

服务器开启流程:

1.服务器开启时读取web.xml文件

2.创建DispatcherServlet前端控制器对象

3.前端控制器读取SpringMVC中配置文件

4.根据读取到的配置文件创建SpringMVC三大组件

用户访问流程:

1.用户发起请求,由前端控制器拦截(或者获得,因为只能得到配置中)请求,并解析要访问的方法

2.前端控制器把请求发给处理器映射器,寻找合适的方法并返回

3.前端控制器把返回的方法发给处理器适配器,处理器适配器执行该方法,并获得方法的返回值

4.前端控制器接收返回值,并把返回值传递给视图解析器,视图解析器寻找对应的视图并返回

5.前端控制器调用视图的渲染方法(即把数据填充到页面中),获得渲染后的页面

6.最后由视图解析器把渲染好的页面返回给用户

五、@RequestMapping注解的使用

注解的作用:

映射请求限制请求

注解的具体配置:

对应参数说明value/path用于设置访问路径,即映射请求method限制请求,配置可以请求的方式,如果非配置方式则无法访问,默认都可以params限制请求,配置必须携带的参数,不携带无法访问,默认不需要携带headers限制请求,配置必须携带的请求头,不携带无法访问,默认不需要携带

当然用于限制的都是数组,可以存放多个限制条件

开启方式:

在SpringMVC中添加注解扫描,否则无法生效

<!--配置注解扫描--> <context:component-scan base-package="com.ps"></context:component-scan>

使用案例:

/** * 注解作用: * 1.表面这是一个控制器 * 2.配置访问路径,后缀可以省略 * 3.限制请求 * method属性:即只能通过配置的请求方式来访问,否则不会被执行 * params属性:即必须携带配置的参数,否则无法请求成功 * 并且如果设置了参数必须以知道的参数值才能,而如果是[]的话是可选项 * headers属性:设置必须携带的请求头,如果没有携带则无法访问 */ @RequestMapping(value = "/list.do", method = {RequestMethod.GET, RequestMethod.POST}, params = "id", headers = {"User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"}) public String list() { System.out.println("方法已经被调用!"); return "success"; }
最新回复(0)