springmvc复习:

1.SpringMVC介绍

2.SpringMVC入门程序

	1)创建web工程
2)导入jar包
3)在web.xml中配置前端控制器(指定上下文件的路径 classpath:springmvc.xml)
*.do(*.action)拦截以do结尾的 /拦截所有(不包含jsp) /*拦截所有
4)springmvc.xml配置扫描@controller注解
5)Action Controller Handler处理器 程序员书写的 类上@Controller
方法上@RequestMapping(value=请求的路径) .action可省略
public ModelAndView itemList(){
new ModelAndView
设置数据
设置jsp页面的路径 /WEB-INF/demo.jsp
}

3.SpringMVC架构分析 (一个中心,三个基本点,两个开发)

	前端控制器  (由springmvc提供)
处理器映射器 处理器适配器 视图解析器 (由springmvc提供)
Handler处理器 jsp视图 (由程序员书写)

4.springmvc原理

	1)用户请求到前端控制器
2)前端控制器让处理器映射器根据rul去找具体的处理器中请求映射的路径,对应的方法,
返回找到的方法(包名+类名+方法名)
3)前端控制器通过处理器适配器调用处理器去执行此方法(执行前绑定参数),返回ModelAndView
4)前端控制器让视图解析器去解析ModelAndView,返回具体View
5)前端控制器对View进行渲染视图(即将模型数据填充至视图中)
6)前端控制器渲好的html响应给用户

5.默认的三大组件(前两个废弃了,采用下面的这两个)

	RequestMappingHandlerMapping
RequestMappingHandlerAdapter
<mvc:anonation-driver/>注解驱动--可替代上面两大组件
InternalResourceViewResolver视图解析器:优化前缀及后缀

6.整合MyBatis

整合思想:

		1)SqlMapConfig.xml  mybatis配置文件
别名
2)applicationContext.xml spring配置文件
数据源(c3p0,dbcp,druid):读取db.properties(创建db.properties文件)
mybatis的会话工厂(SqlSessionFactory)
mybatis的mapper 动态代理开发扫描-基本包
[开启事务,扫描@service]
3)创建springmvc.xml文件
扫描基本包(com.spring) 此包下controller,service全扫描
手动配置三大组件
4)web.xml文件
配置监听器读取applicationContext.xml上下文
配置前端控制器读取springmvc.xml
配置post提交乱码(Filter过滤器)

6.参数绑定

1)默认参数绑定

		Request  Response  Session  Model(接口)->ModelMap(实现类)

2)简单类型参数绑定

		方法的形参上(@RequestParam("name")Integer/String/Double/Boolean...)
表单参数与形参一致(不一致可以用@RequestParam注解)

3)pojo类型

		方法的形参上(@ModelAttribute("user")User user)
表单参数与实体属性一致
可以使用@ModelAttribute注解:将请求参数封装到对象user中,并以key=user存储到request作用域中

4)QueryVo包装类(里面item)

		表单参数与包装类中item对象的属性一致
QueryVo vo.item(实体属性) -- item.name(表单参数)

5)自定义参数类型 转换日期 2018:12_16 15:00_12

		①.springmvc.xml里配置转换器的工厂
②.converters -> list/set/array -> <bean class="自定义转换器类"/>
<bean id="conversionServiceFactoryBean" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!-- 配置多个转换器-->
<property name="converters">
<list>
<bean class="com.springmvc.conversion.DateConveter"/>
</list>
</property>
</bean>
③.创建自定义转换器类
实现Converter<S,T> S:页面传递过来的类型 T:转换后的类型

7.SpringMVC中控制层类

	1)入口是一个servlet,即前端控制器
2)单例模式(基于方法开发,请求参数传递到方法的形参)
3)请求参数是形参(不能是成员变量)
4)mav.addObject()只能存到request作用域中

8.参数绑定高级参数:

	数组:页面选中多个checkbox向controller方法传递
Controller方法中可以用Integer[]/String[]接收,或者pojo的Integer[]/String[]属性接收
集合:List中存放对象,并将定义的List放在包装类QueryVo中
private List<Item> itemList;
表单name属性必须是list属性名+下标+元素属性
${status.index} 输出行号,从0开始。
${status.count} 输出行号,从1开始
begin、end、step分别表示:起始序号,结束序号,跳跃步伐

9.@RequestMapping注解

1.url路径映射

		value值是数组,可以将多个url映射到同一个方法
@RequestMapping(value = { "itemList", "itemListAll" })

2.窄化路径

		在class上添加@RequestMapping(url)指定通用请求前缀

3.请求方法限定

		限定GET方法
@RequestMapping(method = RequestMethod.GET)
限定POST方法
@RequestMapping(method = RequestMethod.POST)
GET和POST都可以
@RequestMapping(method = {RequestMethod.GET,RequestMethod.POST})

10.Controller方法返回值

1.返回ModelAndView

		controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view

2.返回void

		在Controller方法形参上可以定义request和response,使用request或response指定响应结果
1)request.getRequestDispatcher("页面路径").forward(request, response);
2)response.sendRedirect("url")
3)response.getWriter().print("{\"abc\":123}");

3.返回字符串

		1)逻辑视图名
指定逻辑视图名,经过视图解析器解析为jsp物理路径
return "itemList";
2)Redirect重定向
return "redirect:/itemEdit.action?itemId=" + item.getId();
3)forward转发
return "forward: /itemEdit.action"; 1.ModelAndView 无敌的 带着数据 返回视图路径 (不建议使用)
2.String 返回视图路径 model带数据 (官方推荐此种方式 解耦 数据 视图 分离 MVC) 建议使用
3.void ajax 请求 合适 json格式数据 (response 异步请求使用)

重定向后浏览器地址栏变更为重定向的地址,

重定向相当于执行了新的request和response,所以之前的请求参数都会丢失

如果要指定请求参数,需要在重定向的url后面添加 ?itemId=1 这样的请求参数

使用转发的方式实现。转发后浏览器地址栏还是原来的请求地址,

转发并没有执行新的request和response,所以之前的请求参数都存在

11.异常处理器

1)系统中异常包括两类:预期异常和运行时异常RuntimeException。

2)系统的dao、service、controller出现都通过throws Exception向上抛出,

最后由springmvc前端控制器交由异常处理器进行异常处理

3)步骤:

		a.自定义异常类(MyException)
b.自定义异常处理器(CustomHandlerException)(实现异常处理器HandlerExceptionResolver)
c.异常处理器配置(将自定义异常处理器注入到spring容器)
d.编写错误页面(error.jsp)

12.上传图片

1)配置虚拟目录

		在tomcat上配置图片虚拟目录,在tomcat下conf/server.xml中添加:
<Context docBase="E:\mysource\upload\temp" path="/pic" reloadable="false"/>

2)加入jar包

		commons-fileupload-1.2.2.jar
commons-io-2.4.jar

3)配置上传解析器(springmvc.xml)

		<!-- 文件上传,id必须设置为multipartResolver -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置文件上传大小 -->
<property name="maxUploadSize" value="5000000" />
</bean>

4)设置表单可以进行文件上传

		enctype="multipart/form-data"

5)图片上传(形参:MultipartFile pictureFile)

		// 设置图片名称,不能重复,可以使用uuid
String picName = UUID.randomUUID().toString();
// 获取文件名
String oriName = pictureFile.getOriginalFilename();
// 获取图片后缀
String extName = oriName.substring(oriName.lastIndexOf("."));
// 开始上传
pictureFile.transferTo(new File("C:/upload/image/" + picName + extName));
// 设置图片名到商品中
item.setPic(picName + extName);
// 更新商品
this.itemService.updateItemById(item);

13.json数据交互

1)@RequestBody

		@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口
将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上

2)@ResponseBody

		@ResponseBody注解用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口
转换为指定格式的数据如:json,xml等,通过Response响应给客户端

3)springmvc支持json包

		jackson-annotations-2.4.0.jar
jackson-core-2.4.2.jar
jackson-databind-2.4.2.jar

4)发送json字符串

		$(function(){
var params = '{"id": 1,"name": "测试商品","price": 99.9,"detail": "测试商品描述","pic": "123456.jpg"}';
$.ajax({
type : "post",
url : "${pageContext.request.contextPath }/json.action",
data : params,
contentType : "application/json;charset=UTF-8",//发送数据的格式
success : function(data){
alert(data.name);
}
dataType : "json",//回调
});
});

5)json测试

		@RequestMapping("testJson")
public @ResponseBody Item testJson(@RequestBody Item item) {
return item;
}

14.RESTful支持

1.Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格.

2.从url上获取商品id,步骤如下:

		1)使用注解@RequestMapping("item/{id}")声明请求的url
{xxx}叫做占位符,请求的URL可以是“item /1”或“item/2”
2)使用(@PathVariable() Integer id)获取url上的数据
@RequestMapping("item/{id}")
@ResponseBody
public Item queryItemById(@PathVariable() Integer id) {
Item item = this.itemService.queryItemById(id);
return item;
}
注:如果@RequestMapping中表示为"item/{id}",id和形参名称一致,@PathVariable不用指定名称。
如果不一致,例如"item/{ItemId}"则需要指定名称@PathVariable("itemId")

3.注意两个区别:

		1).@PathVariable是获取url上数据的。@RequestParam获取请求参数的(包括post表单提交)
2).如果加上@ResponseBody注解,就不会走视图解析器,不会返回页面,返回目前的json数据。
如果不加,就走视图解析器,返回页面

15.拦截器

1)定义拦截器(实现HandlerInterceptor接口)

		public class MyHandlerInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
// 从request中获取session
HttpSession session = request.getSession();
// 从session中获取username
Object username = session.getAttribute("username");
// 判断username是否为null
if (username != null) {
// 如果不为空则放行
return true;
} else {
// 如果为空则跳转到登录页面
response.sendRedirect(request.getContextPath() + "/user/toLogin.action");
return false;
}
}
}

2)在springmvc.xml中配置拦截器

		<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 配置商品被拦截器拦截 -->
<mvc:mapping path="/item/**" />
<!-- 所有的请求都进入拦截器 -->
<!-- <mvc:mapping path="/**" /> -->
<!-- 配置具体的拦截器 -->
<bean class="com.springmvc.interceptor.MyHandlerInterceptor" />
</mvc:interceptor>
</mvc:interceptors>

拦截器总结:

		preHandle按拦截器定义顺序调用
postHandler按拦截器定义逆序调用
afterCompletion按拦截器定义逆序调用 postHandler在拦截器链内所有拦截器返成功调用
afterCompletion只有preHandle返回true才调用(当第一个拦截器为不为true时都不会调用)

二:SpringMVC知识整理的更多相关文章

  1. SpringMVC 知识整理

    SpringMVC架构设计 MVC是一种架构模式,它把业务的实现和展示相分离. SpringMVC与struts2的区别 Struts2是类级别的拦截, 一个类对应一个request上下文,Sprin ...

  2. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

  3. Android开发——Fragment知识整理(二)

    0.  前言 Android开发中的Fragment的应用非常广泛,在Android开发--Fragment知识整理(一)中简单介绍了关于Fragment的生命周期,常用API,回退栈的应用等知识.这 ...

  4. js事件(Event)知识整理

    事件(Event)知识整理,本文由网上资料整理而来,需要的朋友可以参考下   鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemo ...

  5. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  6. wifi基础知识整理

    转自 :http://blog.chinaunix.net/uid-9525959-id-3326047.html WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总 ...

  7. js事件(Event)知识整理[转]

    事件注册 平常我们绑定事件的时候用dom.onxxxx=function(){}的形式 这种方式是给元素的onxxxx属性赋值,只能绑定有一个处理句柄. 但很多时候我们需要绑定多个处理句柄到一个事件上 ...

  8. 2.4G无线收发模块/射频RFM75调试总结/RF知识整理

    射频RFM75通信是收发双方都需要编程的器件,收发双方的通道频率,空中传输速率设置一致,调试时必须先调通一块再调另一块,否则出现问题了就不知道是发送端有问题还是接收端有问题.调试必须理清思路.正确的方 ...

  9. 【OGG】OGG基础知识整理

    [OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...

随机推荐

  1. 如果使用安卓4.4的SD卡?

    安卓4.4默认情况下,后安装的程序无权写入数据到SD卡中,那么是否我们就不能用了?看了很多文章,都说要Root,随后修改配置文件.我觉得这不是很好的方法,Root之后的安卓会有很大风险,这不是最好的办 ...

  2. Linux基础实验(一)

    一)基础实验:1. Unix中常见shell及其命令(shell的缩写)    Bourne shell (sh)      Korn shell (ksh)    C shell (csh)     ...

  3. ubantu18.04 配置nginx与uwsgi

    一.首先先安装nginx静态服务 先更新 sudo apt-get update 1.安装gcc g++的依赖库 sudo apt-get install build-essential && ...

  4. php 调用银联接口 【转载】

    首先要开启openssl开启方法为 openssl证书放在Apache的bin目录中. 其中的php_openssl.dll,ssleay32.dll,libeay32.dll,3个文件拷到windo ...

  5. mycat 1.6.6.1安装以及配置docker 安装mysql 5.7.24 双主多从读写分离主主切换

    mycat和mysql的高可用参考如下两个图 简介:应用程序仅需要连接HAproxy或者mycat,后端服务器的读写分离由mycat进行控制,后端服务器数据的同步由MySQL主从同步进行控制. 服务器 ...

  6. 极光大数据告诉你,程序员们都在"愁"些啥?

    有言道:隔行如隔山.面对不甚熟悉的人群和岗位,我们很容易在固有印象的干扰下,作出一些偏离实际的解读.比如在很多外行人眼中,程序员群体的固有形象是性格木讷,生活方式通常也比较宅.他们最大的爱好就是玩游戏 ...

  7. css3里面的-webkit-transition

    css3里面的-webkit-transition (1)-webkit-transition-timing-function 可以定义动画的变化时间曲线-webkit-transition-timi ...

  8. PHP会话cookie类的封装

    <?php header('content-type:text/html;charset=utf-8');/** * 完成cookie的设置.删除.更新.读取 */class Cookie{   ...

  9. Unity 行为树-中断机制

    一.中断类型 设置了中断之后,行为树会检测执行过的子条件节点,当条件节点的状态发生变化时,会中断正在执行的Running节点,转而立即执行该条件节点. 行为树的打断类型有4种: None Self L ...

  10. stark - 1 ⇲一些理念

    ⒈.django项目启动时,自定义执行某个py文件. 在任意的app的apps.py中的Config类中定义ready方法,并调用autodiscover_modules from django.ap ...