Java最全SpringMVC入门第二部分,2024百度Java岗面试真题收录解析

最后

金三银四到了,送上一个小福利!

image.png

image.png

专题+大厂.jpg

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

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

@Controller

public class userController {

@RequestMapping(“/hello”)

public String show(Map<String,Object> map)

{

map.put(“msg”,“你好”);

return “Success”;

}

}

model方式:

@Controller

public class userController {

@RequestMapping(“/hello”)

public String show(Model model)

{

model.addAttribute(“msg”,“你好”);

return “Success”;

}

}

modelMap方式:

@Controller

public class userController {

@RequestMapping(“/hello”)

public String show(ModelMap model)

{

model.addAttribute(“msg”,“你好”);

return “Success”;

}

}

index.jsp:

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

Success

request域: ${requestScope.msg}

在这里插入图片描述


map,modelmap,model继承关系图

在这里插入图片描述

给这些参数里面保存的所有数据最终都会放在请求域中,可以在页面获取

Map,model,modelMap最终都是BindingAwareModelMap在工作,相当于给BindingAwareModelMap中保存的数据都会被放在请求域中


方法返回值为ModelAndView


在这里插入图片描述

@RequestMapping(“/dhy”)

public ModelAndView test02()

{

//之前的返回值我们就叫视图名:视图名视图解析器会帮我们最终拼串得到页面的真实地址

//ModelAndView mv=new ModelAndView(“Success”);

ModelAndView mv=new ModelAndView();

mv.setViewName(“Success”);

mv.addObject(“msg”,“你好”);

return mv;

}

在这里插入图片描述


给session域中带数据。SpringMVC中提供了一种临时给Session域中保存数据的方式


使用一个注解@SessionAttributes(只能标注在类上)

在这里插入图片描述

//可以使用数组形式,key是msg,msg1,msg2的都会放入session域中

@SessionAttributes(value = {“msg”,“msg1”,“msg2”})

@Controller

public class userController {

@RequestMapping(“/hello”)

public String show(HttpSession session, HttpServletRequest httpServlet)

{

session.setAttribute(“msg1”,“你好session”);

httpServlet.setAttribute(“msg2”,“你好erquest”);

return “Success”;

}

@RequestMapping(“/dhy”)

public ModelAndView test02()

{

//之前的返回值我们就叫视图名:视图名视图解析器会帮我们最终拼串得到页面的真实地址

//ModelAndView mv=new ModelAndView(“Success”);

ModelAndView mv=new ModelAndView();

mv.setViewName(“Success”);

mv.addObject(“msg”,“你好”);

return mv;

}

}

在这里插入图片描述

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

@Controller

public class userController {

@RequestMapping(“/hello”)

public String show(HttpSession session, HttpServletRequest httpServlet)

{

session.setAttribute(“msg1”,“你好session”);

httpServlet.setAttribute(“msg2”,“你好erquest”);

return “Success”;

}

@RequestMapping(“/dhy”)

public ModelAndView test02()

{

//之前的返回值我们就叫视图名:视图名视图解析器会帮我们最终拼串得到页面的真实地址

//ModelAndView mv=new ModelAndView(“Success”);

ModelAndView mv=new ModelAndView();

mv.setViewName(“Success”);

mv.addObject(“msg”,“你好”);

return mv;

}

}

后来推荐@SessionAttributes就别用了,可能会引发异常,给session中存放数据建议使用原生API

@ModelAttribute注解


问题演示

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

小朋友

价格:

@Controller

public class BookController {

@RequestMapping(“/book”)

public String ShowBook(Book book)

{

System.out.println(book);

return “Success”;

}

}

这里实际上是springMVC创建了一个Book对象,然后将对应的属性通过set方法赋值给该对象

如果我们要完成的操作是对数据库中保存的一条图书记录进行全更新,那么使用这种方法时,就会有问题

例如:我们在页面对图书进行修改时,无法修改图书的名字,因此new出来的Book对象的name值一定为null,如果把该对象放入数据库中,那么book的名字就会变成null,覆盖掉了原本图书的名字


解决方法----@ModelAttribute的使用方式之一

如果是使用从数据库中拿出来的准备好的对象来封装请求参数,那么如果请求参数中不包括对象的全部变量值,那么剩余变量的值就依旧采用数据库中拿出来的对象自身的值,这样就不会造成为null的现象

在这里插入图片描述

在这里插入图片描述

@Controller

public class BookController {

@RequestMapping(“/book”)

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

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

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

{

System.out.println(book);

return “Success”;

}

@ModelAttribute

void BookFromDao(Map<String,Object> map)

{

//模拟从数据库查出来的book

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

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

map.put(“book”,book);

}

}

index.jsp

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

小朋友

价格:

在这里插入图片描述

在这里插入图片描述

如果由springmvc来New一个新的book对象,那么这里的name就为null


@ModelAttribute的原理


在这里插入图片描述

在这里插入图片描述


@ModelAttribute标注在方法上面的另外一个作用


在这里插入图片描述


SpringMVC确定POJO自定义对象值的三步


在这里插入图片描述

自定义类型对象的赋值流程描述,以及@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

最后

一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。

这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。

image

请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析

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

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

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


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

javax.servlet

jstl

1.2

taglibs

standard

1.1.2

最后

一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。

这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。

[外链图片转存中…(img-95DXS9Va-1715326824037)]

请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析

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

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

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值