关于jsp和servlet之间关系的问题。(100分)

S

snakeqi

Unregistered / Unconfirmed
GUEST, unregistred user!
早期的jsp标准给出了两种使用jsp的方式。
模式1:jsp页面独自响应请求并将处理结果返回客户。
模式2:采用jsp来表现页面,采用serflet来完成大量的处理。servlet负责响应客户请求,接着,
servlet创建jsp需要的beans和对象,再根据用户的行为,决定将哪个jsp页面发送给用户。
jsp页面中没有任何商业处理逻辑,它只是简单地检索servlet先前创建的beans或者对象,再
将动态内容插入预定义的模板。
这是从一本书上摘下来的,一般我们开发多用的模式1,我想用模式2来做该怎么做?主要就是
在servlet里创建的beans和对象怎么在jsp页面里能调用?
 

曹晓钢

Unregistered / Unconfirmed
GUEST, unregistred user!
你需要定义一套访问的标准。具体来说,你给出一些条件,然后去访问java class,然后从javaClass
得到的结果集中得到一个Vector或者数组或者类似的结构。
这样的话,在您的jsp中是不会出现SQL语句的。
举个例子来说。假设你有一个Order表,表结构为
OrderID(PK) qty xxx
----------------------------
1 100 xxxx
2 200 xxxx
那么,你可以做一个Class 叫做Order,它有OrderID,qty这些字段。
然后再写一个ClassFactory类,他有一个getOrderCollection(condition)的静态方法,
这个方法会根据你传来的条件返回一个collection,里面就是若干个Class对象。
至于定义Condition的方法,你可以自己决定。一般来说用一个map对象是合适的,在实际上
我们是自己定义对象的。
如此之般,你的问题基本解决。
当然,这只是原理。明白这些基本原理不能实用。请参阅一些经典的代码来学习。
推荐jive 论坛的源码。请至www.jiveforum.com自行取的。
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
好像servlet正在被淘汰,你别管那么多了会用JSP就行了。
不过好像Jsp是由servlet出身,我也正在研究,看得一头雾水。
可能是因为我们一上来就用了现成的最好的东西,没有编过servlet.
也算是一种幸福吧!
 
Y

yysun

Unregistered / Unconfirmed
GUEST, unregistred user!
“jsp页面中没有任何商业处理逻辑”这个原则是对的。
商业逻辑应该尽量放到 JavaBean 中,JSP 负责数据的显示。
可是,创建 JavaBean 不一定用 servlet,用 JSP 也是可以的。
“servlet负责响应客户请求,接着,servlet创建jsp需要的beans和对象,再根据用户的
行为,决定将哪个jsp页面发送给用户”是 struts 的基本思想,是一个比较好的办法,
但是不是唯一的或者必需的方法。
BTW,servlet 没有“正在被淘汰”。在 Java web 服务器内部只认 servlet。
JSP 在运行前,必须被翻译成 servlet。当然这个翻译过程由系统自动完成的,对用户透明。
所以,也许很多人就不知道了。
 

完颜康

Unregistered / Unconfirmed
GUEST, unregistred user!

蛐蛐

Unregistered / Unconfirmed
GUEST, unregistred user!
P

pely

Unregistered / Unconfirmed
GUEST, unregistred user!
jSP在第一次访问时会被解释成Servlet,
例如:hello.jsp,第一次访问时生成java(名字会依据使用的Application Server的种类而不同)文件,编译成class,以后用户再次访问时,系统会看hello.jsp从上次被编译后是否改变,如果改变,就再次生成对应的servlet,否则,就直接访问上次生成的class。
如果你用tomcat,当debug选项打开时,你可以在dos窗口中看见被编译的servlet java文件的信息。
 
C

caveman

Unregistered / Unconfirmed
GUEST, unregistred user!
其实到此,问题已经解释得很清楚了。 Jsp实质上就是servlet,不过有点特殊而已。有些
缺省对象而已。
 
C

cat.yy

Unregistered / Unconfirmed
GUEST, unregistred user!
模式2好象就是MVC
SERVLET负责响应用户请求调用相关功能模快
事务处理防在BEAN里,
JSP主要负责页面显示
http://www.csdn.net/Expert/TopicView1.asp?id=673256
 
J

javajsp

Unregistered / Unconfirmed
GUEST, unregistred user!
你说这些servlet快被淘汰之类的话,会令我混乱的,因为我刚看完有书介绍那些比较大计算
量的逻辑尽量放在servlet以提高性能,另外bean是放在/lib里的,用
<jsp:useBean id="conndb" scope="page" class="connect" />访问的。
servlet他有一套预定的接口,它可以创建bean我倒还不知道愿闻其详,若有例子更好了。
servlet是放在/class里的。
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
o ,抱歉,我害你不轻。
等我有空好好看看,再贴出来。我说话算数。
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
JSP与Servlets的区别
推荐:yxz 分类:JAVA 发布时间:2001-11-29 人气:92




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,应该放在JAVA BEANS中。通过JSP调用JAVA BEANS,实现两层的整合。
实际上,微软前不久推出的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+BAEN,用JSP写presentation layer,用BAEN写business layer。SUN自己的意思也是将来用JSP替代SERVLET。
可是,这不是说,学了SERVLET没用,实际上,你还是应该从SERVLET入门,再上JSP,再上JSP+BEAN。
强调的是:学了JSP,不会用JAVA BEAN并进行整合,等于没学。大家多花点力气在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的速度劣势很快就可以被克服。
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
所以,推出JSP+BAEN,用JSP写presentation layer,用BAEN写business layer。SUN自己的意思也是将来用JSP替代SERVLET。
可是,这不是说,学了SERVLET没用,实际上,你还是应该从SERVLET入门,再上JSP,再上JSP+BEAN。
强调的是:学了JSP,不会用JAVA BEAN并进行整合,等于没学。大家多花点力气在JSP+BEAN上。
 
Y

yysun

Unregistered / Unconfirmed
GUEST, unregistred user!
wukw,您说“SUN自己的意思也是将来用JSP替代SERVLET。”有何依据吗?
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
啊呀,孙老师,我只是转载文章。
由于我所学甚浅,以上文章我还当作圣经一样认真看了,没有丝毫怀疑它的正确性。
如有不对,还请指正啊!
由于我在国家机关混,所用都比较简单。
只是我有一点疑问,我很少(几乎就是没有)听说有人专门编Servlet运行呀!
而且JSP本来就是在服务器端运行的,那为什么还要编Servlet?
以上文章也说了,用BAEN写business layer,是不是很大程度上代替了Servlet?
我的理解就是 Servlet就像VC编程,要掌握系统内部机制一样。你如果掌握了,就对这个WEB系统理解越深,编的越好。
如果不明白也没关系,照样用。就像Delphi的控件封装的太好了,很多东西不知所以然,但我会用。
以上个人纯属猜测,我还是刚入门的菜鸟,很多还不懂,请孙老师指正。
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
孙老师,为了证实我的猜测,去Sun的网站看了两篇文章,摘录如下:
以下摘自 http://java.sun.com/products/jsp/faq.html#4
Whydo
I need JSP technology if I already have servlets?
JSP pages are compiled into servlets, so theoretically you could write servlets to support your web-based applications. However, JSP technology was designed to simplify the process of creating pages by separating web presentation from web content. In many applications, the response sent to the client is a combination of template data and dynamically-generated data. In this situation, it is much easier to work with JSP pages than todo
everything with servlets.
以下摘自 http://java.sun.com/products/jsp/
JavaServer Pages technology is an extension of the JavaTM Servlet technology. Servlets are platform-independent, 100% pure Java server-side modules that fit seamlessly into a web server framework and can be used to extend the capabilities of a web server with minimal overhead, maintenance, and support. Unlike other scripting languages, servlets involve no platform-specific consideration or modifications;
they are Java application components that aredo
wnloaded, on demand, to the part of the system that needs them. Together, JSP technology and servlets provide an attractive alternative to other types of dynamic web scripting/programming that offers platform independence, enhanced performance, separation of logic from display, ease of administration, extensibility into the enterprise and most importantly, ease of use.
以下摘自 http://java.sun.com/products/servlet/
You might want to check out the latest information on JavaServer PagesTM (JSPTM) technology. JSP technology is an extension of the servlet technology created to support authoring of HTML and XML pages. It makes it easier to combine fixed or static template data with dynamic content. Even if you're comfortable writing servlets, there are several compelling reasons to investigate JSP technology as a complement to your existing work.
看过以上两段话,我又想出一个比较恰当的比喻(我认为)。好比Servlet是汇编,JSP+Bean是C
从历史长河来看,毕竟还是 C代替了 汇编,因为它有很多的好处,如使用简单,功能强大等等。
但汇编也不能完全被替代,某些特定的场合,还是需要汇编的优点,如运行快,功能更强。
如果不怕麻烦,汇编的程序当然可以实现C的功能,但是一般情况下,毕竟已经没有必要用汇编了,会用的人也的确越来越少。
其实我根本不懂什么叫"Servlet",以上只是根据一些材料的字面意思猜测得来,不对之处,请孙老师指正!谢谢!
有人还是拥护Servlet,列举了JSP的一些问题,您可以参考一下:(抱歉,我没有看完)
http://www.servlets.com/soapbox/problems-jsp.html
http://www.servlets.com/soapbox/problems-jsp-reaction.html
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
哇,孙老师的程序换行做的真好啊,e文单词里的字母居然一个都没有“分家”。
不过也有个疑问,有没有可选项让我不换行?
虽然我现在不需要,但您应该提供这个功能啊!
 
W

wukw

Unregistered / Unconfirmed
GUEST, unregistred user!
抱歉,再给您提点意见。写在别的版面怕您看不到。
我觉得
代码:
String str;
这种字体不好看,反倒是正文字体小巧清楚。建议您另找一种字体。
对于颜色,提供2~3种就够了,毕竟这里是BBS,讨论技术的地方,没有必要弄得花里花哨的,一般情况下也用不上这些颜色。再说有那些表情符号已经足够表达我们的思想感情了。
同样的道理,我反对提供上传图片,那样版面会越来越乱,服务器保存图片也会有一定的负担。
毕竟这里是"BBS"。
哈,现在的这种字体,我倒是很喜欢,简洁明了,简直有一种亲切感。
最后有点疑问,现在换了行,怎么这个帖子的拉动框还是那么长?
 
Y

yysun

Unregistered / Unconfirmed
GUEST, unregistred user!
wukw, 我才问您一句话,您给我来这么多,想用口水淹死我啊。
您转贴的来自 java.sun.com 的文章正好证明您的猜测是错的。
那些文章明确说明 JSP 是 servlet 的 extension - [red]扩展[/red] !根本没有一点“将来用JSP替代SERVLET”的意思。
那里明明白白写着它们合在一起成为一种开发动态网站的工具:
[red]Together[/red], JSP technology and servlets provide an attractive alternative to ..
您的汇编和 C 的比喻也不适用。Servlet 和 JSP 的关系比那两者密切得多。只能这样比喻:
Servlet 是一幢房子的一楼、JSP 是二楼、JSP Tag Lib 是三楼、struts 是四楼。
无论您坐在哪层楼里,都不能说一楼咱不常去,想必一楼一定会被替代的,
更不能进一步猜测房子的设计者必定也是这么打算的。
您还列出的文章,称“人还是拥护Servlet,列举了JSP的一些问题”又是断章取义。
那些文章的意思是:JSP 作为 servlet 的 extension 有缺陷,有问题,我们应该用另外
一种 extension 的方法,称为 WebMacro, http://webmacro.org
他们是试图在 servlet 这个一层楼上,另外建个二楼罢了。
 
顶部