如何给网站流量来源做标记通过在网址后边加问号?/社群营销活动策划方案

如何给网站流量来源做标记通过在网址后边加问号?,社群营销活动策划方案,做电影网站免责声明有用吗,seo运营是什么找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 初始JavaEE篇 —— Spring Web MVC入门(上) 在上篇文章中,我们学习了一些注解的使用、Postman模…

 找往期文章包括但不限于本期文章中不懂的知识点:

个人主页:我要学编程程(ಥ_ಥ)-CSDN博客

所属专栏:JavaEE

初始JavaEE篇 —— Spring Web MVC入门(上)

在上篇文章中,我们学习了一些注解的使用、Postman模拟前端传递数据的使用以及如何在后端接受并处理前端的数据。接下来我们就需要学习响应的返回,将前端的数据处理完成之后,就需要返回数据给前端。

目录

返回响应数据

返回静态页面

返回普通数据 

返回HTML代码片段

返回JSON数据 

设置状态码 

设置Header


返回响应数据

Http请求的响应结果可以是数据,也可以是静态页面,也可以针对响应设置状态码、Header信息等。

返回静态页面

返回静态页面需要学习一个新的注解:@Controller,这个注解与@RestController 有所不同。@RestController 表示该控制器的所有方法都会默认返回 JSON 或其他对象,而不是解析和返回视图页面。而@Controller 就是按照页面来解析的。

前端代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Index</title>
</head>
<body><h1>Hello World</h1>
</body>
</html>

后端代码:

@RequestMapping("/Response")
@Controller
public class ResponseController {// 返回静态页面@RequestMapping("/index")public String index() {return "/index.html";}
}

这里的 "/" 代指的是 src/main/resource/static 目录下。可能会存在多个目录,那时就需要将完整路径显示出来。

访问的结果:

但如果我们使用@RestController注解的话,就只会返回一个字符串。这就是两者在返回数据时,会通过注解的不同,从而返回不同的资源。@Controller注解只会返回视图,而@ResponseBody注解会返回JSON数据或对象。 

注意:

1、前端代码在Spring项目中,是存放在 src/main/resource/static 目录下的。

2、@RestController = @Controller + @ResponseBody,也就是说@RestCont注解是两者的结合体,我们也可以通过@RestController的源码来观察:

注解应用类是一个枚举类,源代码如下(了解即可):

public enum ElementType {/** Class, interface (including annotation interface), enum, or record* declaration */TYPE,/** Field declaration (includes enum constants) */FIELD,/** Method declaration */METHOD,/** Formal parameter declaration */PARAMETER,/** Constructor declaration */CONSTRUCTOR,/** Local variable declaration */LOCAL_VARIABLE,/** Annotation interface declaration (Formerly known as an annotation type.) */ANNOTATION_TYPE,/** Package declaration */PACKAGE,/*** Type parameter declaration** @since 1.8*/TYPE_PARAMETER,/*** Use of a type** @since 1.8*/TYPE_USE,/*** Module declaration.** @since 9*/MODULE,/*** Record component** @jls 8.10.3 Record Members* @jls 9.7.4 Where Annotations May Appear** @since 16*/RECORD_COMPONENT;
}

注解的生命周期有三个阶段:源码、字节码(编译)、运行。

public enum RetentionPolicy {/*** Annotations are to be discarded by the compiler.*/SOURCE, // 只存在于源码阶段/*** Annotations are to be recorded in the class file by the compiler* but need not be retained by the VM at run time.  This is the default* behavior.*/CLASS, // 既存在于源码,也存在于字节码(编译)阶段/*** Annotations are to be recorded in the class file by the compiler and* retained by the VM at run time, so they may be read reflectively.** @see java.lang.reflect.AnnotatedElement*/RUNTIME // 既存在于源码阶段,也存在于字节码阶段,还存在与运行时
}

返回普通数据 

我们前面学习请求时,返回的响应都是字符串数据,使用的注解是@RestController,这里就包含了@ResponseBody 注解,因而可以返回数据。

如果我们现在在之前的代码的基础上,加上一个返回字符串数据的代码会成功返回吗?

    @RequestMapping("/login")public String login(String userName, String password) {return "服务器异常,请稍后重试~";}

我们会发现,根本访问不了, 直接告诉我们资源不存在。因为这里的注解是@Controller说明是需要返回的是视图,那么Spring就会去扫描视图,但是最终却不存在这个视图,即404。

解决方法是在原本的方法前面加上@ResponseBody注解,这样最终就是@RestController注解了。

    @ResponseBody@RequestMapping("/login")public String login(String userName, String password) {return "服务器异常,请稍后重试~";}

@ResponseBody既是类注解,又是方法注解。如果作用在类上,表示该类的所有方法,返回的都是数据,如果作用在方法上,表示该方法返回的是数据。

返回HTML代码片段

后端的代码中,如果带有HTML代码片段就会被浏览器解析出来,但我们不想要浏览器解析,该怎么做呢?

    @ResponseBody@RequestMapping("/returnHtml")public String returnHtml() {return "<h1>Hello World</h1>";}

 上述代码在浏览器中访问就会被解析成下面这样:

之所以将HTML标签解析成具体可视化页面,是因为响应数据的返回格式是:text/html,所以浏览器就会解析HTML标签。那如果我们将返回数据返回设置成其他的数据是否就可以让浏览器不再按照HTML标签来解析呢?我们可以使用fiddler对Http请求进行抓包处理。下图是修改之前的结果:

修改之后的结果:

代码:

@ResponseBody
// produces-设置方法返回的数据类型或内容类型
@RequestMapping(value = "/returnHtml",produces = "text/plain")
public String returnHtml(HttpServletResponse response) {return "<h1>Hello World</h1>";
}

浏览器的结果: 

我们想要设置成什么类型,可以直接在搜索引擎上去找或者问AI即可。 

返回JSON数据 

我们前面已经学习了,后端在传输对象时,都是Spring框架使用Jackson将对象序列化为JSON数据从而进行传输。

    @ResponseBody@RequestMapping("/returnJSON")public UserInfo returnJSON() {return new UserInfo();}

设置状态码 

SpringMVC会根据我们方法的返回结果自动设置响应状态码,程序员也可以手动指定状态码。通过SpringMVC的内置对象HttpServletResponse提供的方法来进行设置。

    @ResponseBody@RequestMapping("/setStatus")public String setStatus(HttpServletResponse response) {response.setStatus(500);return "服务器一切正常,但是就是返回500!嘿嘿~";}

虽然状态码被设置成了非正常的情况,但是响应依旧是正常的,即状态码不会影响正常响应结果。 

设置Header

Http响应报头也会向客户端传递一些附加信息,比如:服务程序的名称,请求的资源,已移动到新地址等,如:Content-Type等信息。这些信息通过 @RequestMapping 注解的属性来实现。即设置Header信息都是通过@RequestMapping注解的属性来实现的。
先来看@RequestMapping的源码: 

@Target({ElementType.TYPE, ElementType.METHOD}) // 类注解、方法注解
@Retention(RetentionPolicy.RUNTIME) // 源码、字节码、运行阶段皆存在
@Documented
@Mapping
@Reflective(ControllerMappingReflectiveProcessor.class)
public @interface RequestMapping {// 用来指定映射的名称(例如,"/r1"等)String name() default "";// value 和 path 都是指定映射的URL@AliasFor("path")String[] value() default {};@AliasFor("value")String[] path() default {};// 指定请求的类型RequestMethod[] method() default {};// 指定请求中必须包含某些参数值(只有包含时,才处理)String[] params() default {};// 用来指定请求中的头部信息(只有包含指定信息时,才处理)String[] headers() default {};// 用来指定请求的 Content-TypeString[] consumes() default {};// 用来指定方法返回的 Content-TypeString[] produces() default {};}

 注意:name 和 value 区别:

@RequestMapping(name = "myMapping", value = "/api/user")
public String getUser() {return "user";
}

上述代码中,name用作映射的标识符,通常用于生成文档、日志或调试。value是实际请求的URL。在开发中,我们一般不会去使用name属性。

通过设置 produces 属性的值,来设置相应的报头Content-Type:

    @ResponseBody@RequestMapping(value = "/setContentType",produces = "application/json")public String setContentType() {return "{\"name\": \"zhangsan\"}";}

上述代码是将响应报头的Content-Type设置成JSON数据,这样最终返回的响应数据就会按照与之对应的数据来解析。

注意:在Java中," 是属于 特殊字符,所以需要使用反斜杠(\)进行转义。正常的JSON数据是下面这样的:

{"name": "zhangsan"}

经过转义之后的结果就是下面这样(在 " 前面加上 \ 即可):

{\"name\": \"zhangsan\"}

除了可以设置原本的属性之外,还可以手动添加新的属性到Header中:

    @ResponseBody@RequestMapping("setHeader")public String setHeader(HttpServletResponse response) {response.setHeader("name", "zhangsan");return "header设置成功";}

好啦!本期 初始JavaEE篇 —— Spring Web MVC入门(下)的学习之旅 就到此结束啦!我们下一期再一起学习吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/69945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:线程的互斥与同步

一、买票的线程安全 大部分情况&#xff0c;线程使用的数据都是局部变量&#xff0c;变量的地址空间在线程栈空间内&#xff0c;这种情况&#xff0c;变量归属单个线程&#xff0c;其他线程无法获得这种变量。 但有时候&#xff0c;很多变量都需要在线程间共享&#xff0c;这样…

ESP学习-1(MicroPython VSCode开发环境搭建)

下载ESP8266固件&#xff1a;https://micropython.org/download/ESP8266_GENERIC/win电脑&#xff1a;pip install esptools python.exe -m pip install --upgrade pip esptooo.py --port COM5 erase_flash //清除之前的固件 esptool --port COM5 --baud 115200 write_fla…

Agents Go Deep 智能体深入探索

Agents Go Deep 智能体深入探索 核心事件 OpenAI发布了一款先进的智能体“深度研究”&#xff0c;它能借助网络搜索和推理生成研究报告。 最新进展 功能特性&#xff1a;该智能体依据数百个在线资源生成详细报告&#xff0c;目前仅支持文本输出&#xff0c;不过很快会增加对图…

【ubuntu24.04】 强制重启导致大模型的磁盘挂载出错

挂载NTFS文件系统出错 各种模型放在了这个机械硬盘上&#xff0c;虽然速度慢&#xff0c;但是好在容量大。大模型在工作&#xff0c;但是程序看起来有问题&#xff0c;导致系统卡死了&#xff0c;然后我重启了&#xff0c;然后报错&#xff1a;wrong fs type bad option &…

1.14学习总结

日常刷题单 刷了题目后&#xff0c;对于排序方法更加熟练&#xff0c;手搓代码的速度也得到了提高。 感觉字符串还不熟练&#xff0c;高精度更是云里雾里&#xff0c;上升空间极大。 同时看见今晚有个入门难度的测试&#xff0c;去练了练手&#xff0c;想看看自己是什么成分&…

vscode环境搭建

目录 一、安装VSCode 二、安装Python 三、安装Anaconda&#xff08;可选&#xff0c;但推荐&#xff09; 四、安装深度学习相关库 五、配置VSCode 六、 结果可视化 一、安装VSCode 访问官网下载&#xff1a;从VSCode官方网站下载适合你操作系统的安装包。安装&#xff1a;运行安…

自定义解的使用,反射,代理模式

文章目录 自定义注解反射代理模式、静态代理动态代理 自定义注解 springboot 框架中定义了大量的注解&#xff0c;为什么加上注解之后就能实现配置了。比如Autowired, 将 IOC 中的对象拿出来使用。 创建自定义的注解 Target(ElementType.METHOD) //作用的目标 Retention(Re…

【深度强化学习】策略梯度算法:REINFORCE

策略梯度 强化学习算法进阶 Q-learning、DQN 及 DQN 改进算法都是基于价值&#xff08;value-based&#xff09;的方法&#xff0c;其中 Q-learning 是处理有限状态的算法&#xff0c;而 DQN 可以用来解决连续状态的问题。在强化学习中&#xff0c;除了基于值函数的方法&#…

冒泡排序的缺陷及优化

冒泡排序的缺陷及优化 定义&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单且常用的排序算法。其基本思想是通过多次遍历待排序的序列&#xff0c;依次比较相邻的两个元素&#xff0c;并根据需要交换它们的位置&#xff0c;使得较大的元素逐渐向后移动&a…

FPGA实现UltraScale GTH光口视频转USB3.0传输,基于FT601+Aurora 8b/10b编解码架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 GT 高速接口解决方案本博已有的FPGA驱动USB通信方案 3、工程详细设计方案工程设计原理框图输入Sensor之-->OV5640摄像头动态彩条输入视频之-->ADV…

Flutter使用gen_l10n实现多语言支持

实现步骤 在你的 Flutter 项目的 pubspec.yaml 文件中&#xff0c;确保添加了 flutter_localizations 和 intl 依赖。 flutter_localizations:sdk: flutterintl: ^0.18.0在 pubspec.yaml 中&#xff0c;添加 flutter 部分的 generate 配置。 generate: true在项目工程根目录新…

Spring IoC的实现机制是什么?

大家好&#xff0c;我是锋哥。今天分享关于【Spring IoC的实现机制是什么&#xff1f;】面试题。希望对大家有帮助&#xff1b; Spring IoC的实现机制是什么&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring IoC&#xff08;Inversion of Control…

2025最新深度学习pytorch完整配置:conda/jupyter/vscode

从今天开始&#xff0c;开始一个新的专栏&#xff0c;更新深度学习相关的内容&#xff0c;从入门到精通&#xff0c;首先的首先是关于环境的配置指南&#xff1a;工欲善其事必先利其器&#xff01; PyTorch 是由 Facebook&#xff08;现 Meta&#xff09;开发的 开源深度学习框…

达梦tpcc压测

造数 在这个日志输出中&#xff0c;主要执行了一系列数据库操作&#xff0c;涵盖了数据库信息检查、表的创建与数据加载、索引的添加、数据验证等步骤。具体分析如下&#xff1a; 数据库信息检查&#xff1a; 查询了数据库的版本、实例名称、日志文件大小、字符集等信息。 删…

通达信如何导出以往的分时数据

1当天分时数据的导出 以梦网科技为例&#xff0c;在分笔交易上面右键&#xff0c;选择“放大”&#xff0c;放大后选择“选项”&#xff0c;选择“数据导出”&#xff0c;弹出界面中修改路径与文件名即可。 2以往数据的导出 以梦网科技为例&#xff0c;今天是2025年2月14号…

1.攻防世界 unserialize3(wakeup()魔术方法、反序列化工作原理)

进入题目页面如下 直接开审 <?php // 定义一个名为 xctf 的类 class xctf {// 声明一个公共属性 $flag&#xff0c;初始值为字符串 111public $flag 111;// 定义一个魔术方法 __wakeup()// 当对象被反序列化时&#xff0c;__wakeup() 方法会自动调用public function __wa…

Excel 合并列数据

场景 要求每行数据的每个字段的内容不能以 [2,3,33,22] 形式展示 要求独立成列形式如下 代码 maven 依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency>…

【vue3】实现pdf在线预览的几种方式

今天一天对当前可用的pdf预览插件做了测试&#xff0c;主要需求是只能预览不能下载&#xff0c;但对于前端来说&#xff0c;没有绝对的禁止&#xff0c;这里只罗列实现方式。 目前采用vue3版本为&#xff1a;3.2.37 iframevue-officepdfjs-dist iframe 先说最简单的&#xf…

腿足机器人之一- 机械与电子组件概览

腿足机器人之一机械与电子组件概览 引言机械组件骨架材料关节设计关节机械组件轴承&#xff08;ings&#xff09;连杆&#xff08;Linkages&#xff09;齿轮&#xff08;Gears&#xff09; 电气组件电机控制器传感器 四足机器人设计双足机器人设计波士顿Atlas机器人 引言 腿足…

重读《Java面试题,10万字208道Java经典面试题总结(附答案)》

最近重读了这篇文章&#xff0c;对很多概念模糊的地方加了拓展和补充。 目录 1、JDK 和 JRE 有什么区别&#xff1f; 2、 和 equals 的区别是什么&#xff1f; 3、final 在 java 中有什么作用&#xff1f; 4、java 中的 Math.round(-1.5) 等于多少&#xff1f; 5、String…