1.jsp 和 servlet
2.web基础--Servlet接口
3.Servlet源码和Tomcat源码解析
4.javaä¸JSPåServletçåºå«ï¼
jsp 和 servlet
其实说白了JSP和SERVLET到底什么区别呢,源码JSP就象宾馆前台的包下服务员,要长的源码不错,让顾客一看就觉得比较舒服,包下他主要就是源码负责显示这个宾馆的形象的.而SERVLET就象部门经理,要处理各种各样的包下stl算法源码业务和事情,而bean呢就象是源码高层领导了,他负责从部门经理处获得信息,包下报告给董事会,源码或者把董事会的包下建议和计划吩咐下去.他们分工合作,各干其职.不知道同志们明白没有.
具体的源码看下下面吧.
JSP和SERVLET到底在应用上有什么区别,很多人搞不清楚。包下我来胡扯几句吧。源码简单的包下说,SUN首先发展出SERVLET,源码其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI方式,是一句一句输出,所以,编写和修改HTML非常不方便。
后来SUN推出了类似于ASP的镶嵌型的JSP,把JSP TAG镶嵌到HTML语句中,这样,就大大简化和方便了网页的设计和修改。新型的网络语言如ASP,PHP,JSP都是镶嵌型的SCRIPT语言。
从网络三层结构的角度看,一个网络项目最少分三层:data layer,business layer, presentation layer。当然也可以更复杂。eclipse 自带源码SERVLET用来写business layer是很强大的,但是对于写presentation layer就很不方便。JSP则主要是为了方便写presentation layer而设计的。当然也可以写business layer。写惯了ASP,PHP,CGI的朋友,经常会不自觉的把presentation layer和business layer混在一起。就象前面那个朋友,把数据库处理信息放到JSP中,其实,它应该放在business layer中。
根据SUN自己的推荐,JSP中应该仅仅存放与presentation layer有关的东东,也就是说,只放输出HTML网页的部份。而所有的数据计算,数据分析,数据库联结处理,统统是属于business layer,应该放在JAVA BEANS中。通过JSP调用JAVA BEANS,实现两层的整合。
实际上,微软前不久推出的DNA技术,简单说,就是ASP+COM/DCOM技术。与JSP+BEANS完全类似,所有的presentation layer由ASP完成,所有的business layer由COM/DCOM完成。通过调用,flash麻将 源码实现整合。
为什么要采用这些组件技术呢?因为单纯的ASP/JSP语言是非常低效率执行的,如果出现大量用户点击,纯SCRIPT语言很快就到达了他的功能上限,而组件技术就能大幅度提高功能上限,加快执行速度。
另外一方面,纯SCRIPT语言将presentation layer和business layer混在一起,造成修改不方便,并且代码不能重复利用。如果想修改一个地方,经常会牵涉到十几页CODE,采用组件技术就只改组件就可以了。
综上所述,SERVLET是一个早期的不完善的产品,写business layer很好,写presentation layer就很臭,并且两层混杂。
所以,推出JSP+BAEN,用JSP写presentation layer,用BAEN写business layer。SUN自己的意思也是将来用JSP替代SERVLET。
可是,这不是说,学了SERVLET没用,实际上,你还是应该从SERVLET入门,再上JSP,再上JSP+BEAN。
强调的是:学了JSP,不会用JAVA BEAN并进行整合,pentaho源码安装等于没学。大家多花点力气在JSP+BEAN上。
在补充几句:
我们可以看到,当ASP+COM和JSP+BEAN都采用组件技术后,所有的组件都是先进行编译,并驻留内存,然后快速执行。所以,大家经常吹的SERVLET/JSP先编译驻内存后执行的速度优势就没有了。
反之,ASP+COM+IIS+NT紧密整合,应该会有较大的速度优势呈现。而且,ASP+COM+IIS+NT开发效率非常高,虽然BUG很多。
那么,为什么还用JSP+BEAN?因为JAVA实在前途远大。微软分拆后,操作系统将群雄并起,应用软件的开发商必定要找一个通用开发语言进行开发,JAVA一统天下的时机就到了。如果微软分拆顺利,从中分出的应用软件公司将成为JAVA的新领导者。目前的JAVA大头SUN和IBM都死气沉沉,令人失望。希望新公司能注入新活力。不过,新公司很有可能和旧SUN展开JAVA标准大战,双方各自制定标准,影响JAVA夸平台。
另外,保养公司源码现在的机器速度越来越快,JAVA的速度劣势很快就可以被克服。
web基础--Servlet接口
Servlet接口作为Java Servlet API的核心抽象,是所有Servlet类实现的基础。Servlet类需要直接或间接实现该接口,通常通过继承实现了Servlet接口的类或其子类来复用共性功能。Servlet接口中定义了用于客户端请求处理的service方法,当接收到请求时,此方法由Servlet容器路由至一个实例上。
在处理并发请求时,通常需要Web开发人员设计适合多线程执行的Servlet,确保service方法在特定时间点能处理多线程并发执行。Web容器对于并发请求通常使用同一个Servlet进行处理,并在不同线程中并发执行service方法。
HttpServlet抽象类在Servlet接口的基础上添加了与HTTP协议相关的功能,通过自动转发至相应的协议相关处理方法。这些方法包括处理HTTP GET、POST、PUT、DELETE、HEAD、OPTIONS和TRACE请求。对于基于HTTP协议的Servlet,开发人员通常只需实现doGet和doPost请求处理方法,其他处理方法的使用方式与其类似。
Servlet接口的详细描述可参考Java Servlet规范(版本:3.1),而源代码可以在javax.servlet-api-3.1.0-sources.jar中找到。在HttpServlet类中,有两个重载的service方法,实现了Servlet接口终端service方法的调用,并能根据HTTP请求类型进行请求分发。
一个典型的GET请求的访问路径包括以下步骤:首先,Servlet容器调用HttpServlet.service方法;其次,方法内部根据请求类型自动转发至相应的协议相关处理方法;最后,用户自定义的ControllerServlet类的doGet方法被调用,进行实际的请求处理。
Servlet源码和Tomcat源码解析
画的不好,请将就。
我一般用的IDEA,很久没用Eclipse了,所以刚开始怎么继承不了HttpServlet类,然后看了一眼我创建的是Maven项目,然后去Maven仓库粘贴了Servlet的坐标进来。
maven坐标获取,直接百度maven仓库,选择第二个。
然后搜索Servlet选择第二个。
创建一个类,不是接口,继承下HttpServlet。
Servlet接口包括:init()、service()、destroy()和getServletInfo()。其中init()方法负责初始化Servlet对象,容器创建好Servlet对象后会调用此方法进行初始化;service()方法处理客户请求并返回响应,容器接收到客户端要求访问特定的Servlet请求时会调用此方法;destroy()方法负责释放Servlet对象占用的资源;getServletInfo()方法返回一个字符串,包含Servlet的创建者、版本和版权等信息。
ServletConfig接口包含:getServletName()、getServletContext()、getInitParameter(String var1)和getInitParameterNames()。其中getServletName()用于获取Servlet名称,getServletContext()获取Servlet上下文对象,getInitParameter(String var1)获取配置参数,getInitParameterNames()返回所有配置参数的名字集合。
GenericServlet抽象类实现了Servlet接口的同时,也实现了ServletConfig接口和Serializable接口。它提供了一个无参构造方法和一个实现init()方法的构造方法。GenericServlet中的init()方法保存了传递的ServletConfig对象引用,并调用了自身的无参init()方法。它还实现了service()方法,这是Servlet接口中的唯一没有实现的抽象方法,由子类具体实现。
HttpServlet是Servlet的默认实现,它是与具体协议无关的。它继承了GenericServlet,并实现了Servlet接口和ServletConfig接口。HttpServlet提供了一个无参的init()方法、一个无参的destroy()方法、一个实现了getServletConfig()方法的方法、一个返回空字符串的getServletInfo()方法、以及一个实现了service()方法的抽象方法。service()方法的实现交给了子类,以便在基于HTTP协议的Web开发中具体实现。
Tomcat的底层源码解析如下:
Server作为整个Tomcat服务器的代表,包含至少一个Service组件,用于提供特定服务。配置文件中明确展示了如何监听特定端口(如)以启动服务。
Service是逻辑功能层,一个Server可以包含多个Service。Service接收客户端请求,解析请求,完成业务逻辑,然后将处理结果返回给客户端。Service通常提供start方法打开服务Socket连接和监听服务端口,以及stop方法停止服务并释放网络资源。
Connector称为连接器,是Service的核心组件之一。一个Service可以有多个Connector,用于接收客户端请求,将请求封装成Request和Response,然后交给Container进行处理。Connector完成请求处理后,将结果返回给客户端。
Container是Service的另一个核心组件,按照层级有Engine、Host、Context、Wrapper四种。一个Service只有一个Engine,它是整个Servlet引擎,负责执行业务逻辑。Engine下可以包含多个Host,一个Tomcat实例可以配置多个虚拟主机,默认情况下在conf/server.xml配置文件中定义了一个名为Catalina的Engine。Engine包含多个Host的设计使得一个服务器实例可以提供多个域名的服务。
Host代表一个站点,可以称为虚拟主机,一个Host可以配置多个Context。在server.xml文件中的默认配置为appBase=webapps,这意味着webapps目录中的war包将自动解压,autoDeploy=true属性指定对加入到appBase目录的war包进行自动部署。
Context代表一个应用程序,即日常开发中的Web程序或一个WEB-INF目录及其下面的web.xml文件。每个运行的Web应用程序最终以Context的形式存在,每个Context都有一个根路径和请求路径。与Host的区别在于,Context代表一个应用,如默认配置下webapps目录下的每个目录都是一个应用,其中ROOT目录存放主应用,其他目录存放子应用,而整个webapps目录是一个站点。
Tomcat的启动流程遵循标准化流程,入口是BootStrap,按照Lifecycle接口定义进行启动。首先调用init()方法逐级初始化,接着调用start()方法启动服务,同时伴随着生命周期状态变更事件的触发。
启动文件分析Startup.bat:
设置CLASSPATH和MAINCLASS为启动类,并指定ACTION为启动。
Bootstrap作为整个启动时的入口,在main方法中使用bootstrap.init()初始化容器相关类加载器,并创建Catalina实例,然后启动Catalina线程。
Catalina Lifecycle接口提供了一种统一管理对象生命周期的接口,通过Lifecycle、LifecycleListener、LifecycleEvent接口,Catalina实现了对Tomcat各种组件、容器统一的启动和停止方式。在Tomcat服务开启过程中,启动的一系列组件、容器都实现了org.apache.catalina.Lifecycle接口,其中的init()、start()和stop()方法实现了统一的启动和停止管理。
加载方法解析server.xml配置文件,加载Server、Service、Connector、Container、Engine、Host、Context、Wrapper一系列容器,加载完成后调用initialize()开启新的Server实例。
使用Digester类解析server.xml文件,通过demon.start()方法调用Catalina的start方法。Catalina实例执行start方法,包括加载server.xml配置、初始化Server的过程以及开启服务、初始化并开启一系列组件、子容器的过程。
StandardServer实例调用initialize()方法初始化Tomcat容器的一系列组件。在容器初始化时,会调用其子容器的initialize()方法,初始化子容器。初始化顺序为StandardServer、StandardService、StandardEngine、Connector。每个容器在初始化自身相关设置的同时,将子容器初始化。
javaä¸JSPåServletçåºå«ï¼
ä¸. Servletæ¯ä»ä¹?
客æ·æº/æå¡å¨è®¡ç®çåå±ãJavaæä¾äºä¸æ´å¥å®¢æ·æº/æå¡å¨è§£å³æ¹æ¡ï¼å¨è¿ä¸ªæ¹æ¡ä¸ï¼ç¨åºå¯ä»¥èªå¨å°ä¸è½½å°å®¢æ·ç«¯å¹¶æ§è¡ï¼è¿å°±æ¯appletãä½æ¯å®ä» ä» æ¯é®é¢çä¸åãé®é¢çå¦ä¸åå°±æ¯Servletã
servletå¯ä»¥è¢«è®¤ä¸ºæ¯æå¡å¨ç«¯çappletãservlet被Webæå¡å¨å è½½åæ§è¡ï¼å°±å¦åapplet被æµè§å¨å è½½åæ§è¡ä¸æ ·ãservletä»å®¢æ·ç«¯(éè¿Webæå¡å¨)æ¥æ¶è¯·æ±ï¼æ§è¡æç§ä½ä¸ï¼ç¶åè¿åç»æã使ç¨servletçåºæ¬æµç¨å¦ä¸ï¼
·客æ·ç«¯éè¿HTTPæåºè¯·æ±.
·Webæå¡å¨æ¥æ¶è¯¥è¯·æ±å¹¶å°å ¶åç»servletãå¦æè¿ä¸ªservletå°æªè¢«å è½½ï¼Webæå¡å¨å°æå®å è½½å°Javaèææºå¹¶ä¸æ§è¡å®ã
·servletå°æ¥æ¶è¯¥HTTP请æ±å¹¶æ§è¡æç§å¤çã
·servletå°åWebæå¡å¨è¿ååºçã
·Webæå¡å¨å°ä»servletæ¶å°çåºçåéç»å®¢æ·ç«¯ã
ç±äºservletæ¯å¨æå¡å¨ä¸æ§è¡ï¼é常ä¸appletç¸å ³çå®å ¨æ§çé®é¢å¹¶ä¸éå®ç°ãè¦æ³¨æçæ¯Webæµè§å¨å¹¶ä¸ç´æ¥åservletéä¿¡ï¼servletæ¯ç±Webæå¡å¨å è½½åæ§è¡çã
èservletæ¯ç¨Javaç¼åçï¼æ以å®ä»¬ä¸å¼å§å°±æ¯å¹³å°æ å ³çãè¿æ ·ï¼Javaç¼åä¸æ¬¡å°±å¯ä»¥å¨ä»»ä½å¹³å°è¿è¡(write once,run anywhere)çæ¿è¯ºå°±åæ ·å¯ä»¥å¨æå¡å¨ä¸å®ç°äºãservletè¿æä¸äºCGIèæ¬æä¸å ·å¤çç¬ç¹ä¼ç¹ï¼ (æ¬äººå¯¹CGI并ä¸æ¯ååäºè§£ï¼æ以è¿äºç¹ç¹ä¸è½å®å ¨çä½ä¼å°ï¼è¿ä¹æ¯æèªè®ºåçè´´åï¼è¯·è§è° )
servletæ¯æä¹ çãservletåªéWebæå¡å¨å è½½ä¸æ¬¡ï¼èä¸å¯ä»¥å¨ä¸å请æ±ä¹é´ä¿ææå¡(ä¾å¦ä¸æ¬¡æ°æ®åºè¿æ¥)ãä¸ä¹ç¸åï¼CGIèæ¬æ¯çæçãç¬æçãæ¯ä¸æ¬¡å¯¹CGIèæ¬ç请æ±ï¼é½ä¼ä½¿Webæå¡å¨å 载并æ§è¡è¯¥èæ¬ãä¸æ¦è¿ä¸ªCGIèæ¬è¿è¡ç»æï¼å®å°±ä¼è¢«ä»å åä¸æ¸ é¤ï¼ç¶åå°ç»æè¿åå°å®¢æ·ç«¯ãCGIèæ¬çæ¯ä¸æ¬¡ä½¿ç¨ï¼é½ä¼é æç¨åºåå§åè¿ç¨(ä¾å¦è¿æ¥æ°æ®åº)çéå¤æ§è¡ã
servletæ¯ä¸å¹³å°æ å ³çãå¦åæè¿°ï¼servletæ¯ç¨Javaç¼åçï¼å®èªç¶ä¹ç»§æ¿äºJavaçå¹³å°æ å ³æ§ã
servletæ¯å¯æ©å±çãç±äºservletæ¯ç¨Javaç¼åçï¼å®å°±å ·å¤äºJavaæè½å¸¦æ¥çææä¼ç¹ãJavaæ¯å¥å£®çãé¢å对象çç¼ç¨è¯è¨ï¼å®å¾å®¹ææ©å±ä»¥éåºä½ çéæ±ãservletèªç¶ä¹å ·å¤äºè¿äºç¹å¾ã
servletæ¯å®å ¨çãä»å¤çè°ç¨ä¸ä¸ªservletçæä¸æ¹æ³å°±æ¯éè¿Webæå¡å¨ãè¿æä¾äºé«æ°´å¹³çå®å ¨æ§ä¿éï¼å°¤å ¶æ¯å¨ä½ çWebæå¡å¨æé²ç«å¢ä¿æ¤çæ¶åã
ãã setvletå¯ä»¥å¨å¤ç§å¤æ ·ç客æ·æºä¸ä½¿ç¨ãç±äºservletæ¯ç¨Javaç¼åçï¼æä»¥ä½ å¯ä»¥å¾æ¹ä¾¿å°å¨HTMLä¸ä½¿ç¨å®ä»¬ï¼å°±åä½ ä½¿ç¨appletä¸æ ·ã
é£ä¹ï¼Servletæ¯ææ ·æ§è¡çï¼ææ ·æ¥åä¸ä¸ªServlet,å®çåºæ¬æ¶ææ¯æä¹æ ·çï¼
è¿äºé®é¢ï¼å°å¨åé¢é¨åç»äºä»ç»ã
äº.JSPä¸Servlet
ç°å¨å·²ç»å¯¹Servletæäºå¤§æ¦çäºè§£ï¼ç°å¨æ们就æ¥è¯´è¯´JSPåServletçå ³ç³»ã
JSPæ¯ä¸ç§èæ¬è¯è¨ï¼å è£ äºJava Servletç³»ç»ççé¢ï¼ç®åäºJavaåServletç使ç¨é¾åº¦ï¼åæ¶éè¿æ©å±JSPæ ç¾(TAG)æä¾äºç½é¡µå¨ææ§è¡çè½åã尽管å¦æ¤ï¼JSPä»æ²¡æè¶ åºJavaåServletçèå´ï¼ä¸ä» JSP页é¢ä¸å¯ä»¥ç´æ¥åJava代ç ï¼èä¸JSPæ¯å 被è¯æServletä¹åæå®é è¿è¡çãJSPå¨æå¡å¨ä¸æ§è¡ï¼å¹¶å°æ§è¡ç»æè¾åºå°å®¢æ·ç«¯æµè§å¨ï¼æ们å¯ä»¥è¯´åºæ¬ä¸ä¸æµè§å¨æ å ³ãå®æ¯ä¸JavaScriptä¸åçï¼JavaScriptæ¯å¨å®¢æ·ç«¯çèæ¬è¯è¨ï¼å¨å®¢æ·ç«¯æ§è¡ï¼ä¸æå¡å¨æ å ³ã é£ä¹JSPæ¯ä»ä¹ï¼å°±æ¯Servlet.
JSPä¸Servletä¹é´ç主è¦å·®å¼å¨äºï¼JSPæä¾äºä¸å¥ç®åçæ ç¾ï¼åHTMLèåçæ¯è¾å¥½ï¼å¯ä»¥ä½¿ä¸äºè§£Servletç人å¯ä»¥ååºå¨æç½é¡µæ¥ã对äºJavaè¯è¨ä¸çæç人(æ¯å¦åæ),ä¼è§å¾JSPå¼åæ¯è¾æ¹ä¾¿ãJSPä¿®æ¹åå¯ä»¥ç«å³çå°ç»æï¼ä¸éè¦æå·¥ç¼è¯ï¼JSPå¼æä¼æ¥åè¿äºå·¥ä½ï¼èServelt缺éè¦ç¼è¯ï¼éæ°å¯å¨Servletå¼æçä¸ç³»åå¨ä½ãä½æ¯å¨JSPä¸ï¼HTMLä¸ç¨åºä»£ç æ··æå¨ä¸èµ·ï¼èServletå´ä¸æ¯è¿æ ·ãä¹è®¸å¤§å®¶æ¯è¾æ··ä¹±äºï¼é£ä¹Servletåæ¯ä»ä¹ï¼ä¸é¢æ们对JSPçè¿è¡æ¥åä¸ä¸ªç®åçä»ç»ï¼åè¯å¤§å®¶ææ ·æ¥æ§è¡ä¸ä¸ªJSPæ件ï¼
å½Webæå¡å¨(æServletå¼æ,åºç¨æå¡å¨)æ¯æJSPå¼ææ¶ï¼JSPå¼æä¼ç §çJSPçè¯æ³ï¼å°JSPæ件转æ¢æServlet代ç æºæ件ï¼æ¥çServletä¼è¢«ç¼è¯æJavaå¯æ§è¡åèç (bytecode)ï¼å¹¶ä»¥ä¸è¬çServletæ¹å¼è½½å ¥æ§è¡
JSPè¯æ³ç®åï¼å¯ä»¥æ¹ä¾¿çåµå ¥HTMLä¹ä¸ï¼å¾å®¹æå å ¥å¨æçé¨åï¼æ¹ä¾¿çè¾åºHTMLãå¨Servletä¸è¾åºHTML缺éè¦è°ç¨ç¹å®çæ¹æ³ï¼å¯¹äºå¼å·ä¹ç±»çå符ä¹è¦åç¹æ®çå¤çï¼å å¨å¤æçHTML页é¢ä¸ä½ä¸ºå¨æé¨åï¼æ¯èµ·JSPæ¥è¯´æ¯æ¯è¾å°é¾çã
é¤å»äºè½¬æ¢åç¼è¯é¶æ®µï¼JSPåServletä¹é´çåºå«å®å¨æ¯ä¸å¤§ã
JSPå¼æé常æ¶æå¨Servletå¼æä¹ä¸ï¼æ¬èº«å°±æ¯ä¸ä¸ªServletï¼æJSPæ件转è¯æServletæºä»£ç ï¼åè°ç¨Javaç¼è¯å¨ï¼ç¼è¯æServletãè¿ä¹æ¯JSPå¨ç¬¬ä¸æ¬¡è°ç¨æ¶é度æ¯è¾æ ¢çåå ï¼å¨ç¬¬ä¸æ¬¡ç¼è¯ä¹åï¼JSPä¸Servleté度ç¸å.ä¸é¢æ们æ¥çç为ä»ä¹ä»ä»¬å¨ç¬¬ä¸æ¬¡ç¼è¯ååç¼è¯çé度ç¸åï¼
å¨æ´ä¸ªè¿è¡è¿ç¨ä¸ï¼JSPå¼æä¼æ£æ¥ç¼è¯å¥½çJSP(以Servletå½¢å¼åå¨)æ¯å¦æ¯åå§çJSPæ件è¿æ°ï¼å¦ææ¯ï¼JSPå¼æä¸ä¼ç¼è¯;å¦æä¸æ¯ï¼è¡¨ç¤ºJSPæ件æ¯è¾æ°ï¼å°±ä¼éæ°æ§è¡è½¬è¯ä¸ç¼è¯çè¿ç¨ã
为äºæ个深å»çäºè§£ï¼æ们çä¸ä¸JSPçè¿è¡åå¼åç¯å¢:
æµè§å¨ï¼å¸¸è§çæµè§å¨æIEåNetscape两ç§ã
æ°æ®åºï¼å¸¸ç¨çæ°æ®åºæOracle,SQL Server,Informix,DB2,Sybase,Access,MySQLçã
æä½ç³»ç»ï¼å¸¸è§çæWindows,Linux,以ååç§Unixç³»ç»ã
Webæå¡å¨ï¼å¸¸è§çæIIS,Apache,Netscape Enterprise Serverçã
JSPå¼æï¼ä¸è¬JSPå¼æé½ä»¥Servletå¼æ为åºç¡ï¼å¹¶ä»¥Servletçå½¢å¼åºç°ãåæ¶ï¼å¨åç§å è´¹ååä¸å¼æçå®ç°ä¸ï¼Servletå¼æåJspå¼æé常ä¹æ¯ä¸èµ·åºç°ï¼æ们æ为Servlet/JSPå¼æï¼æä»æç§æ为JSPå¼æã
JSPå¼ææ¯å¯ä»¥æä¾JSPåServletè¿è¡æ¯æå¹¶å¯¹å ¶çåå¨æè¿è¡ç®¡ççç³»ç»çº§å®ä½ã
å¨JSP页é¢ç¬¬ä¸æ¬¡è¢«è¯·æ±æ¶ï¼JSPå¼æä¼å°JSPåå§æ件转æ¢æServletæºä»£ç ï¼ç¶åè°ç¨Javaç¼è¯å¨ï¼ç¼è¯æServlet,并å¨Servletå¼æä¸æ§è¡ãå½å次æ请æ±çæ¶åï¼JSPå¼æä¼è§å·®å¼ç¼è¯å¥½çJSPæ¯å¦æ¯åæ¥çJSPåå§æ件è¦æ°ï¼å¦ææ¯,è¿è¡Servletï¼å¦æä¸æ¯ï¼è¡¨ç¤ºæ件已ç»æ´æ°çäºï¼å°±ä¼ä»æ°æ§è¡è½¬æ¢åç¼è¯çè¿ç¨ã
说å°è¿éï¼ä¹åºæ¬æJSPåServletçå ³ç³»è¯´æ¸ æ¥äºï¼ä»æçæè§ä¸çç¨JSPå°±å¯ä»¥äºï¼ç®ååæ¹ä¾¿ï¼åå¯ä»¥åBean å¾å¥½çå ¼å®¹ä½¿ç¨ï¼åè½åå¾å¼ºå¤§ï¼ä¸ºä»ä¹ååºç°äºServlet,å®åæä»ä¹ç¨ï¼ä½åµå®çç¼ååç¸å¯¹å¤æã为äºæé®é¢è¯´å¾æ´æ¸ æ¥ä¸ç¹ï¼ææ³å¨è¿é说ä¸ä¸åå²ï¼é¡ºä¾¿å讲ä¸ä¸ä¸ºä»ä¹è¿è¦ç¨Servletï¼Servletç好å¤æ¯ä»ä¹ã
åå²ç®è¿°ï¼ï¼æèªæ论åæå èï¼æ¹åï¼
ç®åç说ï¼SUNé¦å åå±åºSERVLETï¼å ¶åè½æ¯è¾å¼ºå²ï¼ä½ç³»è®¾è®¡ä¹å¾å è¿ï¼åªæ¯ï¼å®è¾åºHTMLè¯å¥è¿æ¯éç¨äºèçCGIæ¹å¼ï¼æ¯ä¸å¥ä¸å¥è¾åºï¼æ以ï¼ç¼ååä¿®æ¹HTMLé常ä¸æ¹ä¾¿ã
åæ¥SUNæ¨åºäºç±»ä¼¼äºASPçé¶åµåçJSPï¼æ¯Servletåå±ç产ç©ï¼ï¼æJSP TAGé¶åµå°HTMLè¯å¥ä¸ï¼è¿æ ·ï¼å°±å¤§å¤§ç®ååæ¹ä¾¿äºç½é¡µç设计åä¿®æ¹ãæ°åçç½ç»è¯è¨å¦ASPï¼PHPï¼JSPé½æ¯é¶åµåçSCRIPTè¯è¨ã
ä»ç½ç»ä¸å±ç»æçè§åº¦çï¼ä¸ä¸ªç½ç»é¡¹ç®æå°åä¸å±ï¼data layer,business layer, presentation layerãå½ç¶ä¹å¯ä»¥æ´å¤æãSERVLETç¨æ¥åbusiness layeræ¯å¾å¼ºå¤§çï¼ä½æ¯å¯¹äºåpresentation layerå°±å¾ä¸æ¹ä¾¿ãJSPå主è¦æ¯ä¸ºäºæ¹ä¾¿åpresentation layerè设计çãå½ç¶ä¹å¯ä»¥åbusiness layerãåæ¯äºASPï¼PHPï¼CGIçæåï¼ç»å¸¸ä¼ä¸èªè§çæpresentation layeråbusiness layeræ··å¨ä¸èµ·ãææ°æ®åºå¤çä¿¡æ¯æ¾å°JSPä¸ï¼å ¶å®ï¼å®åºè¯¥æ¾å¨business layerä¸ã
æ ¹æ®SUNèªå·±çæ¨èï¼JSPä¸åºè¯¥ä» ä» åæ¾ä¸presentation layeræå ³çå 容ï¼ä¹å°±æ¯è¯´ï¼åªæ¾è¾åºHTMLç½é¡µçé¨ä»½ãèææçæ°æ®è®¡ç®ï¼æ°æ®åæï¼æ°æ®åºèç»å¤çï¼ç»ç»æ¯å±äºbusiness layerï¼åºè¯¥æ¾å¨JAVA BEANSä¸ãéè¿JSPè°ç¨JAVA BEANSï¼å®ç°ä¸¤å±çæ´åã
å®é ä¸ï¼å¾®è½¯æ¨åºçDNAææ¯ï¼ç®å说ï¼å°±æ¯ASP+COM/DCOMææ¯ãä¸JSP+BEANSå®å ¨ç±»ä¼¼ï¼ææçpresentation layerç±ASPå®æï¼ææçbusiness layerç±COM/DCOMå®æãéè¿è°ç¨ï¼å®ç°æ´åãç°å¨å¾®è½¯æ¨åºç.NETä¹æ¯éè¿è¿ä¸ªç念ï¼ææçpresentation layerç±ASP.NETå®æï¼business layerç±C#æVB.NETæVC.NETæ¥å®æã
为ä»ä¹è¦éç¨è¿äºç»ä»¶ææ¯å¢ï¼å 为å纯çASP/JSPè¯è¨æ¯é常ä½æçæ§è¡çï¼å¦æåºç°å¤§éç¨æ·ç¹å»ï¼çº¯SCRIPTè¯è¨å¾å¿«å°±å°è¾¾äºä»çåè½ä¸éï¼èç»ä»¶ææ¯å°±è½å¤§å¹ 度æé«åè½ä¸éï¼å å¿«æ§è¡é度ã
å¦å¤ä¸æ¹é¢ï¼çº¯SCRIPTè¯è¨å°presentation layeråbusiness layeræ··å¨ä¸èµ·ï¼é æä¿®æ¹ä¸æ¹ä¾¿ï¼å¹¶ä¸ä»£ç ä¸è½éå¤å©ç¨ãå¦ææ³ä¿®æ¹ä¸ä¸ªå°æ¹ï¼ç»å¸¸ä¼çµæ¶å°åå 页CODEï¼éç¨ç»ä»¶ææ¯å°±åªæ¹ç»ä»¶å°±å¯ä»¥äºã
综ä¸æè¿°ï¼SERVLETæ¯ä¸ä¸ªæ©æçä¸å®åç产åï¼åbusiness layerå¾å¥½ï¼åpresentation layerå°±å¾ä¸å¥½ï¼å¹¶ä¸ä¸¤å±æ··æï¼æ¾å¾ååæ··ä¹±ã
æ以ï¼æ¨åºJSP+BAENï¼ç¨JSPåpresentation layer,ç¨BAENåbusiness layerãSUNèªå·±çææä¹æ¯å°æ¥ç¨JSPæ¿ä»£SERVLETã
çäºä¸é¢çåè¿°ï¼å¤§å®¶å¯è½å¯¹JSPä¸Servletå ±åæäºæ¯è¾å¥½ç认è¯ãå¯ä»¥çå°JSPåBeanç»ååççå®ç¨æ§ï¼å¼ºå¤§ç表ç°åè½ï¼æç¨æ§é½æ¯Servletæä¸è½åçãé£ä¹æ¯ä¸æ¯Servlet就被å代äºï¼ä¸æ¯ï¼å¨ä»¥åçåå±ä¸ï¼å®è¿æ¯æç巨大çä½ç¨çãä¸é¢åªä¸è¿æ¯å°äºé®é¢çä¸æ¹é¢ï¼ä¸é¢æ们æ¥ççServletæ¬èº«çç¹ç¹ã
ç±äºå®æ¯ç±javaæ¥åçï¼æ以ç¸å ³çç¹ç¹æ们就ä¸è¯´äºï¼ä¸æå·²ç»æäºè¯¦ç»çä»ç»ï¼æ们æ¥ççå ¶ä»çï¼
Servletæ¯ç¨äºå¼åæå¡å¨ç«¯åºç¨ç¨åºçä¸ç§ç¼ç¨æ¨¡åï¼å¦æåªæ¯ä¸ä¸ªæ®éçjavaåºç¨ï¼å¯ä»¥ä¸ä½¿ç¨servletæ¥ç¼åï¼ä½æ¯å¦ææ³è¦æä¾åºäºwebçæå¡è½åï¼é£ä¹å°±å¿ é¡»æç §è¿ç§æ¨¡åæ¥ç¼åï¼èä¸servletä¹å¿ é¡»å 许å¨ç¬¦åservletè§èçjava web server or app serverä¹ä¸ï¼å¦åæ æ³è¿è¡ãé¤éä½ èªå·±å®ç°ä¸ä¸ªweb server,ä½æ¯å ¶å¤æ度æ¯æ¯è¾é«çï¼ç¹å«æ¯å¨ä¼ä¸çº§åºç¨ä¸ï¼å¯¹ç³»ç»ç稳å®æ§åå¥å£®æ§é½è¦æ±æ¯è¾é«ï¼æ以servletç模åå®é ä¸æ¯ç®åäºç¼å稳å¥çæå¡å¨ç«¯çåºç¨å¼åè¿ç¨ãServlet å¯ä»¥ä½ä¸ºæä¾webæå¡è½åçä¸ä¸ªæ¥å ¥æ¹å¼
ç°å¨ä¹è®¸å¯ä»¥ç解äºä»ä¹æ¯Servletä»ä¹æ¯JSPï¼å®ä»¬ä¹é´çå ³ç³»æ¯ææ ·çã