内容简介:请从github下载配套代码:电子书下载地址:前面我们实现的处理都是没有参数的情况,但事情情况是请求可能会有路径参数,比如用户提交一个表单。因此在Web服务的逻辑中要有对路径参数进行解析的逻辑,以便于进行进一步的处理。
请从github下载配套代码: https://github.com/shuningzhang/learn_golang
电子书下载地址: https://u19702000.ctfile.com/dir/19702000-33357795-bb2f31/
前面我们实现的处理都是没有参数的情况,但事情情况是请求可能会有路径参数,比如用户提交一个表单。因此在Web服务的逻辑中要有对路径参数进行解析的逻辑,以便于进行进一步的处理。
Go语言从入门到精通-08| Web服务完善之路径参数
本文今天对之前实现的Web服务器软件进行进一步的完善,使其能够支持URL中有参数的情况。我们 今天的目标是通过浏览器提交一个表单,然后Web服务接收后,将用户填的内容解析出来,然后返回给浏览器 。表单的样式如图1所示。
Go语言从入门到精通-08| Web服务完善之路径参数
URL路径样式
在HTTP协议中如果是GET请求,则可以通过URL传递参数。如果是POST请求则在请求体中传递参数。
Go语言从入门到精通-08| Web服务完善之路径参数
本文今天主要介绍GET请求的情况。如上图是HTML的源代码,这种情况下URL的样式大概是这样的:
http://192.168.142.128:8080/test.html?fname=sunny&lname=zhang
我们用wireshark抓包看一下具体的内容。
Go语言从入门到精通-08| Web服务完善之路径参数
通过上面路径的可以看出来,这里主要分为2部分:
test.html: 这是处理请求的文件,对于动态语言来说通常是xxx.php或者xxx.jsp等,它们通常用来对传输的参数进行处理,比如存储如数据等。而本文最为示例,并不进行如此复杂的处理,只是返回一个静态页面。
fname=sunny&lname=zhang: 这个是传输的参数,是通过图1中表单提交的。通过这个例子我们可以看到其格式,通过&进行间隔,并以=连接key和value。表单的源代码可以看本号在github上的源代码。
在本文的示例中,当我们点击图1中的提交按钮的时候,浏览器就会想Web服务提交一个请求,并将处理结果结果返回。
代码修改完善
我们这里仍然本着先简单后复杂的原则,因此我们实现的时候还是比较简单粗暴。想一下我们的目标(想不起可以看一下本文第二段),我们接收到参数之后,直接转换为一个名为test.html的文件,该文件的内容是通过表单提交的数据。
通过前面对HTTP协议的分析我们也比较清楚,我们需要做的是 对请求的路径进行解析 。找到请求路径中的参数信息,并解析出来即可。但有个问题,我们之前对请求中类型的解析过于简单粗暴,直接根据路径中的“.”来分割扩展名,并没有考虑其后的参数, 因此这里修改进行完善 。如下图,左侧是原来假设的路径格式,而右侧是当前出现的路径格式,因此需要完善请求头解析部分的代码。
Go语言从入门到精通-08| Web服务完善之路径参数
路径解析的修改
这里的修改目的前面已经说过了,这里就不再重复了。如下是具体的代码。主要是需要考虑两种情况,分别进行处理。
Go语言从入门到精通-08| Web服务完善之路径参数
参数解析
同样,为了便于理解,本文实现的也是非常简单粗暴,这里只是将参数整体拿过来,然后写入到文件中,形成一个html文件,然后返回给浏览器。为了代码整洁,这里实现了一个独立的函数,在主流程中调用就行。具体代码如下:
Go语言从入门到精通-08| Web服务完善之路径参数
主业务逻辑
主业务逻辑的修改代码也非常简单,这里仅仅是在请求不是根路径的情况下,调用前面实现的函数进行解析即可。代码改动很小,具体如下:
Go语言从入门到精通-08| Web服务完善之路径参数
测试验证
测试方法请参考前文,这里不再详述。点击浏览器页面中的提交按钮,可以看到结果。
Go语言从入门到精通-08| Web服务完善之路径参数
代码依然非常粗糙,但不要着急,我们慢慢的完善它,最终我们将看到一个麻雀虽小,五脏俱全的Web服务软件。
以上所述就是小编给大家介绍的《Go语言从入门到精通-08| Web服务完善之路径参数》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Go语言从入门到精通-07| Web服务完善之图片文件支持
- Go语言从入门到精通-06| Web服务完善之HTML文件支持
- 圣思园《精通Spring Boot/Cloud》与《精通Java并发》课程现已宣布
- Charles 从入门到精通
- MAT 入门到精通(一)
- Git 从入门到精通
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Rails
David Griffiths / O'Reilly Media / 2008-12-30 / USD 49.99
Figure its about time that you hop on the Ruby on Rails bandwagon? You've heard that it'll increase your productivity exponentially, and allow you to created full fledged web applications with minimal......一起来看看 《Head First Rails》 这本书的介绍吧!