2024年SpringMVC入门第二部分(1),java面试基础编程题

最后

现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

在这里插入图片描述

自定义类型对象的赋值流程描述,以及@SessionAttributes注解可能引发的异常

给自定义类型赋值,主要在于attrName的值,首先会把attrName作为key值去隐含模型中寻找key==attrName的键,然后将key对应的值进行赋值

在这里插入图片描述


举例1:在给Book book对象赋值前,不加@ModelAttribute注解,那么会将参数类型首字母小写,即Book—>book,去隐含模型中寻找对应的key值

@Controller

public class BookController {

@RequestMapping(“/book”)

public String ShowBook(Book book,Map<String,Object> map)

{

System.out.println(book);

return “Success”;

}

@ModelAttribute

void BookFromDao(Map<String,Object> map)

{

Book book=new Book(“大忽悠自传”,19);

System.out.println(“数据库中查到的图书信息:”+book);

map.put(“book”,book);//放入隐含模型中,key==book

}

}

在这里插入图片描述


举例2:通过@ModelAttribute(“haha”)来指定attrName的值

@Controller

public class BookController {

@RequestMapping(“/book”)

//告诉SpringMVC不要new这个book了,而是使用我刚才保存的book

//即用我刚才从数据库中查找出来的book

public String ShowBook(@ModelAttribute(“haha”) Book book,Map<String,Object> map)

{

System.out.println(book);

return “Success”;

}

@ModelAttribute

void BookFromDao(Map<String,Object> map)

{

Book book=new Book(“大忽悠自传”,19);

System.out.println(“数据库中查到的图书信息:”+book);

map.put(“haha”,book);//放入隐含模型中,key==haha

}

}

在这里插入图片描述


举例3:attrName=haha,隐含模型中只有key==book的值,那么会去session域中寻找,@SessionAttributes(value=“haha”),但是session中没有键为haha的值,这样会报异常

@SessionAttributes(“haha”)

@Controller

public class BookController {

@RequestMapping(“/book”)

//告诉SpringMVC不要new这个book了,而是使用我刚才保存的book

//即用我刚才从数据库中查找出来的book

public String ShowBook(@ModelAttribute(“haha”) Book book,Map<String,Object> map)

{

System.out.println(book);

return “Success”;

}

@ModelAttribute

void BookFromDao(Map<String,Object> map)

{

Book book=new Book(“大忽悠自传”,19);

System.out.println(“数据库中查到的图书信息:”+book);

map.put(“book”,book);//放入隐含模型中,key==haha

}

}

在这里插入图片描述


举例5:@ModelAttribute会把方法运行后的返回值也放入隐含模型中,key就是返回值类型小写

@Controller

public class BookController {

@RequestMapping(“/book”)

public String ShowBook(Book book)

{

System.out.println(book);

return “Success”;

}

@ModelAttribute

Book BookFromDao()

{

Book book=new Book(“大忽悠自传”,19);

System.out.println(“数据库中查到的图书信息:”+book);

return book;

}

}

在这里插入图片描述


举例6:把返回值放入隐含模型,但是不使用默认的返回值小写作为key,而是自己指定

@Controller

public class BookController {

@RequestMapping(“/book”)

public String ShowBook(@ModelAttribute(“haha”) Book book)

{

System.out.println(book);

return “Success”;

}

@ModelAttribute(“haha”)

Book BookFromDao()

{

Book book=new Book(“大忽悠自传”,19);

System.out.println(“数据库中查到的图书信息:”+book);

return book;

}

}

在这里插入图片描述



举例7: 隐含模型中找不到对应的key,session中也找不到,那么会自动创建一个新对象

@Controller

public class BookController {

@RequestMapping(“/book”)

public String ShowBook(@ModelAttribute(“haha”) Book book)

{

System.out.println(book);

return “Success”;

}

@ModelAttribute

Book BookFromDao()

{

Book book=new Book(“大忽悠自传”,19);

System.out.println(“数据库中查到的图书信息:”+book);

return book;

}

}

在这里插入图片描述


@ModelAttribute的总结

在这里插入图片描述

@SessionAttributes的总结

在这里插入图片描述

第二点是如果隐含模型中没有,session中就必须有,不然抛出异常


视图和视图解析器再分析

==========================================================================

有前缀的返回值独立解析


注意:forward转发到一个页面, /Fail.jsp转发到当前项目下的Fail.jsp. 一定要加上/,如果不加上/就是相对路径,容易出问题

forward前缀的转发,不会由我们配置的视图解析器进行拼串

@SessionAttributes(types = {String.class,Integer.class})

@Controller

public class userController {

@RequestMapping(“/hello”)

public String show()

{

return “forward:/Fail.jsp”;

}

}

Fail.jsp:

<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

失败

Lose!!!

在这里插入图片描述


多次派发


@Controller

public class userController {

@RequestMapping(“/hello01”)

public String show()

{

return “forward:/Fail.jsp”;

}

@RequestMapping(“/hello02”)

public String show1()

{

return “forward:/hello01”;

}

}

在这里插入图片描述


请求转发地址使用相对路径


在这里插入图片描述


Redirect指定重定向到页面

===============================================================================

在这里插入图片描述

多次重定向


@Controller

public class userController {

@RequestMapping(“/hello01”)

public String show()

{

return “redirect:/Fail.jsp”;

}

@RequestMapping(“/hello02”)

public String show1()

{

return “redirect:/hello01”;

}

}

在这里插入图片描述

注意:有前缀的转发和重定向操作,配置的视图解析器就不会进行拼串


视图解析器流程简单一句话总结原理:

在这里插入图片描述


jstlView支持便捷的国际化功能—页面中英文切换


1.导入jstl的依赖和standard的依赖

javax.servlet

jstl

1.2

taglibs

standard

1.1.2

2.导包如果导入了jstl,会自动创建一个jstlView,可以快速方便的支持国际化功能

也可以通过在springMVC.xml文件中配置,指定其创建jstlView

回顾javaweb国际化步骤

在这里插入图片描述

国际化资源文件的命名规范如下:

在这里插入图片描述


步骤1: 让spring管理国际化资源


步骤2:直接去页面使用fmt:message


新建两个资源文件:i18n_cn_CN.properties 和 i18n_un_US.properties

title=First War Of The World

zhangHao=LoginNumber

password=Password

loginBtn=Submit

title=战地1

zhangHao=账号

password=密码

loginBtn=提交

在springmvc配置文件中加入bean

在这里插入图片描述

springMVC.xml:

<mvc:annotation-driven />

<context:component-scan base-package=“com.SpringMvc”/>

在jsp中加上标签以及替换相关需要使用的字符

login.jsp:

<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>

<fmt:message key=“title”/>

<fmt:message key=“zhangHao”/>:

<fmt:message key=“password”/> :


index.jsp

<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

跳转登录页面

跳转到登录页面

在这里插入图片描述


国际化具体实现可以看下面这篇文章,链接在下面

SpringMVC国际化实现(乱码解决)idea


.jsp页面一定要过SpringMVC的视图解析流程,才会创建一个jstlView来帮你快速国际化

不能写forward等前缀,因为代理前缀,创建的view不带国际化功能

在这里插入图片描述

只有默认创建的view才有支持国际化功能

在这里插入图片描述


发送一个请求,来到一个页面


在这里插入图片描述

SpringMVC.xml :

<mvc:view-controller path=“/toLoginPage” view-name=“login”/>

mvc:annotation-driven/

上面这段代码,可以替代上面的那个类完成的功能,但是还需要加上注解驱动模式,不然其他依赖注解完成请求映射调整的就不好使了

开启mvc注解驱动模式,需要导入mvc的命名空间

在这里插入图片描述


自定义视图和自定义视图解析器


在这里插入图片描述

1.编写自定义的视图解析器和视图实现类

自定义视图解析器需要实现视图解析器接口和Order接口,Order接口是为了让自定义视图解析器先运行,否则会由默认视图解析器拦截,进行拼串

视图解析器类:

//自定义视图解析器

public class DhyViewResolver implements ViewResolver, Ordered {

private int order=0;

@Override

public View resolveViewName(String viewName, Locale locale) throws Exception {

//根据视图名返回视图对象

if(viewName.startsWith(“dhy:”))

{

//返回我们的一个视图解析器对象

return new MyView();

}

else

{

//该视图解析器解析不了,就返回null,让下一个视图解析器尝试去解析

return null;

}

}

public int getOrder() {

return order;

}

//改变视图解析器的优先级

public void setOrder(int order) {

this.order = order;

}

}

视图实现类:

//自定义视图对象

public class MyView implements View {

//返回的内容数据类型

@Override

public String getContentType() {

return “text/html”;

}

@Override

public void render(Map<String, ?> map, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {

System.out.println(“之前保存的数据:”+map);

//设置响应的内容类型

httpServletResponse.setContentType(“text/html”);

List video = (List) map.get(“video”);

for(String s:video)

{

httpServletResponse.getWriter().write(s+“
”);

}

List img = (List) map.get(“img”);

for(String s:img)

{

httpServletResponse.getWriter().write(s+“
”);

}

httpServletResponse.getWriter().write(“

精彩内容马上上映…

”);

}

}

2.视图解析器必须放置IOC容器中

3.测试类

MyViewResovlerController类:

/自定义视图解析器和视图对象/

@Controller

public class MyViewResovlerController

{

@RequestMapping(“/handle”)

public String handle(Model model)

{

List VName = new ArrayList<>();

List imgName = new ArrayList<>();

VName.add(“大忽悠”);

VName.add(“小朋友”);

imgName.add(“大忽悠和小朋友”);

model.addAttribute(“video”,VName);

model.addAttribute(“img”,imgName);

//以dhy:前缀访问的才能跳转到picture页面

return “dhy:/WEB-INF/pages/picture.jsp”;

}

}

总结:绘上一张Kakfa架构思维大纲脑图(xmind)

image

其实关于Kafka,能问的问题实在是太多了,扒了几天,最终筛选出44问:基础篇17问、进阶篇15问、高级篇12问,个个直戳痛点,不知道如果你不着急看答案,又能答出几个呢?

若是对Kafka的知识还回忆不起来,不妨先看我手绘的知识总结脑图(xmind不能上传,文章里用的是图片版)进行整体架构的梳理

梳理了知识,刷完了面试,如若你还想进一步的深入学习解读kafka以及源码,那么接下来的这份《手写“kafka”》将会是个不错的选择。

  • Kafka入门

  • 为什么选择Kafka

  • Kafka的安装、管理和配置

  • Kafka的集群

  • 第一个Kafka程序

  • Kafka的生产者

  • Kafka的消费者

  • 深入理解Kafka

  • 可靠的数据传递

  • Spring和Kafka的整合

  • SpringBoot和Kafka的整合

  • Kafka实战之削峰填谷

  • 数据管道和流式处理(了解即可)

image

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

odel)

{

List VName = new ArrayList<>();

List imgName = new ArrayList<>();

VName.add(“大忽悠”);

VName.add(“小朋友”);

imgName.add(“大忽悠和小朋友”);

model.addAttribute(“video”,VName);

model.addAttribute(“img”,imgName);

//以dhy:前缀访问的才能跳转到picture页面

return “dhy:/WEB-INF/pages/picture.jsp”;

}

}

总结:绘上一张Kakfa架构思维大纲脑图(xmind)

[外链图片转存中…(img-JI5DTmgq-1715009629602)]

其实关于Kafka,能问的问题实在是太多了,扒了几天,最终筛选出44问:基础篇17问、进阶篇15问、高级篇12问,个个直戳痛点,不知道如果你不着急看答案,又能答出几个呢?

若是对Kafka的知识还回忆不起来,不妨先看我手绘的知识总结脑图(xmind不能上传,文章里用的是图片版)进行整体架构的梳理

梳理了知识,刷完了面试,如若你还想进一步的深入学习解读kafka以及源码,那么接下来的这份《手写“kafka”》将会是个不错的选择。

  • Kafka入门

  • 为什么选择Kafka

  • Kafka的安装、管理和配置

  • Kafka的集群

  • 第一个Kafka程序

  • Kafka的生产者

  • Kafka的消费者

  • 深入理解Kafka

  • 可靠的数据传递

  • Spring和Kafka的整合

  • SpringBoot和Kafka的整合

  • Kafka实战之削峰填谷

  • 数据管道和流式处理(了解即可)

[外链图片转存中…(img-McPODBVZ-1715009629602)]

[外链图片转存中…(img-enzPS1Qk-1715009629602)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值