概述
这里
先简单列一下与服务器的交互过程。
1 访问URL
2 服务器响应
- 3 返回处理结果
访问url
① 浏览器开始解析地址,把地址分为域名和路径(如果有的话),然后连接DNS服务器,查询这个域名的IP地址。
- DNS提供的服务就是将域名转换为其服务器的ip地址。
② 获得DNS返回的ip地址后,浏览器开始按照http协议的格式向该ip地址(服务器)和路径请求内容。
- 1,浏览器如何把提交的数据封装成http协议格式
- 相关内容:TCP HTTP
- 2,数据在网路中怎么流到服务器
- 相关内容:DNS代理,CDN,IP地址,路由,网络结构
服务器响应
③服务器收到某个http请求后,就会把内容按照http协议的格式返回这个请求的客户端。
- 3,服务器是怎么解析和处理数据的
- 相关内容:http各种服务器知识 服务器相关语言知识(java,python等) 数据库(SQL NOSQL)等
- 4,处理结束后的结果是怎么封装在http协议中返回的
- 相关内容:http 各种web服务器知识
返回处理结果
④浏览器收到服务器返回的内容后,开始渲染并显示出来。
- 5,浏览器得到数据后,又是怎么处理http响应的
- 相关内容:http 浏览器
- 6,浏览器和js怎么处理响应数据,dom如何渲染数据
- 相关内容:dom js引擎
⑤浏览器与服务器对话结束
从第一步开始谈:
访问URL
一个完整的url是由协议,域名,端口,文件路径四个部分组成的。
比如我输入http://localhost:8080/index.html,
http代表协议,localhost代表域名,8080是端口,/index.html是文件路径。
当我们访问该url地址时,会返回服务器中物理文件index.html的内容,然后浏览器将内容渲染并展示出我们所看到的网页内容。
这里的index.html是静态网页文件,当我们需要采用动态网页开发技术时可以采用jsp,jsp是一种建立在Servlet上的动态网页开发技术。
例如我们打开一个页面,该页面由servlet处理,返回了各种数据,显示在网页上,即动态网页开发。
servlet
servlet就是运行在web服务器端的Java程序,通常用于:
- 接受数据请求
- 处理请求
- 完成响应
我们可以把请求交给一个servlet处理,比如提交一个表单给一个表单处理servlet,servlet处理后(往往是与数据库的交互)返回处理结果。
我们也可以直接访问servlet。不过创建好的servlet只有映射成虚拟路径,客户端(浏览器)才能对其进行访问。
映射方式是在web.xml下如下配置:
<servlet>
<servlet-name>Servlet名称</servlet-name>
<servlet-class>servlet完整类名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet名称</servlet-name>
<url-pattern>servlet对外访问的虚拟路径</url-pattern>
</servlet-mapping>
在web.xml配置文件中将url地址与servlet联系起来。
“http://localhost:8080”将请求导向服务器,这里用“localhost”意思就是导向本地的服务器。在服务器中有软件程序监听着端口。url剩余的部分,即文件路径,是由服务器来处理的。
WEB服务器根据请求的文件路径在web.xml配置文件中查找路径所对应的映射信息,然后来访问servlet。
不过当我们像上面那样访问index.html时,并没有对该路径进行映射呢?这时候其实是访问的默认servlet(缺省servlet)。默认servlet用于处理其它servlet都不处理的请求,也就是说,servlet服务器在接收到访问请求时,如果在web.xml文件中找不到匹配的 元素的url,就会将访问请求交给默认servlet处理。当我们访问服务器上的某个静态html文件或者图片时,实际上都是在访问这个默认servlet。
①在地址栏输入url后,浏览器会搜索自身的DNS缓存,看自身的缓存中是否有www.xxx.com 对应的条目,而且没有过期,如果有且没有过期则解析到此结束。
②如果浏览器自身的缓存里面没有找到对应的条目,那么浏览器会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束。
③如果在Windows系统的DNS缓存也没有找到,那么尝试读取hosts文件,看看这里面有没有该域名对应的IP地址,如果有则解析成功。
④如果在hosts文件中也没有找到对应的条目,浏览器就会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器发起域名解析请求,运营商的DNS服务器首先查找自身的缓存,找到对应的条目,且没有过期,则解析成功。
⑤域名解析的整个过称就是寻址的过称,解析到对应的IP地址之后,就开始搜寻该物理机上的文件目录
上面两段参考知乎答案 在浏览器地址栏输入一个URL后回车,背后会进行哪些技术步骤?
服务器响应
这一步需要我们自己编写servlet来处理请求。
实现servlet
- 实现javax.servlet.Servlet接口;
- 继承javax.servlet.GenericServlet类;
- 继承javax.servlet.http.HttpServlet类;
javax.servlet.Servlet接口
该接口从设计上采用了设计模式中的模板模式,定义了几个接口和抽象类。通过实现该接口来实现servlet,需要实现该接口的五个方法。
该接口定义了三个生命周期的方法:
1.init()
2.service()
3.destory()
以及另外两个返回servlet相关信息的方法。
三个生命周期方法将在servlet对象特定的状态下被WEB服务器调用。
因为实现该接口必须实现接口定义的所有方法,包括某些不用的方法也得实现。所以就有了使用更为方便的javax.servlet.GenericServlet类。
javax.servlet.GenericServlet类
该类采用了缺省适配器模式,是实现了servlet接口所有方法的类,只不过方法体为空。我们通过继承此类实现servlet,只需重写需要的方法即可。
此类中只有service()属于抽象方法,当我们通过继承此类实现servlet时只需要重写这一个方法即可,其它方法可重写可不重写。
此类除了实现了servlet接口的方法,还定义了一些其它的方法。
javax.servlet.http.HttpServlet类
HttpServlet类是GenericServlet类的子类,抽象程度更高。
web应用与客户端的交互方式有http等多种协议,不过大多数web应用使用的都是http协议。HttpServlet类专门创建应用于Http的servlet。
在此类中,重写了service()方法,通过请求的不同,定义了不同的doXXX()方法。
同样,在Http中,最常用的请求方式使get和post,所以我们通过继承此类编写servlet时,重写doGet(),doPost()方法即可。
servlet的生命周期
若Http请求要访问servlet,服务器首先会解析请求,检查内存中是否已经有了该Servlet对象,若有则直接使用,若无则创建,并调用init()方法实现Servlet的初始化工作。
每一次访问该Servlet,调用一次service()方法。http请求要求访问,服务器为这个请求创建代表http请求的ServletRequest对象和代表http响应的HttpResponse对象,将他们作为参数传给Servlet的service()方法。service()方法从ServletRequest对象中获得客户请求信息,并进行处理,再由ServletResponse对象生成响应结果。
Serlet一旦被创建,会驻留在内存中等待客户端的访问,知道服务器关闭或web应用被移出服务器时,Servlet对象才会被销毁。
返回处理结果
我们可以通过Servlet利用输出流把Servlet处理的结果(如返回的数据)直接显示出来,以此动态生成Html页面,但是这样如果需要稍微排下版的话,就不得不自己打印输出很多的HTML标签。这样还将静态显示的内容和动态产生内容的代码混合在一起了。
JSP
jsp通过在标准的HTML页面中插入java代码,其静态部分不需要java程序控制。
jsp是servlet的一种特殊形式,每个jsp就是一个servlet实例,jsp页面由系统编译成servlet,servlet再负责响应用户请求。
当用户第一次访问jsp页面时,该页面都会被JsqServlet翻译成一个Servlet源文件,然后将源文件编译为.class文件。
Servlet源文件继承了HttpJspBase类,HttpJspBase类是HttpServlet类的一个子类。
jsp页面中将html和java代码耦合在一起,代码的可读性很差,难以修改和维护。
为了减少jsp里的java代码,调用javabean组件来显示数据。
不过这样jsp中还是有不少java代码。
于是推出了JSP EL来进一步减少jsp中的代码。
参考:Java Web中实现Servlet的方式
Web服务器怎么解析URL
怎么通过URL访问到服务器上的物理文件
在浏览器地址栏输入一个URL后回车,背后会进行哪些技术步骤?
最后
以上就是纯情纸鹤为你收集整理的从url访问服务器资源讨论javaweb中的servlet这里的全部内容,希望文章能够帮你解决从url访问服务器资源讨论javaweb中的servlet这里所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复