SpringMVC基础篇(三)

news/2024/11/15 5:30:56/

文章目录

    • 1.SpringMVC映射请求数据
        • 1.获取请求头信息
          • 1.VoterHandler.java
          • 2.request_parameter.jsp
          • 3.结果展示
        • 2.自动封装javabean
          • 1.需求分析
          • 2.应用实例
            • 1.Master.java
            • 2.Pet.java
            • 3.后端接口
            • 4.结果展示
          • 3.底层机制
        • 3.调用servlet-api
          • 1.基本说明
          • 2.代码实例
            • 1.接口
            • 2.结果展示
          • 3.注意事项
            • 案例演示
    • 2.模型数据(放入request)
        • 1.需求分析
        • 2.模型数据—默认机制
          • 1.接口
          • 2.getmaster.jsp
          • 3.postman测试
        • 3.模型数据—HttpServletRequest API
          • 1.接口
          • 2.postman测试
        • 4.模型数据—Map<String, Object>
          • 1.接口
          • 2.getmaster.jsp
          • 3.postman测试
          • 4.注意事项
        • 5.模型数据—ModelAndView
          • 1.接口
          • 2.postman测试
          • 3.注意事项
        • 6.模型数据(放入session)
          • 1.接口
          • 2.getsession.jsp
          • 3.postman测试
        • 7.@ModelAttribute注解配置所有方法前置通知
          • 1.代码
          • 2.postman测试

1.SpringMVC映射请求数据

1.获取请求头信息
java_6">1.VoterHandler.java
java">package com.sun.web.requetstparam;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;/*** @author 孙显圣* @version 1.0*/
@RequestMapping("/request")
@Controller
public class VoterHandler {//获取请求头信息@RequestMapping("/getheader")public String getHeader(@RequestHeader("Accept-Encoding") String ae, @RequestHeader("Host") String host) {System.out.println("Accept-Encoding:" + ae);System.out.println("host:" + host);return "/success";}
}
2.request_parameter.jsp
<%--Date: 2024/2/25Time: 21:04User: 孙显圣Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h3><a href="request/getheader">点击获取请求头信息</a></h3></body>
</html>
3.结果展示

image-20240225212032818

image-20240225212042843

image-20240225211928845

javabean_63">2.自动封装javabean
1.需求分析

image-20240225212231900

2.应用实例
java_71">1.Master.java
java">package com.sun.web.entity;/*** @author 孙显圣* @version 1.0*/
public class Master {private Integer id;private String name;private Pet pet; //属性中包含一个对象public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Pet getPet() {return pet;}public void setPet(Pet pet) {this.pet = pet;}@Overridepublic String toString() {return "Master{" +"id=" + id +", name='" + name + '\'' +", pet=" + pet +'}';}
}
java_121">2.Pet.java
java">package com.sun.web.entity;import javafx.geometry.Orientation;/*** @author 孙显圣* @version 1.0*/
public class Pet {private Integer id;private String name;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Pet{" +"id=" + id +", name='" + name + '\'' +'}';}
}
3.后端接口
java">    /*** 将请求信息自动封装到master中* 1.如果是普通属性,则名称必须与其对应* 2.如果是对象属性,则使用对象属性.属性的形式来封装* @param master* @return*/@RequestMapping("/setmaster")public String setMaster(Master master) {System.out.println(master);return "success";}
4.结果展示

image-20240225221332181

image-20240225221338611

3.底层机制
  • Spring MVC直到要将参数封装到Master中,则反射创建Master对象
  • 基本属性封装
    • 读取请求信息,得到id和name两个属性的值
    • 调用Master对象的setter方法为其赋值
  • 嵌套属性封装
    • 读取请求信息,得到pet.id和pet.name这两个值
    • 首先检测刚才反射创建的Master实例中是否有Pet实例,如果没有,则反射创建一个Pet实例
    • 调用Pet的setter方法先封装id
    • 再次检测Master实例中是否有Pet实例,发现已经存在,则直接调用setName方法封装name
    • 最后掉用setPet的方法封装到Master实例中
3.调用servlet-api
1.基本说明

image-20240225222616318

2.代码实例
1.接口
java">    @RequestMapping("/servlet")public String servlet(HttpServletRequest request, HttpServletResponse response) {String username = request.getParameter("username");String password = request.getParameter("password");System.out.println("username:" + username + " password:" + password) ;return "success";}
2.结果展示

image-20240225223103534

image-20240225223114538

3.注意事项

image-20240225223755990

案例演示
java">    @RequestMapping("/session")public String session(HttpServletRequest request, HttpSession session) {//使用传入参数形式获取的session和使用request获取的session是同一个sessionSystem.out.println(session);HttpSession session1 = request.getSession();System.out.println(session1);return "success";}

image-20240225223831005

image-20240225223840086

2.模型数据(放入request)

1.需求分析

image-20240226084147361

2.模型数据—默认机制
1.接口
java">    /*** 模型数据的默认机制:得到请求之后,自动将请求的内容封装到master中,名字是类型名首字母小写* 将”getmaster”封装到request请求中* 将”getmaster”请求转发给getmaster.jsp文件* @param master* @return*/@RequestMapping("/m01")public String master01(Master master) {return "getmaster";}
2.getmaster.jsp
<%@ page import="org.springframework.web.context.request.RequestScope" %><%--Date: 2024/2/26Time: 11:56User: 孙显圣Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>id:${requestScope.master.id}<br>name:${requestScope.master.name}<br>pet.id:${requestScope.master.pet.id}<br>pet.name:${requestScope.master.pet.name}
</body>
</html>
3.postman测试

image-20240226120730320

3.模型数据—HttpServletRequest API
1.接口
java">    /*** 使用原生的servlet api来进行操作,将请求转发到getmaster页面** @param master* @param request* @return*/@RequestMapping("/m02")public String master02(Master master, HttpServletRequest request) {request.setAttribute("master", master);return "getmaster";}
2.postman测试

image-20240226122202260

4.模型数据—Map<String, Object>
1.接口
java">    /*** 使用Map<String, Object> map来将信息放到request域中* 原理分析:在将信息封装到master之后,先将master放到request域中,然后扫描map,将这里面的信息也放到request域中* 请求转发* @param master* @param map* @return*/@RequestMapping("/m03")public String master03(Master master, Map<String, Object> map) {map.put("address", "127.0.0.1"); //给map赋值return "getmaster";}
2.getmaster.jsp
<%@ page import="org.springframework.web.context.request.RequestScope" %><%--Date: 2024/2/26Time: 11:56User: 孙显圣Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
address:${requestScope.address}
id:${requestScope.master.id}<br>
name:${requestScope.master.name}<br>
pet.id:${requestScope.master.pet.id}<br>
pet.name:${requestScope.master.pet.name}
</body>
</html>
3.postman测试

image-20240226123738297

4.注意事项

image-20240226124205667

5.模型数据—ModelAndView
1.接口
java">    /*** 使用ModelAndView来将信息封装到request域中,并且返回ModelAndView对象,到视图解析器* 原理分析:* 1.首先将请求的信息封装到master中* 2.然后将这个master放到request域中* 3.扫描modelandview,将信息也封装到request域中* 4.返回modelandview并请求转发给视图解析器* @param master* @return*/@RequestMapping("/m04")public ModelAndView modelandview(Master master) {ModelAndView modelAndView = new ModelAndView();//添加对象modelAndView.addObject("address", "127.0.0.1");//设置视图名字modelAndView.setViewName("getmaster");return modelAndView;}
2.postman测试

image-20240226130032732

3.注意事项

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6.模型数据(放入session)
1.接口
java">    @RequestMapping("/m05")public String getsession(Master master, HttpSession session){session.setAttribute("address", "122222");session.setAttribute("name", "sun");return "getsession";}
2.getsession.jsp
<%--Date: 2024/2/26Time: 13:38User: 孙显圣Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
name:${sessionScope.name}<br>
address:${sessionScope.address}</body>
</html>
3.postman测试

image-20240226134314888

7.@ModelAttribute注解配置所有方法前置通知
1.代码
java">    //配置所有方法的前置通知@ModelAttributepublic void prepareModel() {System.out.println("准备工作完毕");}
2.postman测试

image-20240226135039409

image-20240226135046832


http://www.ppmy.cn/news/1443538.html

相关文章

Vue中使用iconfont-阿里巴巴矢量图标库

一、简介 阿里巴巴矢量图标库&#xff08;Iconfont&#xff09;是一个由阿里巴巴提供的矢量图标库&#xff0c;包含了大量的矢量图标&#xff0c;可以供设计师和开发者在线浏览和下载使用。这个库的图标都是由用户上传和分享的&#xff0c;因此种类非常丰富&#xff0c;几乎涵…

【ChatGPT】AI评论家,适合点评论文和文章的Prompt模

原文&#xff1a;【ChatGPT】AI评论家&#xff0c;适合点评论文和文章的Prompt模板 - 知乎 总结了一个提示词模板提供给大家&#xff0c;适合的场景&#xff1a; 1. 家长辅导孩子写作 2. 老师给学生的作文打分 3. 业余评论家点评文章 4. 小编审稿&#xff08;可以早下班了&…

软件工程物联网方向嵌入式系统复习笔记--嵌入式系统基础

1 嵌入式系统基础 1.1 嵌入式系统基础 1.1.1 嵌入式系统概念 嵌入式系统一般定义 是指以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 就像一般的计算机系统包括软件和硬件一样&#xff0c;…

线上剧本杀小程序:创新玩法下带来的市场活力

近几年来&#xff0c;剧本杀作为一种新型的游戏娱乐模式&#xff0c;深受年轻人的喜欢&#xff0c;成为了当下年轻人娱乐休闲的主要方式之一。剧本杀行业在经历过一段时间的“野蛮生长”后&#xff0c;游戏内容和服务得到的升级发展&#xff0c;游戏的趣味性和体验感也逐渐增强…

耐酸碱腐蚀PFA冷凝回流装置进口透明聚四氟材质PFA梨形漏斗特氟龙圆底烧瓶

PFA分液漏斗&#xff1a;也叫特氟龙分液漏斗、特氟龙梨型分液漏斗。 规格参考&#xff1a;125ml、250ml、500ml、1000ml 其主要特性有&#xff1a; 1.内壁对溶剂无粘贴性和吸附&#xff0c;可完全排空&#xff0c;分界面清晰可见&#xff1b; 2.密封性好&#xff0c;可防止…

Maven基础篇2

1.依赖范围 只要是jar默认情况下可以在任何地方使用&#xff0c;可以通过scope标签进行设定其范围 scope的不同参数以及指定范围 关于servlet-api不参与打包&#xff0c;原因服务器上tomcat也有servlet-api如果版本不同会起冲突&#xff1b;因此需要使用scope写provided来进…

谁在钉钉上做AI Agent?

在这个中国最大的TO B流量池里&#xff0c;有最适合AI Agent生长的“原生”环境&#xff0c;有足够有边界的平台设计&#xff0c;也更有无数真实可见的AI产业需求&#xff0c;和已经在全面开放的数据和TO B服务流程&#xff0c;这些串联到一起也恰构成着AI在中国产业落地的最丰…

搜索引擎的发展历史

搜索引擎的发展历史可以追溯到20世纪90年代初&#xff0c;随着互联网的快速发展和信息量的急剧增加&#xff0c;人们开始感受到了获取和管理信息的挑战。以下是搜索引擎发展的主要阶段和关键事件&#xff1a; 早期搜索引擎&#xff08;1990s&#xff09;&#xff1a; 1990年&am…