博主主页: 33的博客
文章专栏分类:JavaEE
??我的代码仓库: 33的代码仓库??
???关注我带你了解更多进阶知识
目录
- 1.前言
- 2.Spring
- 3.第一个SpringBoot程序
- 4.Spring MVC
-
- 4.1建立连接
-
- 4.1.1@RequestMapping使用
- 4.2请求
-
- 4.2.1传递单个参数
- 4.2.2传递多个参数
- 4.2.3传递一个对象
- 4.2.4参数重命名
- 4.2.5数组传参
- 4.2.6接收集合
- 4.2.7接收json
- 4.2.8从路径中获取参数
- 4.2.9上传文件
- 4.3Cookie与Session
- 4.3.1获取Cookie
- 4.3.2获取Session
- 4.3.3获取header
- 5.总结
1.前言
如今,网站开发是非常留下的技术,接下来我们就对网站开发进行深入学习,Spring官提供了很多开源的项,覆盖范围从Web开发到数据,Spring发展到了今天,已经形成了的态圈.我们在开发时,也倾向于使Spring官提供的技术,来解决对应的问题而Spring Boot是一个构建基于Spring框架的应用程序的工具,它可以简化Spring应用程序的开发和部署过程。Spring Boot利用自动配置和快速启动特性,使得开发者可以快速地创建独立的、生产级别的Spring应用程序,所以我们现在主要基于Spring boot框架来进行开发。
2.Spring
在学习SpringBoot前,我们先认识以下Spring,Spring让每个人编写Java程序更快、更简单、更安全。Spring专注于速度、简约和生产力,使其成为全球最受欢迎的Java框架-这是Spring官方的描述:
上述谈到了一个词,JAVA框架,那么什么是java框架呢?通俗的讲框架是实现某些功能的半成品,它提供了一些常用的工具类,我们在框架的基础上,可以更高效的进行开发。
Spring官方提供了很多开源的项目覆盖范围从web到大数据,Spring发展到如今已经形成了自己的生态圈,我们在开发时也更倾向于spring官方提供的技术来进行开发。
这些都是基于Spring Framework开发的,但它存在的配置很多,入门难,Spring也意识到了这个问题,所以为了简化开发者的使用推出了SpringBoot。简单来说SpringBoot的诞生就是为了简化Spring 程序开发的。
3.第一个SpringBoot程序
目前我的IDEAL专业版还在申请中,暂时用社区版和大家演示:
创建SpringBoot可以在官网创建:https://start.spring.io/
当我们创建号一个SpringBoot项目以后,可能会遇到一个常见的问题,就是端口号被占用
那么我们如何解决呢?
方法一:
打开cmd查找哪个程序在使用8080端口,再根据PID在任务管理器中关闭,也可以直接在cmd中输入指令直接关闭,但是我总是关闭失败,所以我一般在任务管理器中关。
cmd命令:
netstat -ano|findstr 8080//查找哪个进程在使用8080端口
taskkill /pid PID号 -f
方法二:修改该进程的端口号
接下来我们就可以写第一个hello Spring了!!!
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello,my dear Spring";
}
}
tomcat 是一个web服务器,默认端口为8080
4.Spring MVC
Spring MVC是Spring Boot中的常用模块,用于构建web应用程序,用Spring Boot创建Web应用程序时,通常会使用Spring MVC来处理HTTP请求和响应。
4.1建立连接
在Spring MVC中使用@RequestMapping来实现浏览器连接程序的作用,它是用来注册接口路由映射的,表示当服务器收到请求时,路径为/hello的请求就会调用hello这个方法的代码。
那么既然@RequestMapping已经建立了连接,我们为什么要使用@RestController,其实在一个项目中,往往会有多个类,那么当我们调用某一个方法时,它怎么知道我们调用的是哪一个类中的方法呢?如果类加了注解@RestController,spring才回去看方法中加了@RequestMapping注解的,当然它的作用并不只是这点,后面再介绍。
4.1.1@RequestMapping使用
@RequestMapping既可以修饰类也可以修饰方法,当修饰类和方法的时候访问路径是:类路径+方法路径
@RequestMapping既支持post请求也支持get请求
4.2请求
4.2.1传递单个参数
@RestController
@RequestMapping("/d1")
public class HelloController {
@RequestMapping("/hello")
public String hello(Integer age){
return "age: "+age;
}
}
url中查询字符串的参数要和我们所定义的方法的参数相同。
4.2.2传递多个参数
@RestController
@RequestMapping("/d1")
public class HelloController {
@RequestMapping("/hello")
public String hello(int age,String name){
return "age: "+age+"name: "+name;
}
}
如果我们又有多个参数的话,那么每次都会去对方法进行修改,那么有什么方法不用反复求修改吗?那就是传递对象。
4.2.3传递一个对象
先建立一个类:
package com.example.demo;
public class Student {
private Integer age;
private String name;
private String like;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLike() {
return like;
}
public void setLike(String like) {
this.like = like;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + ''' +
", like='" + like + ''' +
'}';
}
}
@RequestMapping("/r3")
public Student r3(Student student){
return student;
}
4.2.4参数重命名
@RequestMapping("/r4")//重命名 like,并设置参数非必传
public String r4(@RequestParam(value="like",required=false) String LIKE){
return "爱好:"+LIKE;
}
4.2.5数组传参
@RequestMapping("/R3")
public String R3(String[] array){
return "接到参数, array:"+ Arrays.toString(array);
}
4.2.6接收集合
@RequestMapping("/R4")
public String R4(@RequestParam(required = false) List<String> list){
return "接到参数, list:"+ list;
}
4.2.7接收json
@RequestMapping("/R5")
public String r8(@RequestBody Student student){
return "接到参数, student:"+ student.toString();
}
4.2.8从路径中获取参数
@RequestMapping("/r9/{name}/{age}/")
public String r12(@PathVariable("name") String name, @PathVariable("age") String age){
return "name:"+articleId+",age"+name;
}
4.2.9上传文件
@RequestMapping("/r2")
public String R2(@RequestPart("file") MultipartFile file){
String name=file.getOriginalFilename();
return "上传成功"+name;
}
4.3Cookie与Session
Session:会话的意思,会话是个客与服务器之间的不中断的请求响应.对客的每个请求,服务器能够识别出请求来于同个客.当个未知的客向Web应程序发送第个请求时就开始了个会话.当客明确结束会话或服务器在个时限内没有接受到客的任何请求时,会话就结束了。Session的本质就是个"哈希表",存储了些键值对结构.Key就是SessionID,Value就是用户信息(信息可以根据需求灵活设计).
Cookie:是一种在客户端(通常是浏览器)和服务器之间交换信息的机制。当用户访问网站时,服务器会在用户的计算机上存储一个小型文本文件,其中包含有关用户的信息,登录状态、登陆时间等。
Http本身是一个无状态的协议,但是在实际开发中,我们很多时候就需要知道请求之间的联系,例如之前有没有登陆某个界面,这个时候就可以通过cookie来记录,当用户登录的时候,服务器在Session中会新增一个记录,并把SessionID返回给客户端(通过http中的set-cookie字段返回);客户端后续再向服务器发送请求时会携带SessionID(通过cookie字段携带);服务器收到请求后会根据SessionID获取到用户的对应信息,再进行后续操作,如果找不到SessionID就重新创造一个Session并把SessionID返回给客户端。
上述的Seeion。
Cookie与Session区别
Cookie是客端保存信息的种机制.Session是服务器端保存信息的种机制
Cookie和Session之间主要是通过_SessionId_关联起来的,SessionIdCookie和Session之间的桥梁
Cookie和Session经常会在起配合使.但是不是必须配合 ,完全可以Cookie来保存些数据在客端.这些数据不定是份信息,也不定是SessionId
Session中的sessionId也不需要得通过Cookie/Set-Cookie传递,如通过URL传递
4.3.1获取Cookie
@RequestMapping("/getCookie")
public String getCookie2(@CookieValue("NAME") String name{
return "从Cookie中获取值, NAME:"+name;
}
4.3.2获取Session
@RequestMapping("/r3")
public String getS(HttpSession session){
session.setAttribute("name","张三");
String name = (String) session.getAttribute("name");
return "session获取成功"+name;
}
4.3.3获取header
public String getHeader2(@RequestHeader("User-Agent") String userAgent){
// String userAgent = request.getHeader("User-Agent");
return "从header中获取信息, userAgent:"+userAgent;
}
5.总结
本篇文章主要介绍了第一个SpringBoot程序,与客户端建立连接,@RequestMapping使用,关于请求传参如传递单个参数,传递多个参数,传递一个对象,参数重命名等等,以及Cookie与Session的介绍,在下篇文章中,博主讲继续介绍响应部分,并和大家分析几个小项目。
下期预告:SpringBoot(下)