SpringMVC学习笔记——视频补充2
文章目录
#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.xmlspringMvc前端控制器配置
spring监听
扫描过程总结:
- web项目启动后,加载web.xml;
- web.xml中加载Spring容器,加载springmvc前端控制器;
- 在Spring的不同容器中,实现dao层,service层和trans的不同配置文件的加载;比如dao曾的Spring容器,加载数据源、会话工厂和扫描mapper;
- 在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相关推荐
- SpringMVC:学习笔记(11)——依赖注入与@Autowired
SpringMVC:学习笔记(11)--依赖注入与@Autowired 使用@Autowired 从Spring2.5开始,它引入了一种全新的依赖注入方式,即通过@Autowired注解.这个注解允许 ...
- SpringMVC学习笔记
文章目录 SpringMVC学习笔记 Spring MVC 什么是 MVC 设计模式? Spring MVC 的核心组件 Spring MVC 的工作流程 如何使用? Spring MVC 注解 Sp ...
- SpringMVC学习笔记整理
SpringMVC学习笔记 以下是我整理的SpringMVC学习笔记: 导入jar包 一:springmvc工作流程. ①. servlet容器初始化一个request请求 ②. Di ...
- JavaEE 企业级分布式高级架构师(四)SpringMVC学习笔记(4)
SpringMVC学习笔记 高级应用篇 ControllerAdvice @ControllerAdvice @ModelAttribute 作用于方法 作用于方法参数 @InitBinder @Ex ...
- SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传
SpringMVC:学习笔记(10)--整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...
- springmvc学习笔记(10)-springmvc注解开发之商品改动功能
springmvc学习笔记(10)-springmvc注解开发之商品改动功能 springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmv ...
- springmvc学习笔记(19)-RESTful支持
springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...
- SpringMVC:学习笔记(5)——数据绑定及表单标签
SpringMVC--数据绑定及表单标签 理解数据绑定 为什么要使用数据绑定 基于HTTP特性,所有的用户输入的请求参数类型都是String,比如下面表单: 按照我们以往所学,如果要获取请求的所有参数 ...
- springmvc学习笔记(17)-上传图片
2019独角兽企业重金招聘Python工程师标准>>> springmvc学习笔记(17)-上传图片 标签: springmvc [TOC] 本文展示如何在springmvc中上传图 ...
最新文章
- 中国700万程序员不够用怎么办?我们去问了北大谢涛,顶会ASE最有影响力论文奖首批华人得主...
- DL之CycleGAN:基于TF利用CycleGAN模型对apple2orange数据集实现图像转换—训练测试过程全记录
- Django购物网站使用说明
- java 8流自定义收集器_Java 8编写自定义收集器简介
- vant组件搜索并选择_Vant Weapp - 有赞出品的免费开源微信小程序组件库
- 网络教育统考计算机怎么考试,网络教育统考怎么考
- 河外动态:疑似UFO的编队在太阳附近徘徊
- 【webpack】理解配置文件
- 服务器系统如何清理,服务器清理内存怎么清理
- PROXMOX 开源虚拟服务器系统安装及配置
- Matlab求解微分、积分方程
- RS485MODBUS RTU转PROFINET网关/PROFINET转MODBUS RTU网关将施耐德ATV610变频器接入西门子1500 PROFINET网络配置方法
- 背包那些经典的例子( 上 )
- pigeon-remoting模块功能分析
- echarts实现左右滑动
- 手机中的传感器之光线传感器(Android实现)
- 求矩阵主对角线元素的和
- webpack安装及配置
- Python 修改AD账号密码(一)- 启用域控LDAPS
- DO DTO BO AO VO POJO