在JSP中调用JAVA类和使用JavaBean有什么区别?
可以像使用一般的类一样使用JavaBean,Bean只是一种特殊的类。特殊在可以通过<jsp:useBean/>调用JavaBean而其他类,可以和一般java中一样使用. Bean的参数中还可以指定范围, <jsp:useBean scope="application" />该Bean在服务器的JVM中将只有一个实例. Bean是和WebServer相关的,不同的页面可以通过Bean 交互.而在一个页面中的类,就没有这个功能,除非通过session,那又是另外一回事了.
bean其实也是class文件,只是普通的java文件没有什么限制,如果按bean的规范来制作class文件,那他就是一个bean。而按bean的规范来制作就相当是一个组件,换句话说bean就是组件技术。
为了确保一个java类成为javabean,有以下四个简单的也是必须的规范:
1.这个类是可序列化的,即必须实现java.io.Serializable接口。
2.这个类必须带有一个无参数的构造方法。
3.若成员变量名为XXX,那么要有方法getXXX(),用来获取属性;setXXX(),用来修改属性;
对于Boolean类型的成员变量,可用is代替get和set类中的方法的访问。
属性都必须是public的。
类中如果有构造方法,那么这个构造方法也是public的,并且无参数。
4.这个类包含所有必需的事件处理方法。
JavaBean和Servlet的不同 :
Type1: 一般的JavaBean中,只有属性声明和该属性对应的setXxx和getXxx方法,(一般不建议)不包含业务逻辑;这种JavaBean可以简单地理解为“数据对象”即可。
Type2: 还有一种JavaBean,其内包含业务处理逻辑,用于处理特定的业务数据;一般使用上面所述的“数据对象”(当然也可能不使用)。
Servlet主要是用来:接收请求、封装‘Type1’的JavaBean、调用‘Type2’的JavaBean的相应业务逻辑方法、向客户端发出响应。
以上是Struts 1.x所使用的模式:ActionForm 就是 Type1的JavaBean,ActionBean就是Type2的JavaBean,ActionServlet即是上面所述的Servlet。 Struts 2.x则是使用 Type1 + Type2的方式(数据对象和业务处理)和Servlet相结合的方式(实际上就是Webwork的方式)。
javaBean和Servlet有什么区别?
什么时候用javaBaen?
什么时候用Servlet,什么时候二者结合使用?
1.javabean无非就是里面有些set和get方法
2.servlet用来处理一些逻辑层
3.javabean说笼统点是实现
4.javabean、servlet、jsp分别对应M(odel)、C(ontroller)、V(iew)
举例: servlet查询数据库-----javabean保存查询结果-----jsp显示查询结果
javabean就是一个普通的Java类,里面为属性增加了getter和setter并提供默认构造。可以在多层架构的各层存在。想用它作什么都行。
而Servlet是展示层的东西……应当只在展示层存在。常作为MVC中的控制器。
一般说的Mvc模式,Servlet主要充当了C的作用。
javabean和servlet是两回事.因为javabean是一个组件,可以用在任何地方,当然就可以用在servlet里了
按照Sun的定义,所谓的JavaEE应用,是由两大部分组成:(1)组件,表示业务逻辑、表现逻辑,这部分由开发人员完成;(2)标准的系统服务,由JavaEE平台,亦即容器来提供,这个范围之外的都不属于JavaEE应用的范畴。而Servlet,作为JavaEE应用表现逻辑的组件之一,当然是JavaEE应用的一部分。而JavaBean,产生的年代早于J2EE,其技术用途更为广泛不限于JavaEE使用,按照sun的定义,不属于JavaEE技术范围。
其实真正大规模使用JavaBean组件技术的是在Swing中,wing中的所有控件包括JButton,JTree等用的都是JavanBean技术,这些控件的基本编程模型正是大名鼎鼎的MVC模型,不信找出Swing API来,好好研究一下JTree、JTable,就知道什么是真正的JavaBean了。
而Servlet是只能在JavaEE容器中存活的特殊Java类,就像是鱼缸里的鱼,没有容器Servlet是不能生存的。而JavaBean则可以脱离JavaEE环境单独存在,按照Sun的说法,既可以用在客户端,也可以用在服务器端。
所谓的POJO,就是EJB把E字去掉,剩下的JB就是JavaBean,换句话说,JavaBean在J2EE里,甚至可以充当某些EJB完成的任务,用途远大于Servlet。最后的区别,就是 JavaBean的主要用途在于管理JavaEE应用各个层之间的数据流,所以在一些框架中(如Struts)有FormBean和ActionBean的说法,其本质都是为了管理数据。相信如果把上述几点搞清,区分Servlet和JavaBean应当不会很困难的。
JSP和Servlet到底在应用上有什么区别?
简单的说,SUN首先发展出Servlet,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI方式,是一句一句输出,所以,编写和修改HTML非常不方便。 后来SUN推出了类似于ASP的镶嵌型的JSP,把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,应该放在JavaBean中。通过JSP调用JavaBean,实现两层的整合。
实际上,微软前不久推出的DNA技术,简单说,就是ASP+COM/DCOM技术。与JSP+BEANS完全类似,所有的 presentation layer由ASP完成,所有的business layer由COM/DCOM完成。通过调用,实现整合。
为什么要采用这些组件技术呢?因为单纯的ASP/JSP语言是非常低效率执行的,如果出现大量用户点击,纯SCRIPT语言很快就到达了他的功能上限,而组件技术就能大幅度提高功能上限,加快执行速度。
另外一方面,纯SCRIPT语言将presentation
layer和business
layer混在一起,造成修改不方便,并且代码不能重复利用。如果想修改一个地方,经常会牵涉到十几页CODE,采用组件技术就只改组件就可以了
综上所述,Servlet是一个早期的不完善的产品,写business layer很好,写presentation layer就很臭,并且两层混杂。
所以,推出JSP+Bean,用JSP写presentation
layer,用Bean写business layer。SUN自己的意思也是将来用JSP替代Servlet。
可是,这不是说,学了Servlet没用,实际上,还是应该从Servlet入门,再上JSP,再上JSP+BEAN。
强调的是:学了JSP,不会用JavaBean并进行整合,等于没学。大家多花点力气在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的速度劣势很快就可以被克服。javabean可以作为模型+控制,也可以单做模型,也可以只用来做数据传递(JSP发送数据到Bean,BeanN执行execute,操作数据库,反之也可)
如果还没学到其它框架,如HIBERNATE,SPRING,STRUTS等。那javabean的作用是用来作数据的装载,这种 bean我称为数据bean,比如从数据库上查询出的记录可以保存在数据bean中。
javabean的另一外作用是用来处理一些业务逻辑,比如可以在javabean中用JDBC去访问数据库,从而从数据库中加载信息到数据bean中,也可以从数据库中删除、保存数据等。
而Servlet的作用主要是用来控制页面的跳转,比如说从login.jsp发一个请求到Servlet中,Servlet调用业务bean的方法去查询数据库是否有此密码和用户名,如果正确Servlet就可以用request或者response对象的方法跳转到想要的页面。
JSP开发的两种模式
模式一:JSP+JavaBeans
这就是指JSP+JavaBean技术。在模式一中,JSP页面独自响应请求并将处理结果返回客户。所有的数据通过Bean来处理JSP实现页面的表现。模式一技术也实现了页面的表现--和页面的商业逻辑相分离。
大量使用模式形式,常常会导致页面被嵌入大量的脚本语言或JAVA代码。当需要处理的商业逻辑很复杂时,这种情况会变得非常糟糕。大量的代码会使整个页面变得非常复杂。对于前端界面设计人员来说,这简直不可想象。
这种情况在大项目中最为常见,这也造成了代码的开发和维护出现困难,造成了不必要的资源浪费,在任何项目中,这样的模式总会导致多多少少的定义不清的响应和项目管理的困难。
综上所诉,模式一不能满足大型项目的需要,但是可以较好的满足小型应用,在简单的应用中可以考虑模式一。
模式二:JSP+Servlet+JavaBeans
Servlets技术是一种采用JAVA技术来实现CGI功能的一种术。Servlets技术是运行在WEB服务器上,用来生成WEB页面。Servlets技术非常适用于服务器端的处理和编程,并且Servlet会长期驻留在他们所处的位置。
但是在实际的项目开发过程中,页面设计者可以方便地使用普通HTML工具来开发JSP页面Servlet却更适合于后端开发者使用,开发Servlet需要的是JAVA集成开发环境,也就是说Servlet技术更需要编程人员。
模式二技术结合了JSP和Servlet技术充分体现了两者的技术优点。在此模式中通过JSP来表现页面。通过Servlet来完成大量的事务处理。Servlet充当一个控制者的角色,并负责向客户发送请求。Servlet创建JSP所需要的Bean和对象,然后根据用户的请求行为,决定将哪个JSP页面发送给客户。
从开发的观点,模式二具有更清晰的页面表现,清楚的开发者角色划分,可以充分利用开发小组的界面设计人员,这些优势在大型项目开发中表现的尤为突出,使用这一模式,可以充分发挥每个开发者各自的特长,界面设计人员可以充分发挥自己的表现力,设计出优美的界面表现形式,设计人员可以充分发挥自己的商务处理思维,来实现项目中的业务处理。在大型项目中,模式二更被采用。
Servlet是一种独立于平台和协议的位于Web服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。
Java的Servlet与JSP(JavaServerPages)的比较:
JavaServerPages(JSP)是一种实现普通静态HTML和动态HTML混合编码的技术,JSP并没有增加任何本质上不能用Servlet实现的功能。但是,在 JSP中编写静态HTML更加方便,不必再用println语句来输出每一行HTML代码。更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,由页面设计者进行HTML设计,同时留出供Servlet程序员插入动态内容的空间。
JSP动态Web内容可能是动态Web内容的一项伟大的技术,并可将内容和表示presentation相分离,那为什么servlets仍然有必要和JSP同时实施?
其实servlets的实用性并不是一个问题。它们在服务器端处理方面的表现非常优秀,而且,由于它们引人注目的安装方式而继续存在着。事实上,可以将
JSP看作一种servlets的高级抽象,它以Servlet2.1的API扩展的形式来实现。
注意:不应该不加选择地使用servlets;它们可能并不适用于每个人。例如,当一个页面设计者可以很简单地使用方便的HTML或XML工具来编写 JSP页面时,servlets可能更适合那些在后端的开发者,因为他们经常使用某种IDE来编写。这是一种通常需要较高编程经验的处理工作。
当发布servlets时,甚至开发者都不得不小心确保在presentation和内容之间不存在紧密结合。通常可以通过增加一个第三方发行包如 htmlKona来做到这一点。但即使可以做到这一点,虽然可以通过简单的屏幕上的调整提供一些灵活性,仍无法保证在presentation自身格式上的变化。例如,如果你的presentation从HTML改变到DHTML,将仍然需要确保发行包和新的格式相一致,在最坏的case--scenario中,如果一个发行包无法得到,你将结束在动态web的内容中对presentation使用手写代码。所以,解决方法是什么呢?
方法之一就是同时使用JSP和servlet技术来建立应用系统。