1、表示层

表示层通常也称Web层,Web服务器及其组件构成了J2EE应用程序的“表示部分”。
客户端通过Web层访问企业资源,Web层允许规模庞大的客户群在Internet或内网环境下,通过合理方式访问企业应用程序。Web层组件是轻量级组件,具有可伸缩特性。
浏览器将HTTP/HTTPS请求发送给Web服务器部署的组件,Web组件可能使用RMI/IIOP通信协议或其它专用协议直接连接到资源层,也可能连接到业务层。
J2EE Web应用程序的复杂性对应用程序的稳健性有直接影响,二者呈线性递增关系。
2、Web层的重要性
1)静态和动态内容
Web可支持静态和动态内容。内容包括文本、图形和多媒体。
2)请求/响应
利用Web组件可实现“请求-响应”模型。
3)轻量级
Web服务器将HTTP用作通信协议。HTTP是一个轻量级传输协议,是实现业务事务“请求-响应”通信模型的最简洁方式。
HTTP能传输对企业至关重要的HTML和XML内容。
4)会话
默认情况下HTTP通信无状态。即服务器不能连接同一个客户端发送的两个连续请求。在一些技术的帮助下,可将两个或更多通信系列连成一个有用的企业事务会话。
5)可伸缩
Web服务器能够伸缩,能适应请求负载的增加。可利用硬件、软件和设计模式,提高伸缩能力,使Web应用程序将内容呈现给更多或更少的客户。
6)可实现业务逻辑
可优化Web服务器以提高企业应用程序的表示能力。
可通过一些简单方法,将业务逻辑嵌入到Web服务器上。注意:业务逻辑若包含在Web层,可能存在泄漏风险。
3、Web容器
Web应用程序使企业应用程序的一部分,使客户层与业务层之间的中间层,或客户层与资源层之间的中间层。
Web层负责为部署的Web应用程序提供稳健支持。
Web服务器可能需要支持若干个Web应用程序,而每个Web应用程序可能需要支持若干个交互的Web组件。各个Web应用程序部署的Web组件可能是若干个Servlet、Filter和JSP的组合。
Web服务器和Web容器一起,为Web应用程序及其组件提供生命期管理支持,并提供其它校准服务、如事务、命名和目录服务等。
4、Web组件
Web层有4类组件:
1)HTML
2)Servlet
Servlet组件可部署到服务器上,运用“请求/响应”模式。
其工作原理:将Servlet组件部署到适当容器后,Servlet将等待特定套接字上的客户端的请求;在收到请求后,组件执行必要的计算,并将响应返回给对应套接字上的客户端。完成了对话,也就是执行了业务环境的事务。
GenericServlet是Servlet规范定义的超类,运用“请求/响应”模式,独立于协议。优势在于:允许通过适当扩展GenericServlet类,实现使用其它任何通信协议的特殊Servlet。
HttpServlet是GenericServlet的子类,运用“请求/响应”,模式,利用HTTP通信协议交换信息。HTTP Servlet可接收各种形式的HTTP请求,如GET、POST和HEAD等。
Servlet的HTTP响应通常是HTML页或XML页,可使用setContentType()方法,将text/html或text/xml作为该方法的参数,以设置Servlet输出流,生成所需的内容类型。很多重载方法有助于接收和响应客户请求。如:doGet()方法服务HTTP GET请求,doPost()方法服务HTTP POST方法。
Servlet的主要目的不是生成HTML或XML输出,而是在Web层提供编程逻辑和功能支持。
Servlet也可能支持业务逻辑,以建立MVC Model 1 架构。
Servlet可与企业应用程序的其它组件交互,为客户端生成适当的输出。
Servlet的主要目的是控制不同组件之间的通信,以根据企业需求生成需要的输出。
可根据功能,将Servlet分为“前端控制器Servlet”和“表示Servlet”。
3)Filter
在Servlet2.3推出的,又称为“Servlet Filter”,是插入式Web组件,允许实现Web应用程序的预处理和后期处理逻辑。
Filter支持Servlet的“请求处理”功能,如登陆、转换、安全、会话、转化和企业应用程序需要的其它同类任务。
Filter能截获传入的请求和传出的响应,能检查、修改或处理Web应用程序的数据流。
可将Filter作为独立的模块化组件添加到Web应用程序的“请求-响应”链;也可在不影响企业应用程序同一位置Web组件的情况下将其从Web应用程序中删除。
Filter是J2EE应用程序的可选组件,正确使用Filter或Filter链,将能极大的提高重用效果,并能用多种方式快速地实现应用程序。
4)JSP
在HTML页中加入少量Java代码可用来计算动态数据,是生成动态输出的绝佳方式。在成功转换和编译JSP页后,将创建一个特殊的Servlet,以接收请求。
嵌入HTML页的Java代码需要遵守一些简单规则。
(1)JSP标准动作
通过与服务器端JavaBean组件的交互来提高能力和稳健性,能帮助Web组件实例化Web层的JavaBean。
例子:

<% @ page contentType="text/html" %>
<html>
 <body bgcolor="white">
  <jsp:useBean id="custInfo" class="com.ora.jsp.beans.custinfo.CustInfoBean">
   <jsp:setProperty name="custInfo" property="*"/>
  </jsp:useBean>
  The following is the customer information:
  <ul>
   <li>Customer Name:
    <jsp:getProperty name="custInfo" property="custName"/>
   </li>
   <li>Address:
    <jsp:getProperty name="custInfo" property="address"/>
   </li>
  </ul>
 </body>
</html>

(2)JSP定制标记
定制标记是JSP中使用的XML标记类型,用于在输出中提供更具定制特点的动态内容,可减少JSP页中的脚本元素。
定制标记可提供各种支持,如条件标记和迭代器标记。
例子: 

<% @taglib uri="myTag" prefix="myData"%>
<html>
 <head>
  <title>My Own Tags</title>
 </head>
 <body>
  <table>
   <tr>
    <td>
     <myData:getData name="theText"/>
    </td>
   </tr>
  </table>
 </body>