java servlet和jsp区别

目前常见的动态网页技术有CGI、ASP、PHP、JSP这几种。
最早出现的技术是CGI(通用网关接口),原先的web服务器并不支持动态的访问,即实时更新的网页内容,所以出现了CGI,但是CGI运行效率低下,每次访问就会创建一个进程,访问结束就会关闭进程,这样给服务器带来了很大压力,所以sun公司就根据java applet设计出了java servlet技术。
java servlet是独立于平台和协议的,由于java本身就是跨平台,所以独立于平台就是自然而然的了,独立于协议是指java servlet有一个GenericServlet(通用servlet),可以继承该类,实现任何协议,包括ftp等等,由于我们最常用的是用java servlet开发web页面,所以HttpServlet是我们最为熟悉的一种协议实现,很多服务器也是实现了HttpServlet协议,如tomcat、jetty、weblogic等等。
首先sun提出的是Servlet体系,这个体系使得使用JAVA的程序员也能开发基于B/S架构的WEB应用程序,使用Servlet类将HTTP请求和响应封装在标准JAVA类中来实现各种WEB应用方案。这一步也是sun的J2EE架构中的最关键的一步,只是,它输出HTML语句还是采用了老的CGI方式,是一句一句输出,所以,编写和修改HTML非常不方便。导致使用Servlet开发无法方便的做到各种页面效果和丰富多彩的风格,这个时候sun借鉴了微软的ASP方式,正式提出JSP(也就是Servlet 1.1),JSP推出后,JAVA程序员也能象ASP的程序员那样将服务端代码添加在已经由美工设计好的静态页面上,经过一个JSP容器对JSP文件进行自动解析并转换成Servlet类来交给WEB服务器运行。这么一来,极大的提高了工作效率。
随着JSP的广泛应用和各种设计模式的盛行,人们发现JSP也暴露了大量的问题:首先,夹杂服务端代码的JSP文件给后期维护和页面风格再设计带来大量阻碍,美工在修改页面的时候不得不面对大量看不懂的服务端代码,程序员在修改逻辑的时候经常会被复杂的客户端代码搞昏。交叉的工作流使得JSP面临大量的困境。这直接导致了servlet1.2的出台,sun在这一版中充分倡导了MVC的概念,大量页面标签的使用使得交叉工作流变的稍微的容易了,服务端标签的兼容性使得美工也可以直接随意移动这些标签而得到对应的效果。但是又暴露了一些问题:设计的差的标签使得程序的错误得不到检测,不成熟的代码导致无法真正的使服务端标签可以和客户端标签那样随意移动而不会导致逻辑错误。
首先说下jsp引擎的运行原理,jsp本质上也是一个servlet,当第一次访问jsp的时候,
(1)将JSP页面翻译成一个Servlet,这个Servlet是一个java文件,同时也是一个完整的java程序
(2)JSP引擎调用java编译器对这个Servlet进行编译,得到可执行文件class
(3)JSP引擎调用java虚拟机来解释执行class文件,生成向客户端发送的应答,然后发送给客户端
以上三个步骤仅仅在JSP页面第一次被访问时才会执行,以后的访问速度会因为class文件已经生成而大大提高。当JSP引擎街道一个客户端的访问请求时,首先判断请求的JSP页面是否比对应的Servlet新,如果新,对应的JSP需要重新编译。
因为JSP在编写网页方面具有优势,而编写处理代码存在很多问题,所以产生了模型1,把JSP中的处理代码使用JavaBean来实现。网站的输入输出、处理、控制全部夹杂在一起,维护不方便。当网站中需要进行大量的处理代码的时候,JSP文件将很难维护,并且代码也不容易共享。
模型1:JSP+JavaBean阶段
JavaBean是使用Java语言编写的组件,简单的理解,可以认为JavaBean是比较特殊的Java类。JavaBean会把网站中处理过程进行封装,这样的结果就是在JSP文件中仅仅是输入输出功能和控制功能,处理过程放在JavaBean中,然后在JSP中调用JavaBean的功能,此时的javaBean不仅仅是通常所说的POJO类,而是包括POJO类和业务处理,JSP提供了若干标签支持调用。下面的例子展示了这种模型。

package test;
public class PrintMessage
{
   public String print()
   {
      return “使用JavaBean返回信息”;
   }
}

页面文件:

<%@ page import=”test.*” %>
<jsp:useBean id=”printMessage” class=”test.PrintMessage” scope=”request”/>
<html>
   <head><title>测试</title></head>
   <body>
      第一阶段<% out.print(printMessage.print()); %>
</body>
</html>

这种模型的优点是:业务处理由JavaBean完成,减少了页面中的代码。缺点是:页面中仍然有用于控制的代码。注意模型一只使用了jsp+javaBean,并没有直接使用servlet,虽说jsp本质上也是servlet,但在开发过程中,编码和设计还是有区别的。
模型2:JSP+JavaBean+Servlet阶段
在模型2中,把JSP中的控制功能提取出来使用Servlet实现。这样,JavaBean强调的是功能,Servlet主要用于控制。从完成的功能来说,JSP和Servlet是相同的,但是JSP主要以标签(HTML标签和JSP标签)为主,Servlet是Java代码。JavaBean和Servlet都是Java代码,但是Servlet能够接收请求,用户能够直接访问,JavaBean不能接收请求,需要由JSP或者Servlet调用。
这种模型的特点:JSP完成输入和输出,主要使用HTML标签和JSP标签。Servlet主要完成控制,接收请求,调用业务处理(JavaBean),根据调用的结果找到一个JSP页面对用户进行响应。JavaBean完成所有的处理过程。
这种方式实际上是MVC模式的采用。MVC模式由3部分组成:M表示模型(模拟现实事物),主要用于处理过程;V表示视图,实际上就是输入和输出功能;C表示控制器,主要控制程序的流程,此种方式完成了从URL的http世界向java世界的映射。这也是mvc的核心功能。
框架阶段:
随着Java Web应用技术的发展,出现了大量的框架包括Web层框架和持久层框架。
Web层框架通常可以提供一些Web应用的通用功能,用户在编写应用的时候只需要关注自己比较特殊的东西即可。例如,Servlet作为控制器完成的功能包括:获取用户的输入信息;对信息进行验证、转换;使用这些信息调用业务逻辑(JavaBean的方法);然后选择界面对用户响应。如果把获取的信息设置成变量、要进行的验证和转换进行配置、要调用的方法进行配置、要响应的界面进行配置,这样Servlet就可以通用了。
持久层框架,主要是解决数据库访问问题,同样是把数据库访问中通用的内容提取出来,在编写应用的时候只编写特殊的东西。例如,要把用户信息和图书信息添加到数据库中,采用JDBC技术,编写的两段代码的区别是表名不同,列与属性的对应关系不同。持久层框架就可以完成这个添加工程,用户只需要提供表名并且提供列与属性的对应关系。
jsp开发的两种模型:
一、Browser——request——>JSP—call——>JavaBean—call—>DateBase
<——— <——— <—

二、
Browser—request—>model(Servlet)—–>javabeans—->database—->View(JSP)
<——————————————————————
Java Web基础:第八讲 Java Web的发展历史
JAVA从零开始学:JSP, Servlet的发展历史
java Servlet、Applet、JSP+Bean、CGI区别与联系
JSP开发的两种模型

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值