SpringMVC(一)

SpringMVC 入门

1.1 简介

MVC

  • M:Model
  • V:View
  • C:Controller - servlet/action/controller

Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。

Spring MVC主要由DispatcherServlet、处理器映射【找控制器】、适配器【调用控制器的方法】、控制器【业务】、视图解析器、视图组成。

1.2 SpringMVC 的原理

1.3 Spring 入门案例

第一步:导入 springmvc jar 包

暂时先导下面的jar包

在这里插入图片描述

第二步:在web.xml 配置DispatcherServlet

<servlet>
     <servlet-name>DispatcherServlet</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
 </servlet>

 <servlet-mapping>
     <servlet-name>DispatcherServlet</servlet-name>
     <url-pattern>*.do</url-pattern>
 </servlet-mapping>

第三步:在 WEB-INF 目录下创建 DispatcherServlet-servlet.xml

   <?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:mvc="http://www.springframework.org/schema/mvc"
   	xmlns:context="http://www.springframework.org/schema/context"
   	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
   	xsi:schemaLocation="http://www.springframework.org/schema/beans 
   		http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
   		http://www.springframework.org/schema/mvc 
   		http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
   		http://www.springframework.org/schema/context 
   		http://www.springframework.org/schema/context/spring-context-3.2.xsd 
   		http://www.springframework.org/schema/aop 
   		http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
   		http://www.springframework.org/schema/tx 
   		http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
   		
   </beans>

第四步:配置DispatcherServlet-serv.xml

<!-- 1. 配置处理器映射,springmvc默认的处理器映射器BeanNameUrlHandlerMapping:根据bean的name属性的url去找handlerController -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 2. 配置处理器适配置器执行Controller -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 3.配置一个控制器 -->
<bean name="/user.do" class="com.gyf.backoffice.web.controller.UserController"/>
<!-- 4.配置springmvc视图解析器
	视图解析器解析的视频路径为:前缀 + 后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/views"/>
	<property name="suffix" value=".jsp"/>
</bean>

第五步:创建个 Controller 控制器

在这里插入图片描述

第六步:创建一个 userList.jsp 页面

在这里插入图片描述

第七步:运行项目,访问路径

在这里插入图片描述

1.4 Spring 的执行流程

流程图

在这里插入图片描述

控制器处理适配器源码

SimpleControllerHandlerAdapter
在这里插入图片描述

1.5 URL 处理器映射【了解】

BeanNameUrlHandlerMapping

功能:寻找Controller
根据url请求去匹配bean的name属性,从而获取Controller
在这里插入图片描述

SimpleUrlHandlerMapping

功能:寻找Controller
根据浏览器url匹配简单url的key,key就是Controller的id找到Controller
在这里插入图片描述
测试路径:
http://localhost:8080/springmvc-demo01/user1.do
http://localhost:8080/springmvc-demo01/user2.do
http://localhost:8080/springmvc-demo01/user3.do

ControllerClassNameHandlerMapping

功能:寻找Controller
根据类名(MyController)类名.do来访问,类名首字母小写
在这里插入图片描述

测试
在这里插入图片描述

1.6 处理器适配器

SimpleControllerHandlerAdapter

功能:执行controller
调用controller里面方法,返回modelAndView
在这里插入图片描述

HttpRequestHandlerAdapter

执行控制器
负责调用实现HttpRequestHandler接口的控制器
在这里插入图片描述
在这里插入图片描述
http://localhost:8080/springmvc-demo01/user2.do

注意:两个处理器适配器可以共存

1.7 命令控制器【了解】

Springmvc通过命令设计模式接受页面参数

添加页面

<form action="${pageContext.request.contextPath}/command.do" method="post">
    用户名:<input type="text" name="username"><br>
    密码:<input type="text" name="password"><br>
    性别:<input type="text" name="gender"><br>
    生日:<input type="text" name="birthday"><br>
    <input type="submit">
</form>

在这里插入图片描述

Command控制器

在这里插入图片描述

Info.jsp

在这里插入图片描述

views结构

在这里插入图片描述

DispatchServelt-sevlet配置文件

在这里插入图片描述
如果bean中配置name,都要加上/斜杠

测试

在这里插入图片描述
在这里插入图片描述

乱码问题

POST请求乱码

<!-- 配置编码过滤器  -->
  	<filter>
  		<filter-name>EncodingFilter</filter-name>
  		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  		<init-param>
  			<param-name>encoding</param-name>
  			<param-value>UTF-8</param-value>
  		</init-param>
  	</filter>
	
	<filter-mapping>
		<filter-name>EncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

GET请求乱码
Tomcat8 默认进行了url编码,get请求不乱码,Tomcat7会乱码
在这里插入图片描述

日期类型转换

springmvc默认接收的日期格式为yyyy/MM/dd,如果添加其它格式,只要重写一个方法,如图
在这里插入图片描述

2 SpringMVC 的注解开发

2.1 注解开发入门案例

修改 springmvc 的配置文件

把前面的项目复制一份,修改一个DispatchServlet-Servlet.xml配置文件

<!-- 1.配置注解扫描位置 -->
<context:component-scan base-package="com.gyf.backoffice.web.controller"/>
		
<!-- 2. 配置处理器映射,通过注解来查找 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!-- 3.配置注解处理适配器来执行控制器的方法 -->	
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
		
<!-- 配置springmvc视图解析器
			视图解析器解析的视频路径为:前缀 + 后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/views"/>
	<property name="suffix" value=".jsp"/>
</bean>

修改 UserController

在这里插入图片描述

修改Tomcat运行的jdk版本

因为3.2的springmvc注解与jdk1.8不兼容,跑tomat时会报错,如图
在这里插入图片描述
解决办法1:升级spring到4.0的版本
解决办法2:修改Tomcat运行的jdk版本
在这里插入图片描述

测试注解配置的访问

在这里插入图片描述

MVC:annotation-driven

代化mvc配置文件
在这里插入图片描述

2.2 RequestMapping 讲解

配置请求路径映射路径

  • @RequestMapping(“list”)
  • @RequestMapping(“/list.do”)
  • @RequestMapping(value=”/list.do”)
  • @RequestMapping(value = “/list3”,method=RequestMethod.POST) 只能使用POST方法
  • @RequestMapping(value = “/list3”,method=RequestMethod.Get) 只能使用GET方法
    在这里插入图片描述

自定义根路径

可以控制器上添加一个RequestMapping,如图
在这里插入图片描述
在这里插入图片描述

2.3 接收请求参数

封装参数分析

参数类型有:基本类型,int,String等等基本类型, Pojo类
Struts2参数:基于属性封装,在action会添加属性,提供set方法。

Springmvc参数封装:基于方法进行封装。

接收int,String,Date,数组类型

在views/user中提供一个form表单
在这里插入图片描述
在UserController提供一个用户注册的方法
在这里插入图片描述

接收pojo类型

  • 创建一个pojo User类型
    在这里插入图片描述
  • 配置一个注册方法
    在这里插入图片描述
    springmvc接收参数时不需要像struts那样,在表单标签添加user.username这第一个东西
    在这里插入图片描述

接收包装类型参数

  • 把User写成一个类的属性
    在这里插入图片描述

  • 添加一个注册方法
    在这里插入图片描述

  • 修改form表单
    在这里插入图片描述

接收集合List类型参数

  • 在User扩展中添加一个集合
    在这里插入图片描述
  • 添加一个注册 的方法,参数写UserExt
    在这里插入图片描述
  • 表单
    在这里插入图片描述

接收集合 Map 类型参数

  • UserExt上添加一个Map
    在这里插入图片描述
  • 添加一个注册方法
    在这里插入图片描述
  • 表单
    在这里插入图片描述

2.4 Spring 与 Struts 的区别【面试题】

实现机制

  • Struts2是基于过滤器实现的。
  • Springmvc基于servlet实现。

运行速度

  • Servlet比过滤器快。

  • Struts2是多例

    • 每一次请求,都会创建一个Action对象
    • 请求来了以后,struts2创建多少个对象:ActionContext,valuestack,UAction,ActionSuport,ModelDriven
  • Springmvc是单例。

    • 同一个Controller请求,只会创建一个Controller

参数封装分析

Struts基于属性进行封装,Action有参数属性。
Springmvc基于方法封装,参数是写在Controller的方法。

3 页面回显

3.1 配置一个列表方法

在这里插入图片描述

3.2 显示列表数据

在这里插入图片描述
在这里插入图片描述

3.3 edit 方法

在这里插入图片描述

3.4 编辑页面

在这里插入图片描述

效果

在这里插入图片描述

4 URL 模板映射

url模版映射可以restfull软件架构。

体验

修改url格式,如图
在这里插入图片描述
配置接收url模版映射
{}:匹配接受页面Url路径参数
@Pathariable:{}里面参数注入后面参数里面
在这里插入图片描述

在web.xml中配置rest路径

  • Web.xml
    在这里插入图片描述
    在这里插入图片描述

5 转发和重定向

转发到同一个控制器的方法

在这里插入图片描述

转发到不同一个控制器的方法

在这里插入图片描述

重定向,只需要把forward改成redirect

在这里插入图片描述

6 Requestparam

/**
* RequestParam参数描述
* value:参数名称
* defaultValue:默认值
* required:参数是否必须有值,如果为true,参数又为空,会报错
* */
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值