最后
在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
大家看完有什么不懂的可以在下方留言讨论也可以关注。
觉得文章对你有帮助的话记得关注我点个赞支持一下!
//所以用包装类型作为形参更好
//调用service更新商品信息,页面需要将商品信息传到此方法
itemsService.updateItems(id, itemsCustom);
return “success”;
}
}
在controller的商品信息修改页面显示和商品信息修改提交两个方法如下:
这两个方法的形参其实就是通过参数绑定所实现的,修改某个商品的参数需要先跳到修改页面显示出该商品的当前参数,其中调用的就是业务层的根据id查询商品信息方法;修改完商品参数以后需要将新的商品信息提交到数据库进行更新,商品信息修改提交方法调用的就是业务层的根据id更新Items表的数据。
我们需要讲解得就是如何实现参数绑定,editItems方法中涉及到默认支持的参数绑定类型(Model model)和简单类型的参数绑定(@RequestParam(value=“id”,required=true) Integer items_id),editItemsSubmit方法涉及到默认支持的参数绑定类型(Model model)和简单类型(Integer id)和pojo类型(ItemsCustom itemsCustom)的参数绑定。详见下面三、参数绑定的类型。
2.4.2、开发jsp
跳转到单个商品信息修改页面的jsp
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/fmt” prefix=“fmt”%>
<c:if test=“${allErrors!=null }”>
<c:forEach items=“${allErrors }” var=“error”>
${ error.defaultMessage}
</c:forEach>
</c:if>
修改商品信息:
<%--
商品图片<c:if test=“${item.pic !=null}”>
</c:if>
--%> 商品简介 ${itemsCustom.detail }修改商品信息成功提交后的页面jsp
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
操作成功!
三、参数绑定的类型
=========
3.1、spring参数绑定过程
从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上。springmvc中,接收页面提交的数据是通过方法形参来接收。而不是在controller类定义成员变量接收!!!!(servlet是这种方式)
其原理如下:
需要重点说明的是:spring参数绑定过程是处理器适配器调用springmvc提供参数绑定组件将key/value数据转成controller方法的形参(先转成形参,再赋给形参),这一过程都是spring帮我们自动完成的,我们只需要遵守规则(即下面讲解的不同类型的参数在controller方法的形参处该如何绑定)
3.2、默认支持的参数绑定类型
直接在controller方法形参上定义下边类型的对象,就可以使用这些对象,适配器调用参数绑定组件直接进行绑定。在参数绑定过程中,如果遇到下边类型直接进行绑定。可以看到2.4.1中都用到了默认支持的Model。
1、HttpServletRequest
通过request对象获取请求信息
2、HttpServletResponse
通过response处理响应信息
3、HttpSession
通过session对象得到session中存放的对象
4、Model/ModelMap
model是一个接口,modelMap是一个接口实现 。
作用:将model数据填充到request域。
2.4.1中的editItems方法和editItemsSubmit方法都用到了Model。
3.3、简单类型
简单类型包括:Integer、String、Float、Long、Double等类型,但不包括日期类型(日期类型会单独讲解)
绑定规则:
通过@RequestParam对简单类型的参数进行绑定。
如果不使用@RequestParam,要求request传入参数名称和controller方法的形参名称一致,方可绑定成功。
如果使用@RequestParam,不用限制request传入参数名称和controller方法的形参名称一致。
通过required属性指定参数是否必须要传入,如果设置为true,没有传入参数,报下边错误:
2.4.1中的editItems方法的形参:
对应于itemsList.jsp中的提交按钮:
若不使用@RequestParam,则editItems方法的形参需要和request传入参数名称为id保持一致;而使用了@RequestParam就可以将request传入参数名称为id与editItems方法的形参Integer items_id进行对应,达到修改参数名称的效果。
3.4、pojo类型
3.4.1、绑定规则:
pojo作为controller的形参时,jsp页面中input的name和controller的pojo形参中的属性名称一致,即可将页面中数据绑定到pojo。
2.4.1中editItemsSubmit方法的形参ItemsCustom itemsCustom即为pojo类型(继承自逆向工程生成的items),对应关系如下
jsp页面定义:商品信息修改页面editItems.jsp
controller的pojo形参ItemsCustom的定义:(由于ItemsCustom继承自逆向工程生成的Items,故ItemsCustom的属性和Items中的属性相同)
3.4.2、自定义参数绑定实现日期类型绑定
对于controller形参中pojo对象,如果属性中有日期类型,需要自定义参数绑定。
将请求日期数据串传成日期类型,要转换的日期类型和pojo中日期属性的类型保持一致。
所以自定义参数绑定将日期串转成java.util.Date类型。需要向处理器适配器中注入自定义的参数绑定组件。
自定义的日期类型的转换器:
package cn.itcast.ssm.controller.converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
public class CustomDateConverter implements Converter<String,Date>{
@Override
public Date convert(String source) {
//实现 将日期串转成日期类型(格式是yyyy-MM-dd HH:mm:ss)
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
try {
//转成直接返回
return simpleDateFormat.parse(source);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//如果参数绑定失败返回null
return null;
}
}
在springmvc的配置文件spring.xml中配置自定义的日期类型的转换器:
3.5、包装pojo
这里我们对2.4.1中的查询商品列表方法进行讲解。
quertItems方法的形参ItemsQueryVo即为包装pojo类型(其属性为pojo)
绑定规则:
包装pojo作为controller的形参时,jsp页面中input的name和包装pojo中的_pojo.属性_名称一致,即可将页面中数据绑定到pojo。
jsp页面定义:下旬商品信息页面itemsList.jsp
controller的包装pojo形参ItemsQueryVo的定义:
包装pojo形参ItemsQueryVo的pojo属性ItemsCustom的定义:
3.6、集合类型
关于集合类型的参数绑定,为了简单起见,我们主要讲解表现层的controller和jsp是如何实现参数绑定的。而业务层和持久层的具体方法就不做赘述了。
3.6.1、数组绑定
针对数组绑定我们实现商品批量删除功能,用户在页面选择多个商品,批量删除。
controller方法定义:
// 批量删除 商品信息(数组绑定)
@RequestMapping(“/deleteItems”)
public String deleteItems(Integer[] items_id) throws Exception {//简单类型参数绑定(数组)
// 调用service批量删除商品
// …
return “success”;
}
jsp页面定义:
3.6.2、list绑定
针对list绑定实现批量商品修改功能,在页面输入多个商品信息,将多个商品信息提交到controller方法中。
功能实现分析:
1、进入批量商品修改页面(editItemsQuery.jsp),在次页面通过查询商品列表功能,将所有商品信息显示出来
2、通过批量修改商品提交功能将修改后的商品数据提交到数据库。
通常在需要批量提交数据时,将提交的数据绑定到list中,比如:成绩录入(录入多门课成绩,批量提交)。
故使用List接收页面提交的批量数据,通过包装pojo接收,在包装pojo中定义list属性
controller方法定义:
List接收页面提交的批量数据,定义在在包装pojo中中的list属性,故editItemsAllSubmit方法传入的形参为包装pojo
// 批量修改商品页面,将商品信息查询出来,在页面中可以编辑商品信息
@RequestMapping(“/editItemsQuery”)
public ModelAndView editItemsQuery(HttpServletRequest request,
ItemsQueryVo itemsQueryVo) throws Exception {
// 调用service查找 数据库,查询商品列表
List itemsList = itemsService.findItemsList(itemsQueryVo);
// 返回ModelAndView
ModelAndView modelAndView = new ModelAndView();
// 相当 于request的setAttribut,在jsp页面中通过itemsList取数据
modelAndView.addObject(“itemsList”, itemsList);
modelAndView.setViewName(“items/editItemsQuery”);
return modelAndView;
}
// 批量修改商品提交(List绑定,将list封装在包装类型的属性中)
// 通过ItemsQueryVo接收批量提交的商品信息,将商品信息存储到itemsQueryVo中itemsList属性中。
@RequestMapping(“/editItemsAllSubmit”)
public String editItemsAllSubmit(ItemsQueryVo itemsQueryVo)
throws Exception {
return “success”;
}
jsp页面定义:
3.6.3、map绑定
在包装类中定义Map对象,并添加get/set方法,action使用包装对象接收。
包装类中定义Map对象如下:
Public class QueryVo {
private Map<String, Object> itemInfo = new HashMap<String, Object>();
//get/set方法…
}
controller方法定义:
public String useraddsubmit(Model model,QueryVo queryVo)throws Exception{
System.out.println(queryVo.getStudentinfo());
}
页面定义如下:
如何快速更新自己的技术积累?
- 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
- 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
- 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目
blic String useraddsubmit(Model model,QueryVo queryVo)throws Exception{
System.out.println(queryVo.getStudentinfo());
}
页面定义如下:
如何快速更新自己的技术积累?
- 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
- 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
- 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目
[外链图片转存中…(img-zdJ7M0DV-1715226646951)]
[外链图片转存中…(img-h57c1mIO-1715226646951)]