文章目录

#ssm架构整合
ssm整合:
1)Dao层

  • pojo和映射文件以及接口使用逆向工程生成
  • SqlMapConfig.xml:mybatis核心配置文件
  • ApplicationContext-dao.xml:整合后spring在dao层的配置
  • 数据源
  • 会话工厂
  • 扫描Mapper

2)service层

  • 事务:ApplicationContext-trans.xml
  • @Service注解扫描:ApplicationContext-service.xml

3)controller层

  • SpringMvc.xml

  • 注解扫描:扫描@Controller注解

  • 注解驱动:替我们显示的配置了最新版的处理器映射器和处理器适配器

  • 视图解析器:显式的配置是为了在controller中不用每个方法都写页面的全路径
    4)web.xml

  • springMvc前端控制器配置

  • spring监听

扫描过程总结:

  1. web项目启动后,加载web.xml;
  2. web.xml中加载Spring容器,加载springmvc前端控制器;
  3. 在Spring的不同容器中,实现dao层,service层和trans的不同配置文件的加载;比如dao曾的Spring容器,加载数据源、会话工厂和扫描mapper;
  4. 在dao层的Spring容器,又加载了mybatis的核心配置文件SqlMapConfig.xml;
    以上。

Note:
@Autowired与@Resource的区别:
@Autowired自动注入,如果一个接口有多个实现,由于不知道用哪个实现类,报错;

被水淹没不知所措。
#参数绑定
商品修改的实现:
处理流程是这样的:
url请求访问页面后,(因为之前已经扫描过了,通过处理器映射器匹配一下),controller中完成对该请求的处理方法。
controller完成以下三步:获得页面提供的参数;调用方法,获得数据;将数据封装,返回到某页面;
Controller类中会定义Service成员对象,通过调用Service中的方法,获得数据;
Service层,通常会定义接口和实现类;实现类中,定义Dao类对象作为成员对象;通过dao对象调用相应的方法,获得数据,最终返回给controller;
controller获取数据后,进行一定的处理和封装(封装到reponse中或model中,或ModelAndView中),返回到某页面。

##Springmvc默认支持的类型

  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
  • Model
 /*** springMvc中默认支持的参数类型,在controller方法中,可以加入,也可以不加入;* 按需求选择是否加入这些参数;* HttpServletRequest* HttpServletResponse* HttpSession* Model*///该方法要接收一个商品的id,通过request接收//这几个参数需要servlet-api的jar包//@RequestMapping("/edit")public String itemEdit(HttpServletRequest request, Model model) throws Exception{String idStr=request.getParameter("id");//获得参数;//逻辑思路是这样的:controller负责流程:流程上就是,从页面获取什么;执行什么;最后返回;//这里执行什么,就要靠调用service中的相应的方法来执行,并获取数据;//service中,两个,一个接口,一个实现;在实现中,就要调用dao中的方法;//这里的dao的使用,是通过都动态mapper方式实现的;所以service实现中定义mapper对象,通过该对象调用方法;//这里要写的就是,通过id获得数据;Items item=itemsService.findItemsById(Integer.parseInt(idStr));//将数据返回给页面//Model模型:模型中放入了返回给页面的数据;//Model底层其实就是用的request域来传递数据,但是对request域进行了扩展;//用request://request.setAttibute("item",item);//springmvc建议用model;model.addAttribute("item", item);//如果SpringMvc方法返回一个简单的string字符串,那么springmvc就会认为这个字符串是页面的名称;//又,这里的字符串,其实也依赖于在springmvc.xml配置文件中配置的视图解析器的相关内容;比如前后缀;return "editItem";}

##简单数据类型
业务:编辑数据后,点击提交按钮,实现数据更新。

 //开发中,方法返回String或者ModelAndView都可以;//springmvc可以接受简单类型的参数,即基本数据类型,包括string;//springmvc可以帮你自动进行类型转换;//Controller方法接受的参数的变量名称必须要等于页面上input框的name属性值;@RequestMapping("/updateitem")public String update(Integer id,String name, Float price, String detail,) throws Exception{//根据前端提交的数据,保存数据到数据库中;//接收前端的数据的几种方式://request.getParameter,通过控件中的id获取数据;//springmvc提供的方式:直接接受简单类型;//从jsp中接受的参数都是string类型,Springmvc能自动转成参数列表指定的类型;//又:自动转是根据形式参数名称和页面中控件的name匹配中转换的;所以要注意名称相同;Items item=new Items();item.setId(id);item.setName(name);item.setPrice(price);item.setDetail(detail);item.setCreatetime(null);//将接收到的数据保存;itemsService.updateItems(item);return "success";}

Note:
两种请求方式:

  • get请求:默认请求方式;或url中有?的请求方式;
  • post请求:提交表单

解决get请求乱码的问题

  • 修改tomcat配置文件添加乱码与工程编码一致:
<Connector URIEncoding="utf-8"connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
  • 对参数进行重新编码:
String userName new
String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

这里提交后出现问题:中文乱码;
解决post请求乱码的问题:

  <!-- 配置Post请求乱码 --><filter><filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

##Pojo类型
springmvc也可以接收pojo类型的参数;
**要求:**页面上input框的name属性名称必须等于pojo的属性名称;

 //springmvc可以直接接收pojo类型;要求:页面上input框的name属性名称必须等于pojo的属性名称;@RequestMapping("/updateitem")public String update(Items item) throws Exception{ item.setCreatetime(null);//将接收到的数据保存;itemsService.updateItems(item);return "success";}

##Pojo包装类型
poho包装类型:比如说Vo类;(就是,em,不只一个类的成员属性,可能包括商品啊,用户啊等的共同信息的输入参数)
Note:
如果controller中接收的是Vo,那么页面上input框的name属性要等于vo的属性.属性.属性…
这里就是items99.name和items99.price;
举例:

<!-- jsp页面 -->
查询条件:
<table width="100%" border=1>
<tr>
<td>商品名称:<input name="items99.name" type="text"/></td>
<td>商品价格:<input name="items99.price" type="text"/></td><td><input type="submit" value="查询"/></td>
</tr>
</table>
//Vo类定义:
public class QueryVo {//商品对象;private Items items99;//...
}
//Items类定义:
public class Items {private Long id;private String name;private BigDecimal price;

##自定义参数绑定
问题:当实现修改业务时,如果提交修改的数据包括日期类型,则会产生错误:因为Date不属于基本数据类型或String;
解决:spring提供了类型转换的工具;
处理流程:
实现:页面传给Controller一个String类型的参数,;Controller一看,我其实需要一个Date类型的参数啊,然后就交给适配器去解决;适配器已经通过配置文件,得到了各种converter;就挨个看每个converter,找适合将String转为Date的converter;找到之后,就转转转;controller就能处理了。
感慨:(什么都没学会瞎感慨什么——还是要顽强的感慨一下)程序员真厉害啊;真的连万分之一都比不上。
定义CustomGlobalStrToDateConverter类,类实现:

/*** S - source:源,这里是String* T - target:目标,这里是Date* @author Administrator**/
public class CustomGlobalStrToDateConverter implements Converter<String, Date> {public Date convert(String source){try {Date date=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(source);return date;} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}
}

在Springmvc.xml中配置:

    <!-- 注解驱动:替我们显示的配置了最新版的注解的处理器映射器和处理器适配器 --><mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven><!-- 配置自定义转换器 注意: 一定要将自定义的转换器配置到注解驱动上(注解驱动是干嘛的:自动配置处理器适配器和处理器映射器的)--><bean id="conversionService"class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="converters"><set><!-- 指定自定义转换器的全路径名称 --><!-- 这里可以写多个转换器,在这里配置即可。 --><bean class="cn.itheima.controller.converter.CustomGlobalStrToDateConverter"/></set></property></bean>

#总结
被水淹没不知所措
参数绑定(从请求中接收参数) 重点

  • 默认类型:
  • 在controller方法中可以有也可以没有,看自己需求随意添加.
  • httpservletRqeust,httpServletResponse,httpSession,Model(ModelMap其实就是Mode的一个子类,一般用的不多)
  • 基本类型:string,double,float,integer,long.boolean
  • pojo类型:页面上input框的name属性值必须要等于pojo的属性名称
  • vo类型:页面上input框的name属性值必须要等于vo中的属性.属性.属性…
  • 自定义转换器converter:
  • 作用:由于springMvc无法将string自动转换成date所以需要自己手动编写类型转换器;
  • 需要编写一个类实现Converter接口;
  • 在springMvc.xml中配置自定义转换器;
  • 在springMvc.xml中将自定义转换器配置到注解驱动上;

SpringMVC学习笔记——视频补充2相关推荐

  1. SpringMVC:学习笔记(11)——依赖注入与@Autowired

    SpringMVC:学习笔记(11)--依赖注入与@Autowired 使用@Autowired 从Spring2.5开始,它引入了一种全新的依赖注入方式,即通过@Autowired注解.这个注解允许 ...

  2. SpringMVC学习笔记

    文章目录 SpringMVC学习笔记 Spring MVC 什么是 MVC 设计模式? Spring MVC 的核心组件 Spring MVC 的工作流程 如何使用? Spring MVC 注解 Sp ...

  3. SpringMVC学习笔记整理

    SpringMVC学习笔记 以下是我整理的SpringMVC学习笔记: 导入jar包 一:springmvc工作流程. ①.     servlet容器初始化一个request请求 ②.     Di ...

  4. JavaEE 企业级分布式高级架构师(四)SpringMVC学习笔记(4)

    SpringMVC学习笔记 高级应用篇 ControllerAdvice @ControllerAdvice @ModelAttribute 作用于方法 作用于方法参数 @InitBinder @Ex ...

  5. SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传

    SpringMVC:学习笔记(10)--整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...

  6. springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能 springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmv ...

  7. springmvc学习笔记(19)-RESTful支持

    springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...

  8. SpringMVC:学习笔记(5)——数据绑定及表单标签

    SpringMVC--数据绑定及表单标签 理解数据绑定 为什么要使用数据绑定 基于HTTP特性,所有的用户输入的请求参数类型都是String,比如下面表单: 按照我们以往所学,如果要获取请求的所有参数 ...

  9. springmvc学习笔记(17)-上传图片

    2019独角兽企业重金招聘Python工程师标准>>> springmvc学习笔记(17)-上传图片 标签: springmvc [TOC] 本文展示如何在springmvc中上传图 ...

最新文章

  1. 中国700万程序员不够用怎么办?我们去问了北大谢涛,顶会ASE最有影响力论文奖首批华人得主...
  2. DL之CycleGAN:基于TF利用CycleGAN模型对apple2orange数据集实现图像转换—训练测试过程全记录
  3. Django购物网站使用说明
  4. java 8流自定义收集器_Java 8编写自定义收集器简介
  5. vant组件搜索并选择_Vant Weapp - 有赞出品的免费开源微信小程序组件库
  6. 网络教育统考计算机怎么考试,网络教育统考怎么考
  7. 河外动态:疑似UFO的编队在太阳附近徘徊
  8. 【webpack】理解配置文件
  9. 服务器系统如何清理,服务器清理内存怎么清理
  10. PROXMOX 开源虚拟服务器系统安装及配置
  11. Matlab求解微分、积分方程
  12. RS485MODBUS RTU转PROFINET网关/PROFINET转MODBUS RTU网关将施耐德ATV610变频器接入西门子1500 PROFINET网络配置方法
  13. 背包那些经典的例子( 上 )
  14. pigeon-remoting模块功能分析
  15. echarts实现左右滑动
  16. 手机中的传感器之光线传感器(Android实现)
  17. 求矩阵主对角线元素的和
  18. webpack安装及配置
  19. Python 修改AD账号密码(一)- 启用域控LDAPS
  20. DO DTO BO AO VO POJO

热门文章

  1. python用户登陆程序 要求用户名和密码_python开发基础作业01:模拟登陆系统
  2. 如何在WordPress中添加Google Maps Store Locator
  3. 300套商务ppt下载模板
  4. 用python制作日历
  5. 题库API接口 含独立后台系统
  6. 猎聘网面试题:SimpleDateFormat线程安全吗
  7. RT-Thread freemodbus RS485 RTU主机调试 - STM32F107VCT6
  8. 历时半年,我终于阿里上岸了,附面经和Java非科班学习心得
  9. (6)三大系列总结,mouseenter和mouseover的区别
  10. SPSS 27安装包下载及详细图文安装教程