Servlet,JSP(1)(对servlet应用架构,http,url/url的简介)
来源:Servlet、JSP和Spring MVC初学指南(所有示例代码基于Servlet 3.0、JSP 2.3以及Spring MVC 4)
简介:
Java Servlet技术简称Servlet技术,是Java开发Web应用的底层技术。
由Sun公司于1996年发布,用来代替CGI——当时生成Web动态内容的主流技术。
CGI技术的主要问题是每个Web请求都需要新启动一个进程来处理。
创建进程会消耗不少CPU周期,导致难以编写可扩展的CGI程序。
而Servlet有着比CGI程序更好的性能,因为Servlet在创建后(处理第一个请求时)就一直保持在内存中。
servlet版本:

补充:
Servlet 3.0 作为 Java EE 6 规范体系中一员 ,随着 Java EE 6 规范一起发布。该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署。其中有几项特性的引入让开发者感到非常兴奋,同时也获得了 Java 社区的一片赞誉之声: 异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程。在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器。针对业务处理较耗时的情况,这将大大减少服务器资源的占用,并且提高并发处理速度。 新增的注解支持:该版本新增了若干注解,用于简化 Servlet、过滤器(Filter)和监听器(Listener)的声明,这使得 web.xml 部署描述文件从该版本开始不再是必选的了。 可插性支持:熟悉 Struts2 的开发者一定会对其通过插件的方式与包括 Spring 在内的各种常用框架的整合特性记忆犹新。将相应的插件封装成 JAR 包并放在类路径下,Struts2 运行时便能自动加载这些插件。现在 Servlet 3.0 提供了类似的特性,开发者可以通过插件的方式很方便的扩充已有 Web 应用的功能,而不需要修改原有的应用。 Servlet 4.0 从3.1到4.0将是对Servlet 协议的一次大改动,而改动的关键之处在于对HTTP/2的支持。HTTP2将是是继上世纪末HTTP1.1协议规范化以来首个HTTP协议新版本,相对于HTTP1.1,HTTP2将带来许多的增强。在草案提议中,Shing Wai列举出了一些HTTP2的新特性,而这些特性也正是他希望在Servlet 4.0 API中实现并暴露给用户的新功能,这些新特性如下: 1.请求/响应复用(Request/Response multiplexing) 2.流的优先级(Stream Prioritization) 3.服务器推送(Server Push) 4.HTTP1.1升级(Upgrade from HTTP 1.1)
1,Servlet/JSP应用架构
Servlet是一个Java程序,一个Servlet应用有一个或多个Servlet程序。
JSP页面会被转换和编译成Servlet程序。
Servlet应用无法独立运行,必须运行在Servlet容器中。
Servlet容器将用户的请求传递给Servlet应用,并将结果返回给用户。
由于大部分Servlet应用都包含多个JSP页面,因此更准确地说是“Servlet/JSP应用”。
Web服务器和Web客户端间通过HTTP协议通信,因此Web服务器也叫HTTP服务器。
Servlet/JSP容器是一个可以同时处理Servlet和静态内容的Web容器。 过去,由于通常认为HTTP服务器比Servlet/JSP容器更加可靠,因此人们习惯将Servlet/JSP容器作为HTTP服务器如Apache HTTP服务器的一个模块。 这种模式下,HTTP服务器用来处理静态资源,而Servlet/JSP容器则负责生成动态内容。
如今,Servlet/JSP容器更加成熟可靠,并被广泛地独立部署。 Apache Tomcat和Jetty是当前最流行的Servlet/JSP容器,并且它们是免费而且开源的。 你可以访问 http://tomcat.apache.org 以及http://www.eclipse.org/jetty下载。
Servlet和JSP只是Java企业版中众多技术中的两个
其他Java EE技术还有Java消息服务,企业Java对象、JavaServer Faces以及Java持久化等, 完整的Java EE技术列表可以访问如下地址: http://www.oracle.com/technetwork/java/javaee/tech/index.html 要运行Java EE应用,需要一个Java EE容器, 例如:GlassFish、JBoss、Oracle Weblogic或者IBMWebSphere。 诚然,我们可以将一个Servlet/JSP应用部署到一个Java EE容器上,但一个Servlet/JSP容器就已经满足需要了,并且更加轻量。 当然,Tomcat和Jetty不是Java EE容器,因此无法运行EJB或JMS技术。
ps:总结:
1,servlet需要servlet容器才能运行,比如:tomcat和jetty 2,servlet是j2ee技术的一部分,也可以部署在j2ee容器中,比如:jboss和weblogic和websphere, 但这些容器同时支持其他很多j2ee技术,如果只用于servlet容器显得臃肿了。
2,HTTP
HTTP协议使得Web服务器与浏览器之间可以通过互联网或内网进行数据交互。万维网联盟(W3C),作为一个制定标准的国际社区,负责和维护HTTP协议。 HTTP第一版是0.9,之后是HTTP 1.0,HTTP 1.1,现在的版本是HTTP/2了
HTTP 1.1版本的RFC编号是2616,下载地址为http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf。
Web服务器7×24小时不间断运行,并等待HTTP客户端(通常是Web浏览器)来连接并请求资源。
通常,由客户端发起一个连接,服务端不会主动连接客户端。
2011年,标准化组织IETF发布了WebSocket协议,即RFC 6455规范。
该协议允许一个HTTP连接升级为WebSocket连接,支持双向通信,这就使得服务端可以通过WebSocket协议主动发起同客户端的会话通信。
ps:总结:
B/S模式,之前的http协议是单项的,现在的websocket协议提供双向通信。
HTTP的URL格式如下:
protocol://[host.]domain[:port][/context][/resource][?query string]
URL中的Host部分用来表示在互联网或内网中一个唯一的地址,
例如:http://yahoo.com(没有host)所访问的地址完全不同于http://mail.yahoo.com (有host)。 多年以来,作为最受欢迎的主机名,www是默认的主机名,通常,http://www.domainName 会被映射到http://domainName 。
HTTP的默认端口是80端口。因此,对于采用80端口的Web服务器,可以无须输入端口号。 但有时候,Web服务器并未运行在80端口上,此时必须输入相应的端口号。 例如:Tomcat服务器的默认端口号是8080,为了能正确访问,必须提供输入端口号:http://localhost:8080
ps:总结:
1,输入网址时候 “www” 这个主机名可以省略。 2,tomcat的默认端口是8080
3, 关于url和uri的区别:
URI:统一资源标志符(Uniform Resource Identifier)
URL:统一资源定位符(uniform resource location)
URI是一种宽泛的含义更广的定义,而URL则是URI的一个子集,就是说URL是URI的一部分。
(ps:可以看成URL是URI的子类)
他们之间最明显的不同就是在:
java.net.URI你只能看到他的一些属性,他只是表示一个位置,但是你没有办法通过URI获取到这个对象的流,但是URL就不同了。
java.net.URL该类提供方法(openConnection()),通过该方法我们可以通过IO流操作他。
补充:URI与URL详解
但特别注意:在servlet中从请求中获取到的URL和URI却是不同与之前概念中的包含关系:

从上面可以看出,URI却属于URL的一部分!

浙公网安备 33010602011771号