SpringMVC与请求控制器
mvc设计模式
视图(view) -对应组件:jsp或者html文件
控制器(controller) -对应组件:servlet
模型(model) -对应组件:javabean
mvc优点
多视图共享一个模型,大大提高代码的可重用性
mvc三个模块相互独立,松耦合架构
控制器提高了应用程序的灵活性和可配置性
有利于软件工程化管理
mvc缺点
原理复杂
增加了系统结构和实现的复杂性
视图对模型数据的低效访问
spring mvc框架实现原理
- 发起请求到前端控制器(dispatcherservlet)
- 前端控制器请求handerrmapping查找handler(可根据xml配置,注解查找)
- 处理器映射器handlermapping向前端控制器返回handler
- 前端控制器调用处理器适配器执行handler
- 处理器适配器执行handler
- handler执行完成后给适配器返回modelandview
- 处理器适配器向前端控制器返回modelandview(springmvc底层对象,包含model和view)
- 前端控制器请求视图解析器进行解析(根据逻辑视图名解析真正的视图名(.jsp))
- 视图解析器向前端控制器返回view
- 前端控制器实行视图渲染(视图渲染将模型数据填充到request域中)
- 响应给客户端
spring mvc框架搭建步骤
下载jar文件并导入工程
配置文件->修改web.xml配置文件
<!-- 配置核心控制器 dispatcherservlet --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <!-- springmvc默认加载springmvc的配置文件,但是需要满足一下规则 命名规则:servlet-name-servlet.xml==> springmvc-servlet.xml 路径规则:springmvc-servlet.xml必须放在web-info下面--> <!-- 定义读取的applicationcontext-mvc.xml文件 --> <init-param> <param-name>contextconfiglocation</param-name> <param-value>classpath:applicationcontext-mvc.xml </param-value> </init-param> <!-- 启动服务器即读取 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> |
创建spring mvc的配置文件(注:跟配置读取mvc.xml必须一致)
配置注解处理器映射器(在mvc.xml文件配置) <!-- 配置注解的处理器映射器 寻找执行类 controller --> <bean class="org.springframework.web.servlet.mvc.method.annotation.requestmappinghandlermapping" />配置注解处理器适配器(在mvc.xml文件配置) <!-- 配置注解的处理器适配器 执行controller --> <bean class="org.springframework.web.servlet.mvc.method.annotation.requestmappinghandleradapter" /> 开启指定目录注解扫描(在mvc.xml文件配置) <!-- 开启注解扫描 cn.smbms替换controller所在包路径--> <context:component-scan base-package="cn.smbms"/> 配置视图解析器(在mvc.xml文件配置) <!-- 配置视图解析器 /web-inf/jsp/index.jsp--> <bean id="viewresolver" class="org.springframework.web.servlet.view.internalresourceviewresolver"> <!-- 配置前缀--> <property name="prefix" value="/web-inf/jsp/" /> <!-- 配置后缀 --> <property name="suffix" value=".jsp" /> </bean> |
控制层方法上添加@controller注解,也可以@controller("xxx/xxx/")添加路径前缀
方法上添加@requestmapping注解
requestmapping(定义访问名)
功能:请求映射
写法:
requestmapping(“index”) 可以匹配任何的扩展名
requestmapping(“/index.do”)
requestmapping(value=“/index.do”)
requestmapping(value=“/index.do” method=requestmethod.get)
requestmapping(value=“/index.do” method=requestmethod.post)
浏览器直接写url或者a标签都是get请求
一般情况下,如果使用from表单提交都是post请求,还有ajax请求指定post请求
springmvc基于注解封装参数
根路径注解requestmapper(“”) 是为了隔离不同的controller里面相同的方法
springmvc没有成员变量,把需要的参数对象放入方法中,当你请求这个方法时候,这个方法里面对象会自动被创建,需要封装的参数自动被封装方法的对象.
提交表单:
例:<form action="${pagecontext.request.contextpath}/login" > 前面的参数是取得当前的绝对路径. 需要导入jsp-api包
基本数据类型
实体类
包装类
数组
接收集合类型参数
方法里面不能直接传递list集合和map集合类型参数,把list集合定义在包装类里面.
list传递
接收map类型参数
页面参数的回显
springmvc使用model对象,model对象相当于application
application对象中数据可以是el表达式进行获取
url模板映射
主要是为请求restfull设计模式
restfull软件架构设计模式:请求更简洁,更方便,更安全搜索引擎收录.
普通修改数据
<a ref="${pagecontext.request.contextpath}/index/update.do?id=${user.id}">编辑</a>
初识restfull
<a href="${pagecontext.request.contextpath}/index/update/${user.id }.do">编辑</a>
绝对实现restfull风格
如果在上面dispatcherservlet设置拦截权限为全局,则可绝对实现restfull风格.
例:设置全局拦截
则请求默认实现restfull风格
requestparam
该注解可以给参数设置别名,设置默认值.
内置属性:
value=”属性别名” 设置参数属性别名,在页面使用别名进行传参.
defaultvalue=”默认值”,设置默认属性值,当无值传入时,传入默认值.
required=”true(默认)” 请求中一定要有相应的参数,否则报400错误.
转发和重定向
forward:转发,不改变地址情况下的页面跳转
return “forward: getlist”;//相对路径
return “forward:/index/ getlist”;//根路径可随便指定已有的路径
redirect:页面跳转,地址同步改变
return "redirect:getlist";//相对路径跳转
return "redirect:/index/getlist";//绝对路径重定向
<mvc:annotation-driven /> spring3.0.x后默认使用了
<mvc:annotation-driven />默认创建了处理器映射器和处理器适配器,还提供了json数据格式的支持
推荐阅读
-
设计模式:与SpringMVC底层息息相关的适配器模式
-
详解HTTP请求与响应基础及实例
-
Laravel 框架控制器 Controller原理与用法实例分析
-
详解Asp.Net MVC——控制器与动作(Controller And Action)
-
ThinkPHP中URL路径访问与模块控制器之间的关系
-
javascript 中数组的创建 添加 与将数组转换成字符串 页面三种提交请求的方式
-
Flask框架 请求与响应 & 模板语法
-
springMVC解决ajax请求乱码的三种方法
-
spring boot 使用Aop通知打印控制器请求报文和返回报文问题
-
django rest framework之请求与响应(详解)