今日继续javaweb
巩固的时间很少;加紧了;马上毕业答辩;
请求
回顾一下,就是java里面写好java类,启动了内嵌的tomcat;然后进行响应;咱们直接访问域名就能访问的到;在java里面写好的这个类看里面基本结构就是加了这个注解;然后类里面写方法就好了;方法里面写方法体;
b/s c/s架构
简单来说就是;浏览器上来个请求吧;然后进入tomcat服务器开始解析了;解析好封装成一个对象给在tomcat内部的一个前端控制器是名为Servlet 的服务器;然后这个服务器进行解析;返回格式啊这些他进行处理;然后分发到每个类然后返回;返回的时候有个返回对象;然后给tomcat然后返回浏览器,这种基于格式为HTTP协议然后只在浏览器和服务器之间的交流称之为bs架构;
还有一种就是手机端下载的app电脑下载的客户端;这两就是客户端和服务器交流就称之为cs架构;
两者区别
网站基本上都是bs,这个好维护,因为浏览器端写死了,就那样;大家都去访问;只需要维护客户端就行了;
cs的话就是你下载到自己的手机上这种;有些不需要联网的单机吗,方便,而且体验好,比较快;不是多人访问的那种;
但是维护很麻烦 ;两边都要维护;
1.postman
原来我们想看这个请求写对没能不能访问到东西吧
我们得自己去输入域名;然后访问;没问题,再继续写;因为后端没有页面的;
为了去给后端看他写的请求写成功了没;研发了一个软件叫postman ;大部分就是用来测请求的;
做网页调试,请求测试;和接口测试的一款强大的软件;
进行postman的学习
创建账号创建工作空间;然后新建请求;然后里面给路径,给个请求行里面的东西;所有浏览器发出的请求都是get请求;建立完毕之间send发送然后看能不能成功然后直接保存;
保存就起名起集合名字;然后直接就是一个目录结构;保存再目录下;
具体其实就把接口路径给他则可;
我们现在要传参
就用到这个类;作为参数传递给我们要写的方法;我们方法的参数就是这个类的对象;
然后我们直接用这个对象点访问到他这个类的方法;
比如第一个getparameter() 方法;
httpservletrequest 记住是这个对象;这个类的这个对象;
然后调用方法,传参了吧;name 是字符串类型;
然后就是age,也是字符串类型;
再一个就是用变量去接受他;想要int类型的就强转一下;
然后输出一下就好
因为他是get请求;所以在访问的时候我们可以吧参数写到路径里面去;
无论是上面写还是下面填;都可以传参;
但是这种方式也过时了,作为了解则可,因为麻烦
记得咱们每次的方法名字和路径名字一致就行了;
springboot的方式更加简便;他可以直接传给个形参就完了;类型也可以直接定义上;直接输出就行了
确实非常的简便了;
记住第一个注解是标明这是一个处理请求的类;跟方法重写内个注释一样;方法上面的内个注解是写请求路径的;基本上注解要么就是标明类;要么就是标明方法;
上面主要是get请求;下面来学post请求;
post请求差别在哪?就在内个参数的位置了;和内容的大小;get的请求他的参数可以直接在请求的行里面写吗跟在路径后边;但是post的请求必须跟在请求体里边;就是单独传参的吗
我们新建请求测试;然后上面直接写路径,根据post的要求;接着去写内容;点击第三个里面编辑;然后编辑好键值对了之后呢发送就可以成功的发送post请求了;
然后我们回idea里面又能接受到了;
let us go on
但是如果参数对应不上;咱们也可以正常返回不报错,那就不太友好了;输出的就是一个null的空值;
所以我们;又要学一个注解;
这个注解叫requestparam这个是请求参数的意思;如果在参数前面加上这个注解吧;你参数对应不上就会报错;
就是名,值,类型,都不许报错
后面改定义参数正常定义;然后前面用注解括号里面圈起来name="name"就ok了;
用了springboot,那就方便了;相当于写几个注解写一个方法则可
2.实体参数 复杂参数
get post学完之后吧;发现一个问题;参数一次传两;那一次传十个咋办?多的要死;不得特长一串?
所以呢;我们写一个实体类去接受我们要用到的参数;
我们定义一个包叫pojo,这个东西就很方便了;这里面就去存放咱们的封装好的请求参数;
这里思路就打开了;非常的打开了;
我们对应参数咱们先创个类吗;然后呢;类里面写好他的属性;以及getter和setter合理的封装和暴露的方法;然后我们去处理请求的类里面;写一个方法;用requestmapper的注解写好路径;然后里面写好方法,方法里面的参数是你之前参数类的对象;这个操作就非常的长脑子;之前最老的处理请求响应的操作不是内个;httprequest的对象吗,也是作为参数传进方法;然后我们可以通过对象去调用对吧;那现在,我们也是一样的,用参数类的对象作为这个方法传入进来吧;那我们用这个对象就能去访问到这个参数类的getter和setter吧;
这个思路要牢记;感觉类与方法啊之间的嵌套就在这里了;但是这个用的很老;
好,然后我们在方法里面之间返回这个对象;毕竟我们本身就有属性;
ok练习完毕;刚刚参数没对上就报错了;然后咱们用刚刚的思路;就是用参数类的对象作为方法的形参
不过,记得这个操作要导入对应的类哦;不然会报错;
然后你加了这个注解注意参数对齐;不然会报错;
然后就成功了;
还有他打印对象是因为在参数类里面重写了tostring方法!咱们几点加上
重写完毕之后就不是打印对象的地址了;纯纯打印对象的内容;
情况又来了;
假如是类中类呢?
就是咱们参数类里面有给属性是别的类;是个对象属性怎么办?
那当然写参数类还是一样,定义属性getter setter,还有tostring方法;但是!不一样的是咱们再请求里面创建参数的时候,咱们要用点访问;用对象去访问到内个复杂类里面的属性;这样的嵌套吧;
比如;人,分成:男人,女人;男人里面属性还有名字,年龄;直接在下边用对象点访问到属性;赋值则可;
欸我最近老听到说前端要被ai替代。。。。到底谁说的;现在的ai跟的上老板的需求不;而且也得你会用有知识才能提问题;不然提的都不到位说什么呢?还不得自己优化;ai什么时候能更新到那种非常精美的页面自己就能完成的日子就牛了;自动优化自动更新呗;那别说前端了;后端也没了;…留下开发底层的人算了呗;沉默;虽然java 嵌入式烂大街;但是;用的好的确实不多;一个本科四年跟着黑马连苍穹外卖能不能敲完的人我都不好说;你看我这不是大三考研失败大四就来敲了吗;前两年纯人生是旷野了;不能丢应届生身份吗;还有我发现很多人缺少解决问题的能力以及就是收集信息的能力;别人说啥就啥,他自己不动脑;我的妈;可能因为我二本吧;圈子太不行了;都是一群有钱的二代;0.0 sor 我还是想实现自己的价值的;不学什么以后那么多年那么多体验怎么办?wk每天光早起就能干不少事情了;而且健康;我现在也不理解以前的自己;还是现在更令人有感觉到活着;人总要有个目标才能活下去对吧?不学点什么我都觉得我没用;天;人真的不可以摆烂;脑子只会越用越好用;时间就是钱真的没错;以前的我嗤之以鼻,现在的我逐步学习;学校真的就是最后的避风港了;以前爸妈保护;现在出来社会一看一个不吱声;保护的太好,就只能啃老了哦;多努力大家,我也是;
3.数组集合参数
ok继续
数组集合;比如再表单提交的时候吧;一个checkbok选项就可以提交多个,比如你的爱好有哪些,啪唧勾选多个上去吧;
参数呢就还是键值对;你就同一个键就完毕了;这种类型的参数,咱们再创建参数类存储的时候吧;就最好用数组的形式;
赶回去答辩了一下,落下了两天没看;两天没看就有很大的遗忘感了;真的很可怕;还是要多加复习训练;
比如这个请求;左边是请求方法名;右边是路径,arrayparam这个是自定义的路径;后面跟着的是参数,就是再问号后面;然后这种类型的参数,一看好几个同名的就是直接想到给一个数组;叫hobby然后里面存这些数据;就是传参的时候传数组类型的进去;然后方法体里面调用tostring方法
当然也可以送个集合;毕竟,集合是数组的扩展2.0
但是,注意的一点是;hobby这个东西;还是要去后台先定义好;
总结
数组里面的参数名字和形参名字相同;就是键值对左边都一个,直接给数组或者集合都行;文字版描述还是太生硬了;
不过到目前为止;还都是根据请求写函数;
4.日期参数
这一类型的参数就类似于;用户日期,
@DateTimeFormat这个注解;
比如请求的路径是这种格式;那我们的参数就可以是日期类型的对象;
就可以是这种格式
这个注解是指定传递的日期和格式的
然后输出对象‘
还有一个很细的点
就是这个请求参数吧
LocalDate这个只是到日期是yyyy-MM-dd
但是LocalDateTime这个是不止,还要到时间的格式;注意引入的类不要错,要与之对应;
前面的注解是@DateTimeFormat(pattern = “yyyy-MM-dd”)这种格式
@RestController
public class Data {//这里是日期类型的请求@RequestMapping("/data")public String data(@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate update){System.out.println("update");return "ok";}
}
5.json参数
postman发送请求的时候就能传递json格式的参数
直接选择json格式然后编辑
用postman发起请求,然后咱们服务端是接收请求,然后接收请求的包就称为pojo
就是在postman 的请求里面吧,咱们写成这样之后;就先封装好;成一个大类;然后里面有个复杂类,那就单独封装;
然后,在请求里面写;先还是一样的标识这个注解;写好路径;然后方法里面加一个新注解@RequestBody这个注解,用我们创建好的类的对象作为参数,然后输出;多练就梳理的越清楚;咱们打印出来;这个注解就是专门来封装json格式的请求的参数的;日期的是data开头,每一个还是好记的,而且这个json类型的也不用加括号
6.路径参数
就是跟在路径后面的除了路径还有参数
比如这个1,他既作为路径,也作为参数;
欸,但是我们参数是可以瞎传的,如果我们定义好了但是又传了一个不一样的;那就错乱了;所以我们需要一个动态的东西;
用括号绑定一个{}数据;然后用形参接收里面的数据;再一个,注解是@PathVariable标明这是一个路径参数;
在路径里面就把值绑定进去;
这种,这个是有两个参数的时候;
总结所有参数;也能看出来;就是传给的方法里面的参数和注解不一样;别的大致相同;从定义类型直接传,到传一个对象,传一个集合,到标上注解,日期的版本还有对应的格式
响应
我们之前的响应就是写好之后return里面返回,实体就实体;但是对象,会变成json的格式响应
这些对前端响应数据的处理类都写在controller类里面;然后controller里面对应的参数吧,比如一个对象,一个数组这种对应的类就放在pojo里面
但是回应的格式特别多
所以我们要统一
这就是一个统一响应结果类;
当然这个适合放在pojo包下,毕竟pojo包他是放请求类里面的实体数据类的
下次继续