Kafka实战笔记
关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图
- Kafka入门
- 为什么选择Kafka
- Karka的安装、管理和配置
- Kafka的集群
- 第一个Kafka程序
afka的生产者
- Kafka的消费者
- 深入理解Kafka
- 可靠的数据传递
- Spring和Kalka的整合
- Sprinboot和Kafka的整合
- Kafka实战之削峰填谷
- 数据管道和流式处理(了解即可)
- Kafka实战之削峰填谷
修改
</c:forEach>
(2)修改QueryVo类
package com.itzheng.springmvc.pojo;
import java.util.List;
/**
-
包装的pojo传递
-
@author Steven
*/
public class QueryVo {
private Item item;
private Integer[] ids;
private List items;
public List getItems() {
return items;
}
public void setItems(List items) {
this.items = items;
}
public Integer[] getIds() {
return ids;
}
public void setIds(Integer[] ids) {
this.ids = ids;
}
public Item getItem() {
return item;
}
public void setItem(Item item) {
this.item = item;
}
}
(3)访问页面http://localhost:8080/queryItem.action
(4)测试项目
a、修改ItemController.java
@RequestMapping(“queryItem”)//绑定请求地址
public String queryItem(QueryVo vo,Integer[] ids, Model model){
if(vo.getItem() != null){
System.out.println(vo.getItem().toString());
}
if(ids != null && ids.length > 0) {
for (Integer id : ids) {
System.out.println(id);
}
}
if(vo.getItem() != null && vo.getItems().size() > 0) {
for (Item item : vo.getItems()) {
System.out.println(item);
}
}
//模拟搜索商品
List itemList = itemService.getItemList();
model.addAttribute(“itemList”, itemList);
return “itemList”;
}
b、访问页面测试并提交参数
访问页面http://localhost:8080/queryItem.action
修改内容并提交表单
页面报错
修改jsp页面内容
重新提交页面
1、配置多个请求地址
(1)修改ItemController当中的itemList方法
@RequestMapping(value = {“itemList”,“itemList2”})
public ModelAndView itemList() {
ModelAndView mav = new ModelAndView();
List itemList = itemService.getItemList();
mav.addObject(“itemList”, itemList);
// mav.setViewName(“/WEB-INF/jsp/itemList.jsp”);
mav.setViewName(“itemList”);
return mav;
}
(2)运行并测试
http://localhost:8080/itemList.action
使用绑定的第二个访问http://localhost:8080/itemList2.action
2、@RequestMapping加在类的上面:分目录管理
@Controller
@RequestMapping(“item”)
public class ItemController {
@Autowired
private ItemService itemService;
@RequestMapping(value = {“itemList”,“itemList2”})
public ModelAndView itemList() {
ModelAndView mav = new ModelAndView();
List itemList = itemService.getItemList();
mav.addObject(“itemList”, itemList);
// mav.setViewName(“/WEB-INF/jsp/itemList.jsp”);
mav.setViewName(“itemList”);
return mav;
}
运行并访问项目
新的访问地址:http://localhost:8080/item/itemList.action
演示完注释一下
3、设置固定的提交请求方式
(1)设置为只接收post请求
修改ItemController.java当中的updateItem方法
@RequestMapping(value=“updateItem”,method = RequestMethod.POST)
public String updateItem(Item item,Model model){
itemService.updateItem(item);
model.addAttribute(“item”, item);
model.addAttribute(“msg”, “修改商品信息成功”);
return “itemEdit”;
}
(2)设置为接收post和get请求
修改ItemController.java当中的updateItem方法
/**
-
修改商品
-
演示pojo参数绑定
-
@param item
-
@return
*/
@RequestMapping(value=“updateItem”,method = {RequestMethod.POST,RequestMethod.GET})
public String updateItem(Item item,Model model){
itemService.updateItem(item);
model.addAttribute(“item”, item);
model.addAttribute(“msg”, “修改商品信息成功”);
return “itemEdit”;
}
(3)在Tomcat的server.xml文件当中配置get请求的编码格式
1、返回void
(1)创建新页面
<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>
${ msg }
(2)在ItemController当中创建queryVoid方法
a、request响应用户请求
@RequestMapping(“queryVoid”)
public void queryVoid(HttpServletRequest request,HttpServletResponse response) throws Exception {
request.setAttribute(“msg”, “这个是request响应的消息”);
request.getRequestDispatcher(“/WEB-INF/jsp/msg.jsp”).forward(request, response);
}
运行并测试
http://localhost:8080/queryVoid.action
b、response响应用户请求
@RequestMapping(“queryVoid”)
public void queryVoid(HttpServletRequest request,HttpServletResponse response) throws Exception {
//request响应用户请求
/*
-
request.setAttribute(“msg”, “这个是request响应的消息”);
-
request.getRequestDispatcher(“/WEB-INF/jsp/msg.jsp”).forward(request,
-
response);
*/
//response的响应用户请求
response.sendRedirect(“/itemList.action”);
}
运行并测试http://localhost:8080/itemList.action
c、response打印消息
@RequestMapping(“queryVoid”)
public void queryVoid(HttpServletRequest request,HttpServletResponse response) throws Exception {
//request响应用户请求
/*
-
request.setAttribute(“msg”, “这个是request响应的消息”);
-
request.getRequestDispatcher(“/WEB-INF/jsp/msg.jsp”).forward(request,response);
*/
//response的响应用户请求
//response.sendRedirect(“/itemList.action”);
PrintWriter printwriter = response.getWriter();
printwriter.println(“response”);
}
http://localhost:8080/queryVoid.action
2、返回String
(一)SpringMVC请求转发
(1)修改ItemController类当中updateItem方法:
/**
-
修改商品
-
演示pojo参数绑定
-
@param item
-
@return
*/
@RequestMapping(value=“updateItem”,method = {RequestMethod.POST,RequestMethod.GET})
public String updateItem(Item item,Model model){
itemService.updateItem(item);
model.addAttribute(“item”, item);
model.addAttribute(“msg”, “修改商品信息成功”);
//return “itemEdit”;
return “forward:itemEdit.action”;
}
(2)修改itemList.jsp页面
点击提交修改信息
(二) SpringMVC重定向
(1)修改ItemController,设置对应更新方法的跳转到列表页面,当中的updateItem方法
/**
-
修改商品
-
演示pojo参数绑定
-
@param item
-
@return
*/
@RequestMapping(value=“updateItem”,method = {RequestMethod.POST,RequestMethod.GET})
public String updateItem(Item item,Model model){
itemService.updateItem(item);
model.addAttribute(“item”, item);
model.addAttribute(“msg”, “修改商品信息成功”);
//return “itemEdit”;
//return “forward:itemEdit.action”;
return “redirect:itemList.action”;
}
(2)运行测试并访问:http://localhost:8080/itemEdit.action
跳转成功
(三)方法返回值乱码问题
请求乱码问题{
提交的问题{
post乱码:过滤器解决;
get乱码:tomcat当中配置URIEncoding=“utf-8”
}
响应乱码{
获取getWriter之前:response.setCharacterEncoding(“utf-8”);
}
}
1、异常演示:运行时异常
(1)在ItemController当中queryVoid方法当中设置一个异常
int i = 1 / 0;
(2)运行项目测试该方法
http://localhost:8080/queryVoid.action
抛出异常
2、处理异常
思想:做一个全局异常处理器,处理所有没有处理过的运行时异常用于更友好的提示用户
(1)创建全局异常处理器
创建一个CustomerExecptionResolver类实现HandlerExceptionResolver接口
package com.itzheng.springmvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
/*
- 全局异常处理器
*/
public class CustomerExecptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object hanlder,
Exception ex) {
ModelAndView mav = new ModelAndView();
mav.addObject(“msg”,“系统发生异常,请联系管理员!”);
mav.setViewName(“msg”);
return mav;
}
}
(2)配置全局异常处理器
运行项目测试该方法
http://localhost:8080/queryVoid.action
3、更智能,更友好的提示,解决方案
(1)新建自定义异常类:MyException
package com.itzheng.springmvc.exception;
/*
总结
面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。
此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!
给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”
且除了单纯的刷题,也得需准备一本【JAVA进阶核心知识手册】:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。
403153219146.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NzU3MDM0,size_16,color_FFFFFF,t_70)
package com.itzheng.springmvc.exception;
/*
总结
面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。
此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!
给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”
[外链图片转存中…(img-z7xP0kLS-1715470177687)]
且除了单纯的刷题,也得需准备一本【JAVA进阶核心知识手册】:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。
[外链图片转存中…(img-AayBR4yV-1715470177687)]