📄 servlet_basic.txt
字号:
第一章 servlet_basic1、CGI(Common Gateway Interface 公共网关接口): CGI是一段程序,它运行在Server上,提供同客户端信息交互的一个接口。这样说大概还不好理解。那么我们看一个实际例子: 现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户段输入一些信息,如名字之类的东西。接着用户按一下“留言”(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI目录下特定的cgi程序中,于是cgi程序在服务器上按照预定的方法进行处理。可以把用户提交的信息存入指定的文件中或者存入到数据库中。然后cgi程序给客户端发送一个信息,表示请求的任务已经结束,此时用户在浏览器里将看到“留言结束”的字样提示,整个过程结束。 使用C、Shell、Perl和Visual Basic等多种语言都可以实现它。值得特别指出的,有一种叫Perl的语言。其前身是属于Unix专用的高级语言,其具有强大的字符串处理能力而成为现在写CGI,特别是表单类程序的首选。 2、CGI的优缺点 CGI优点:使用C、Shell、Perl和Visual Basic等多种语言都可以实现它。支持多种语言,易于程序员快速掌握。大多数web服务器都支持CGI脚本。 CGI缺点:当服务器端的CGI应用程序接受到客户端的一个请求时,每一个请求都将启动一个新的进程。当有大量用户请求调用服务器端的CGI应用程序时,就会产生许多个进程,每个进程都会占用服务器端的系统资源,都要为其分配一个内存空间,这样将会导致服务器端的负载大大增加,会严重影响服务器的系统性能,严重时将会引起服务器的瘫痪。另外,CGI是Server和Clinet信息交互的接口,所以对于不同的Server,CGI程序的移值是一个很复杂的问题。一般对于不同的Server,同一个CGI程序就不能通用,实际上这就是CGI程序最复杂的地方。3、请求到CGI及response给客户端的步骤: 1)客户端(浏览器)向服务器端发送一个基于HTTP协议的request 2)web服务器(Tomcat)接受到请求后将请求转发给部署在服务器端的CGI,CGI调用相应的程序并产生一 个新的进程去处理请求。 3)该进程去执行相应CGI脚本程序(或者将用户的信息插入数据库,或者从数据库中查询数据) 4)将处理结果(动态生成一个HTML)交给web服务器 5)web服务器将结果回发(HTTP response)给客户端(浏览器)4、servlet servlet是运行在web服务器上的Java类,多个servelt类以及其它的资源组成了一个部署在web服务器端的web应用程序,用于响应客户端的请求,动态地生成HTML WEB页面作为对请求地响应。servlet在Web服务器上运行并扩展了该服务器的能力。也可以说,servlet是web组件或者J2EE组件(有自己的API和技术规范,是J2EE技术规范的一部分),部署在web服务器上,能在请求/响应的通信模式下有效地工作。 1997年,servet作为web服务器端的组件被SUN公司推出。现在,servlet已经称为服务器端稳定有效地组件,能有效地替代CGI程序,在1999年12月推出servlet2.2后,servlet得到了广泛地运用,servlet规范也随之地发展。2001年9月发布的servlet2.3版是servlet规范发展史上又一里程碑的事件。现在地servlet版本是servlet2.4。 Servlet采用请求-响应模式提供Web服务。当客户端发送请求至服务器时,服务器将请求信息发送给Servlet,Servlet生成响应内容并将其传给Server,然后再由Server将响应返回给客户端。5、Servlet的请求和应答: 1)客户端向服务器发出一个HTTP协议的request,Web服务器接受到这个客户端的请求后,首先判断被请求的servlet是否已经被装载进虚拟机中并已经产生了一个servlet的实例对象(只有一个实例对象)。 2)若没有则先将请求的那个servlet装载进虚拟机(ClassLoader)中并实例化出一个servlet的实例对象,若已经有一个servlet的实例对象存在则直接将请求转发给这个servlet实例对象。 3)产生一个服务线程去处理客户端的请求 4)将处理结果(动态生成一个HTML)交给Web服务器 5)由Web服务器将处理结果发送给客户端6、 CGI和servlet的优缺点的比较 CGI优点:几乎所有的HITP服务器都支持CGI,使用C、Shell、Perl和Visual Basic等多种语言都可以实现它。支持多种语言,易于程序员快速掌握。几乎可以可在任何操作系统上实现。 CGI缺点:CGI应用程序是作为一个独立的外部应用程序来运行的。当HTTP服务器收到对CGI程序的请求时,每一个请求都将启动一个新的进程。当有大量用户请求调用CGI应用程序时,多个CGI应用程序的执行将导致服务器的大量负载,会严重影响服务器系统性能。另外,CGI是Server和Clinet信息交互的接口,所以对于不同的Server,CGI程序的移值是一个很复杂的问题。一般对于不同的Server,同一个CGI程序就不能通用,实际上这就是CGI程序最复杂的地方。 Servlet提供了Java应用程序的所有优势:——可移植、稳健、易开发。 Servlet主要优势在于:产生一个也是唯一一个的实例对象,然后继续运行于后台,等待以后请求。每个请求将生成一个线程,而不是一个完成的进程。一般,Servlet进程只是在Web Server卸载时被卸。 Servlet缺点:动态生成HTML Web页面十分的麻烦,采用jsp来替代动态页面。 Servlet与CGI的比较: ◆Servlet技术要比传统的CGI技术效率更高。 传统的CGI对每一个HTTP请求都要产生一个新的进程;而对Java Servlet来说,在Java虚拟机上,每一个请求由一个Java线程thread响应,而不是一个操作系统进程。 ◆Servlet技术要比传统的CGI技术功能强大。 Java Servlet能够方便的处理HTML表单数据,也能够读取和设置HTTP头信息,并且能够处理Cookies、跟踪Sessions等其他大量功能。 ◆Servlet是模块化的。 每一个Servlet可以执行一个特定任务,并且可以将他们并在一起工作。 ◆多个Servlet之间能共享数据。 它能方便地实现管理从Request到Request的请求,简化Session和获取前一页面。 ◆Servlet技术要比传统的CGI技术调用时间要短得多。 CGI程序是作为一个进程来运行的,加载到内存的时间不一样,servlet时间短,调用速度块。 ◆Servlet技术要比传统的CGI技术安全。 Java定义有完整的安全机制,包括SSI,CA认证、安全政策等规范。 ◆Servlet技术具有Java技术的所有优点。 Servlet是用Java编写的,Servlet具有Java技术的几乎所有的优点,如可移植性、稳健性以及易开发、易维护等特性。7、http协议通常包括的方法: get、post、head、options、put、 delete、trace、connect。jd0604wLR8ZC-444-55-44678657593852237http://localhost:8080/sevlet_jd0604/servlet/HelloWorldServletunix:CATALINA_HOME=/opt/jakarta-tomcat-5.0.28CLASSPATH=.:$CATALINA_HOME/common/lib/servlet-api.jarexport CATALINA_HOME CLASSPATHwindow:CLASSPATH=.;%CATALINA_HOME%/common/lib/servlet-api.jarls -al .bashrcvi .bash_profile. .bash_profile./startup.shjar -cvf date.war *jar -xvf date.warname:jack:xh:0001:gender:malename:kevin:xh:0002:gender:male10、容器(Container)是什么? 生产Web服务器的技术厂商会在它们的产品中加入容器,把容器作为自己产品的组成部分,以便于程序员开发基于servlet的Web应用程序。容器是一个运行在web服务器上的一个环境,专门用来管理servlet或者jsp的。但是从技术角度上看,容器是运行在Web服务器(一个进程)中的一个线程。容器分为两种:Web容器和EJB容器。Web容器专门管理servlet和jsp组件,EJB容器专门管理EJB组件。我们通常会说servlet容器或者jsp容器,其实就是Web容器。 Catalina就是Tomcat服务器的一个servlet容器(Web容器)11、ServletContext 对应于部署在web服务器上的一个应用程序的上下文环境,一个应用程序只有一个上下文环境,在该应用程序中运行的所有的servlet都共享了这个上下文环境。 ServletContext ctx = getServletContext();getServletContext():定义在GenericServlet类中ServletContext:是个接口记录日志:ctx.log(String message) ctx.log(String message,Throwable cause); ContextPath:/sevlet_jd0604(应用程序的上下文路径) ServletPath:/servlet/HelloWorldServlet(被请求的servlet的url路径)12、Tomcat的目录结构 1) bin:包含着用于启动和停止Tomcat的可执行批处理文件(用于window)和SHELL脚本(用于UNIX),以及其它一些批处理文件和SHELL脚本。这里还有启动Tomcat的第一步需要的JAR文件bootstrap.jar。 2) common:这里包含着部署在Tomcat服务器上应用程序所需要的一些共用jar文件,位于common\lib目录,common\classes目录存放共用的.class字节码文件。在这些JAR文件中要注意serlvet-api.jar,这里包含着servlet2.4和jsp2.0技术规范中定义的类,在编译使用这些API类的时候,需要把servlet-api.jar列在环境变量CLASSPATH中。 3) conf:其中包含着Tomcat的配置文件,主要是server.xml、web.xml和tomcat-users.xml等 4) logs:包含着Tomcat的日志文件 5) server:包含着运行Catalina容器所需要的文件以及类库 6) shared:共享的.class和.jar 7) temp:临时的目录 8) webapps:这是Tomcat查找要部署Web应用程序的位置。放在这里的任何war文件或者存储在此目录中的任何扩展Web应用程序的目录结构,都将在Tomcat启动的时候自动被部署。部署相应的应用程序时使用的URL路径将对应着该war文件或者目录的名字。例如,如果你在webapps中放置了一个myapplication.war文件或者一个myapplication目录,Tomcat将自动把它部署为http://localhost:8080/myapplication/。 9) work:在处理jsp页面时由Tomcat来存储临时的文件,主要时.java源文件和编译生成的.class文件。13、客户端发起请求到服务器处理请求的流程 1) 客户端发出一个HTTP协议的request,例如在地址栏中输入 http://localhost:8080/servlet_jd0604/servlet/HelloWorld 2) web容器根据已经部署好的所有应用程序中找到请求的那个应用程序(这里是servlet_jd0604),然后从WEB-INF下面的web.xml中的<url-pattern>去查找对应的servletpath(/servlet/HelloWorld)。 3) 若没有找到,则返回404错误页面给客户端,若找到,则根据<servlet-name>对应的名字找到<serlvet-class>所对应的serlvet,容器再将请求转发给这个servlet,由它处理请求。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -