这都可以?(javaweb会话的应用场景)javaweb网上商城,Java Web Server(1): 基础篇,java webservice视频,
上节课大概介绍了一下HTTP协议。我们写了一个很简单的web server。上一节课有很多朋友表示还有很多疑惑,从今天起,我们来写一个简单的web server,争取把这些疑惑都能解决了。
一个不退出的Web Server
上节课留的作业是让读者自己实现一个server,可以在客户端请求结束以后,不必退出。评论区有人说可以使用线程,这确实是一个最简单的方案。我们来实现一个:
这个ClientConnection是一个新的线程,每次有一个新的连接进来的时候就会新起一个线程,专门负责与那个客户端通讯。这样的话,我们的服务端就有能力同时处理多个请求了。
ClientConnection的具体实现如下:
解析HTTP报文
服务端在接收到http报文之后,要对此报文进行分析。如果所请求的网页不存在,则要向客户端返回404状态,只有请求的网页(当然也可以是其他资源)存在的时候才能向客户端返回正确的内容。
上节课,我们已经看到http协议 GET 方法的格式了。我们来写一个可以分析http协议的处理器。具体的代码比较多,也很杂,我这里就不贴了。其实,主要就是一个字符串的分析过程。留给读者自己练手吧。
动态网页和静态网页
我们知道早期的互联网的网页是使用 html 来制作的静态网页,这个网页在制作的时候是什么内容,服务器就把这个 html 文件的内容读出来,如果文件中还引用了图片,例如<img>标签,那么服务器还会去读取这个图片将其发送到客户端。
但是随着互联网的发展,这种仅能用于展示的静态网页很快就不能满足需求了。例如,我们做一个网站,有账号系统,有网站数据,那么这些数据就需要存储到数据库里。
可是,只有HTML显然是没办法连接数据库,进行增删改的。那怎么办呢?于是,动态网页脚本就出现了。2000年左右,开发网站还处在上古时期,没有那么多的思想,什么MVC,SOA,微服务都没有,比较流行的,就是是直接把 html 与脚本混编的。
这个时期比较流行的有,asp,php,jsp等技术。我这里以一个原始的JSP网页举一个例子,展现一下脚本的作用。
先去下载一个最新版的jetty来,我们通过jetty来进行实验,在这里下载一个。
Jetty - Servlet Engine and Http Server
然后把它解压以后,进入根目录。根目录下有一个start.jar文件,我们使用java命令运行它。
不过,在这之前,我们还是要在webapps这个文件夹下创建一个名为root的文件夹,并且在这个里面创建一个index.html:
在浏览器里输入localhost:8080/index.html
可以看到效果,我就不截图了,比较简单。这想的重复代码,我们要是能动态生成就好了。这就是动态网页的优点了,通过在网页中内嵌脚本,让它自动生成。我们在root文件夹下面再新建一个index.jsp:
我们在浏览器里访问一下这个网址:

我们可以看到通过 jsp 的内嵌脚本,生成了一个完整的 html 文件。
大家回想一下这个过程,浏览器将 GET index.jsp 的请求发送到 jetty 服务器,服务器看到这个请求以后,把 jsp 中的脚本拿出来执行,将 JSP 翻译成 html,然后再把这些 html 文本发送回客户端。这个过程与我们上一节课讲的过程是一模一样的,唯一的不同就是 Jetty 还要负责进行脚本的解释。
今天的课程就到这里吧。
上一课:Http协议
课程目录:课程目录
本文系作者 @河马 原创发布在河马博客站点。未经许可,禁止转载。
暂无评论数据