StringMVC

目录

一,MVC定义

二,SpringMVC的基本使用 

2.1建立连接 - @RequestMapping("/...")

​编辑

2.2请求

1.传递单个参数

2.传递多个参数

3.传递对象

4.参数重命名

5.传递数组

6. 传递集合

7.传递JSON数据

8. 获取url中数据

9. 传递文件

10.获取Cookie

11.获取session

12.获取header

​编辑

2.3响应

1.返回静态页面

2.返回html片段

3. 返回JSON

 4.设置状态码

5.设置Header


一,MVC定义

MVC,英文名Model-View-Controller,是软件工程中的一种软件架构模式。MVC模式分离了应用程序的数据访问,用户界面,和处理逻辑。

  • Model(模型)模型是用来处理数据和业务逻辑,在MVC 模式中,模型与视图是分离的,模型并不知道视图的存在。
  • View(视图)视图是用户看到和交互的界面,例如网页,窗口等。视图通常是动态生成的。
  • Controller(控制器)控制器接收用户的请求,并调用模型和视图去完成用户的需求。控制器本身不输出任何东西和做任何处理,它只是接收请求并决定调用哪个模型构件和哪个视图来处理请求。

二,SpringMVC的基本使用 

学习Spring MVC 就是学习如何通过浏览器和用户程序进行交互,主要分为一下三个方面:

  1. 建立连接:将浏览器于Java程序连接起来,就是访问一个网址能调用Spring程序
  2. 接收请求:用户请求可能会带一些参数,要学会在程序中接收这些参数
  3. 返回响应:直接完业务逻辑后,要将程序运行的结果返回给用户

2.1建立连接 - @RequestMapping("/...")

@RequestMapping 注解是用来注册接口的路由映射的。表示服务接收到请求时,路径为 /... 的请求会调用对应的方法。

该注释既可以修饰方法也可以修饰类,如果两者同时加注释的话,它的访问地址就是 类路径 + 方法路径,举个例子:

@RestController
@RequestMapping("/test")
public class Test {@RequestMapping("/hello")public String test1(){return "hello world!";}
}
//这里的路径是指:类路径(/test)+ 方法路径(/hello)

@RequestMapping注释既支持post请求也支持get请求,也可以限定只支持其中一个请求方式,代码如下:

@RestController
@RequestMapping("/test")
public class Test {//如果只有一个参数,就会默认赋值给value这个属性,如果有多个参数,就需要属性名 = ...//此处表示只支持post请求@RequestMapping(value = "/hello",method = RequestMethod.POST)public String test1(){return "hello world!";}
}

2.2请求

一般的参数名要与请求中给的数据一致

1.传递单个参数

    @RequestMapping("/r1")public String r1(String name){return "name = " + name;}

2.传递多个参数

    @RequestMapping("/r2")public String r2(String name, Integer age){return "name = " + name+", age = " + age;}

3.传递对象

    @RequestMapping("/r3")public String r3(User user){//User是单独创建的一个对象,需要有构造方法和get()return user.toString();}

4.参数重命名

当请求中的给的名称与参数名不一致时,可以使用 @RequestParam注解

    @RequestMapping("/r4")public String r4(@RequestParam("name") String username, Integer age){return "name = " + username+", age = " + age;}

使用@RequestParam注解还有一点需要注意:它修饰的参数默认是必须传值的,如果没有传值,就会报错。当然也可以设置为非必传,代码如下:

    @RequestMapping("/r4")public String r4(@RequestParam(value = "name", required = false) String username, Integer age){return "name = " + username+", age = " + age;}

5.传递数组

    @RequestMapping("/r5")public String r5(int[] arr){return Arrays.toString(arr);}

有两种请求方式 :

6. 传递集合

集合参数:和数组类似, 同⼀个请求参数名有为多个, 且需要使⽤ @RequestParam 绑定参数关系
默认情况下,请求中参数名相同的多个值,是封装到数组. 如果要封装到集合,必须使用@RequestParam 绑定参数关系。
此次的请求与数组一致,就不再贴图了。
    @RequestMapping("/r6")public String r6(@RequestParam List<Integer> lst){return lst.toString();}

7.传递JSON数据

JSON就是⼀种数据格式, 有自己的格式和语法, 使用文本表示⼀个对象或数组的信息, 因此
JSON本质是字符串. 主要负责在不同的语言中数据传递和交换,它是以键值对的形式表示,主要还是表示一个对象。
JSON给的数据是在请求的正文当中,所以需要使用@RequestBody注解,被该注解修饰的参数需要到请求正文中查找对应的数据,该注释只有一个属性就是required,也就是说它也可以设置该参数是否必传。
    @RequestMapping("/r7")public String r7(@RequestBody User user){return user.toString();}

8. 获取url中数据

这里需要使用@PathVariable,该注释主要作用在url路径的数据绑定上,即默认参数写在url上。该注释也可以设置成非必传,但是一般都是默认的。

    @RequestMapping("/r8/{name}")public String r8(@PathVariable String name){return name;}

9. 传递文件

     @RequestMapping("/r9")public String r9(@RequestPart MultipartFile file) throws IOException {String filename = file.getOriginalFilename();//获取文件名file.transferTo(new File("D:/二次元/"+filename));//将文件上传到指定的路径return filename;}

10.获取Cookie

    @RequestMapping("/r10")//这里的两个参数,是spring内置的,用到的时候可以直接加上public String r10(HttpServletRequest request, HttpServletResponse response) {}//获取cookie的第一种写法,能得到所有的cookie@RequestMapping("/r10")public String r10(HttpServletRequest request) {Cookie[] cookies = request.getCookies();String res = "";for(Cookie x : cookies){res = res +  x.getName() + ":" + x.getValue();}return res;}//第二种写法,获取名为Cookie_2对应value@RequestMapping("/r11")public String r11(@CookieValue("Cookie_2") String value) {return value;}

11.获取session

    //三种方式都行@RequestMapping("/r12")public String r12(HttpServletRequest request) {HttpSession session = request.getSession();String username = (String)session.getAttribute("username");return username;}@RequestMapping("/r13")public String r13(HttpSession session) {String username = (String)session.getAttribute("username");return username;}@RequestMapping("/r14")public String r14(@SessionAttribute("username") String name) {return name;}

12.获取header

    @RequestMapping("/getHeader")public String getHeader(HttpServletRequest request){//请求头中的数据是以键值对的形式存储,所以和map的用法差不多String userAgent = request.getHeader("User-Agent");return userAgent;}@RequestMapping("/getHeader2")public String getHeader2(@RequestHeader("User-Agent") String userAgent){return userAgent;}

2.3响应

1.返回静态页面

@Controller
@RequestMapping("/demo")
public class Demo {@RequestMapping("/r1")public String r1(){return "/index.html";}
}

这里需要讲解一下@RequestController注解与@Controller注解的区别,先看一下它们的源码:

//@Controller
@Target({ElementType.TYPE})//表示能作用的目标(比如:类,方法)
@Retention(RetentionPolicy.RUNTIME)//表示生命周期
@Documented
@Component
public @interface Controller {@AliasFor(annotation = Component.class)String value() default "";
}
//@ResquestController
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {@AliasFor(annotation = Controller.class)String value() default "";
}

我们可以发现,@RequestController = @Controller + @ResponseBody,而@Controller注释只负责告诉Spring帮我们管理哪些程序,所以关键是@ResponsBody注释,它的作用是保证返回的一定是数据,如果不加该注释,那么默认返回的是一个网页。

 @ResponsBody注解既可以修饰类,也可以修饰方法,修饰类,那么该类中的所有方法都返回数据;修饰方法,表示该方法返回的数数据,当一个类中的方法既要返回数据也要返回页面时,要给该类使用@Controller注解,再给返回数据的方法加上@ResponseBody注解。

2.返回html片段

直接返回数据,spring会根据返回的结果,动态设置response的content-type

    @ResponseBody@RequestMapping("/r2")public String r2(){return "<h1>.....</h1>";}

3. 返回JSON

类和哈希都会自动转换成 json格式来返回

    @ResponseBody@RequestMapping("/r3")public User r3(){User user = new User();user.setName("zhangsan");user.setAge(18);user.setSex("男");return user;}

    @ResponseBody@RequestMapping("/r4")public Map<String, String> r4(){HashMap map = new HashMap();map.put("key", "value");map.put("zhangsan", "lisi");return map;}

 4.设置状态码

    @ResponseBody@RequestMapping("/r7")public String r7(HttpServletResponse response){response.setStatus(404);return "设置成功";}

5.设置Header

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

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {String name() default "";@AliasFor("path")String[] value() default {};@AliasFor("value")String[] path() default {};RequestMethod[] method() default {};String[] params() default {};String[] headers() default {};String[] consumes() default {};String[] produces() default {};
}
  • value:指映射的URL
  • method:指请求的method类型,比如:post,get,put...
  • consumes:指处理请求(request)的提交内容类型(Content-Type)
  • produces:指返回提交内容类型,仅当request请求头中的Accept类型包含该指定类型才返回
  • params:request中必须包含某参数值时,才让该方法处理
  • header:request中必须包含某指定的header参数值时,才让该方法处理

 设置Content-Type

    @ResponseBody@RequestMapping(value = "/r9",produces = "application/json")public String r9(){return "1111";}

自定义Header:这里的key和value是可以自己随意指定的

    @ResponseBody@RequestMapping("/r10")public String r10(HttpServletResponse response) {response.setHeader("key","value");return "设置成功";}

 

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

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

相关文章

怎么通过OpenAI API调用其多模态大模型(GPT-4o)

现在只要有额度&#xff0c;大家都可以调用OpenAI的多模态大模型了&#xff0c;例如GPT-4o和GPT-4 Turbo&#xff0c;我一年多前总结过一些OpenAI API的用法&#xff0c;发现现在稍微更新了一下。主要参考了这里&#xff1a;https://platform.openai.com/docs/guides/vision 其…

python数据类型之元组、集合和字典

目录 0.三者主要作用 1.元组 元组特点 创建元组 元组解包 可变和不可变元素元组 2.集合 集合特点 创建集合 集合元素要求 集合方法 访问与修改 子集和超集 相等性判断 集合运算 不可变集合 3.字典 字典特点 字典创建和常见操作 字典内置方法 pprin模块 0.…

k8s——Pod详解

一、Pod基础概念 1.1 Pod定义 Pod是kubernetes中最小的资源管理组件&#xff0c;Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的&#xff0c;例如&#xff0c;用于管理Pod运行…

缪尔赛思又来到了你的面前(哈希)

定义一棵根节点为 1 1 1&#xff0c; n ( 2 ≤ n ≤ 1 0 3 ) n(2≤n≤10^3) n(2≤n≤103) 个节点的树的哈希值为&#xff1a; H ∑ i 1 n X i Y f a ( i ) m o d 998244353 H∑^n_{i1}X^iY^{fa(i)}\ mod\ 998244353 Hi1∑n​XiYfa(i) mod 998244353 f a ( i ) fa(i) fa(i)…

断网之后的页面,Autox.js是点击还是上下滑动比较好?

在处理断网之后的页面&#xff0c;选择点击还是上下滑动作为刷新操作&#xff0c;取决于应用的设计和用户界面。通常&#xff0c;这两种操作都可以作为刷新页面的方式&#xff0c;但它们各自有不同的适用场景&#xff1a; 点击刷新 - 适用场景&#xff1a;如果应用提供了一个明…

Java进阶学习笔记7——权限修饰符

什么是权限修饰符&#xff1f; 就是用来限制类中的成员&#xff08;成员变量、成员方法、构造器、代码块....&#xff09;能够被访问的范围。 protected使用的比较少&#xff0c;但是程序员还是要阅读代码&#xff0c;看官方文档是怎么写的&#xff0c;都会接触到protected修饰…

C#串口通信-串口相关参数介绍

串口通讯(Serial Communication)&#xff0c;是指外设和计算机间&#xff0c;通过数据信号线、地线等&#xff0c;按位进行传输数据的一种双向通讯方式。 串口是一种接口标准&#xff0c;它规定了接口的电气标准&#xff0c;没有规定接口插件电缆以及使用的通信协议&#xff0c…

ssh 配置 authorized_keys 后无法免密登录

查看日志&#xff1a; tail -f /var/log/auth.log May 25 15:55:13 121 sudo: pam_unix(sudo:session): session opened for user root by root(uid0) May 25 15:55:13 121 sshd[550561]: Received signal 15; terminating. May 25 15:55:13 121 sshd[922866]: Server liste…

性能测试场景的设计方法

引用&#xff1a;根据2008年Aberdeen Group的研究报告&#xff0c;对于Web网站&#xff0c;1秒的页面加载延迟相当于少了11%的PV&#xff08;page view&#xff09;&#xff0c;相当于降低了16%的顾客满意度。如果从金钱的角度计算&#xff0c;就意味着&#xff1a;如果一个网站…

「探讨」:什么是网络审计?好用的网络审计系统推荐【图文详解】

网络是企业运营、政府管理、个人生活不可或缺的基础设施。 然而网络安全问题却日益凸显&#xff0c;数据泄露、网络攻击、欺诈行为等风险日益严重。 一、网络审计的定义 网络审计&#xff0c;又称信息技术审计或电子审计&#xff0c;是指审计人员运用专业技能和工具&#xff…

fdk-aac将aac格式转为pcm数据

int sampleRate 44100; // 采样率int sampleSizeInBits 16; // 采样位数&#xff0c;通常是16int channels 2; // 通道数&#xff0c;单声道为1&#xff0c;立体声为2FILE *m_fd NULL;FILE *m_fd2 NULL;HANDLE_AACDECODER decoder aacDecoder_Open(TT_MP4_ADTS, 1);if (!…

实战之快速完成 ChatGLM3-6B 在 GPU-8G的 INT4 量化和本地部署

ChatGLM3 (ChatGLM3-6B) 项目地址 https://github.com/THUDM/ChatGLM3大模型是很吃CPU和显卡的&#xff0c;所以&#xff0c;要不有一个好的CPU&#xff0c;要不有一块好的显卡&#xff0c;显卡尽量13G&#xff0c;内存基本要32GB。 清华大模型分为三种(ChatGLM3-6B-Base&…

“大数据建模、分析、挖掘技术应用研修班”的通知!

随着2015年9月国务院发布了《关于印发促进大数据发展行动纲要的通知》&#xff0c;各类型数据呈现出了指数级增长&#xff0c;数据成了每个组织的命脉。今天所产生的数据比过去几年所产生的数据大好几个数量级&#xff0c;企业有了能够轻松访问和分析数据以提高性能的新机会&am…

Vue3中为Ant Design Vue中table的checkbox加tooltip、popover

问题的产生 Vue版本&#xff1a;3.3.13 ant-design-vue 版本&#xff1a;3.x.x 在工作时遇到一个场景&#xff0c;需要在 ant-table 的 checkbox 被禁用的时候提示原因&#xff0c;但是在 ant-design-vue 文档中并没有发现有相关介绍。 首先我去看了issue中是否有提到相关问题…

【金砖赛】基于docker搭链

一&#xff0e;基于docker搭建 启动并检查是否启动成功 #启动命令 sudo systemctl start docker#检查命令 sudo systemctl status docker修改权限 chomd 777 build_chain.sh 进行4节点联盟链搭建&#xff08;举例&#xff09; sudo ./build_chain.sh -d -l "127.0.0.1…

OOM不会导致JVM退出

问题来源 一次生产事故&#xff0c;由于一次性从数据库查询过多数据导致线程 OOM&#xff1a;Java heap space 异常&#xff08;千万级表&#xff0c;JVM堆内存2G&#xff09;&#xff0c;但是在线程OOM发生时&#xff0c;java进程却没有立即挂掉。 ##OOM与异常 说到底OutOfM…

基于Android Studio记事本系统

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 具有登录&#xff0c;注册&#xff0c;记住密码&#xff0c;自动登录的功能&#xff1b; 可以新增记事本&#xff0c;编辑&#xff0c;删除记事本信息&#xff0c;同时可以设置主标题&#xff0c;内容&#xff0c;以及…

Ansible自动化运维中的Setup收集模块应用详解

作者主页&#xff1a;点击&#xff01; Ansible专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年5月22日13点14分 &#x1f4af;趣站推荐&#x1f4af; 前些天发现了一个巨牛的&#x1f916;人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xf…

服务器没有图形界面没有显示器怎么办

可以用vnc。 vnc是开元的。什么是vnc&#xff1f; 使用vnc 下载vnc和vncserver命令。 每生成一个图形界面就叫做开启session会话。 vnc相关命令&#xff1a; start a new session: vncserver。 如果没有会话&#xff0c;一般从:1开始 端口5901 vncserver :2 #指定会话为:2 端…

WinForm+SQL Server+.NET开发菜鸟驿站管理系统

完整效果看哔哩哔哩&#xff0c;有需要其他系统&#xff0c;可以私信