路_人_
全部博文(163)
2011年(1)
2009年(162)
gaokeke1
ztbei
格伯纳
Bsolar
分类: Java
2009-07-10 16:16:27
接下来研究不同的应用程序体系结构,您可以使用这些体系结构开发 J2EE 应用程序并将其与相应的 ASP/COM 应用程序体系结构关联起来。
使用 Java Servlets 编程:基础知识
编写 Java Servlets 就可以对来自 URL 的请求进行可编程控制。典型的 servlet 调用类似于以下步骤:
客户机向 Web 服务器发出请求,将 servlet 命名为 URL 的一部分 ―― 例如,
Web 服务器将该请求转发给应用程序服务器,该服务器查找 servlet 类的实例。
Web 容器调用 servlet。(servlet 的一个实例被加载到内存中,每个请求都调用不同线程上的一个实例。)
注意,HTML 表单中 servlet 的 URL 包括 servlet 的名字和称为 上下文根(在上例中是 /myWebApp )的前缀。上下文根大致等价于 IIS 虚拟目录。
图 2 说明了这些步骤。
图 2. Servlet 调用
Servlets 扩展 HttpServlet 类。如有需要,可以覆盖 下列 HttpServlet 类的方法:
init() :在应用程序服务器加载 servlet 时调用
destroy() :在应用程序服务器卸载 servlet 时调用
doGet() :通过 HTTP GET 调用 servlet 时调用
doPost() :通过 HTTP POST 调用 servlet 时调用
编写 servlet 涉及编写代码来处理 HTTP 请求,处理任何参数并直接返回任何内容,或委派另一种资源(如 JSP 页面)来处理响应。不建议直接从 servlet 返回 HTML,因为管理 Java 类内的 HTML 代码很不灵活。
当应用程序服务器调用 doGet() 或 doPost() 方法时,以下两个对象将作为参数传递进来:
HttpServletRequest 允许访问任何请求参数以及 HTTP 请求中引发 servlet 调用的其他信息。
HttpServletResponse 充当返回到客户机的沟通渠道,允许 servlet 直接返回内容或返回其他 HTTP 返回代码(错误、重定向等)。
清单 20 和 21 展示了两个 Hello World servlet。清单 20 直接返回内容,清单 21 使用 JSP 页面返回内容。
清单 20. HelloWorld servlet:直接返回内容
注意,您从响应对象获得 PrintWriter ,并一次一行将 HTML 输出到客户机。
清单 21. HelloWorld servlet:使用 JSP 页面返回内容
RequestDispatcher 是您希望将请求转发给的资源的包装器。注意,要同时包括原始请求和响应对象,以便目标资源可以访问它们。从 getServletContext() 返回的 ServletContext 允许服务器与底层应用程序进行通信来获得 RequestDispatcher 。注意,所有 servlet 都通过 etServletContext() 方法访问其 ServletContext 。
使用 JSP 技术编程:基础知识
使用 JSP 技术您就具有使用 Java 语言编写服务器端脚本的能力。在 JSP 页面返回到客户机前,它是一个组合页面,由 HTML 和应用程序服务器处理的 Java 代码组成。在页面返回到客户机前,应用程序服务器处理嵌入代码以生成静态内容。与 .ASPx 文件类似,JSP 页面通常与 HTML 文件很相似,只是增加了一些额外的标签和 Java 代码片断。
在第一次请求 JSP 页面时,应用程序服务器将每个 JSP 页面转换为特殊的 servlet。该 servlet 编译并加载到内存中。只要 JSP 源未被修改,这个 servlet 就对要获得该页面的请求提供服务。在源修改后,此过程再次开始,并生成一个新版本的 servlet。
您可以在 JSP 页面中使用几种特殊的 JSP 标签,用户还可以定义自己开发的标签的行为。您还可以将大段的 Java 代码添加到页面的不同部分。J2EE 运行时环境创建了许多变量,称为 隐含变量―― 可用于这些 Java 代码的片断。隐含变量的例子有:
request:与页面的特定调用相关的 HttpServletRequest
response:与页面的特定调用相关的 HttpServletResponse
out:与 HttpServletResponse 相关的 PrintWriter
清单 22 展示了 JSP 页面的一个例子,该页面既包含 HTML 也包含 Java.代码。 <% and the %>标签之间的 Java 代码部分称为 scriptlet。
清单 22. HelloWorldservlet:使用 JSP 页面返回内容
注意,JSP 隐含变量 out 的用途是将内容写回到客户机,还要注意 HTML 和 Java 代码的交织。
一个示例场景
为了说明各种体系结构选项,我们将使用一个简单的用户登录场景,它包含:
一个具有 HTML 表单的登录页面,它从用户那里获得用户名和密码
验证用户凭证(可能使用数据库)并重定向站点主页的应用逻辑
使用这个简单的例子可以说明各种应用程序体系结构。
“意大利面条式”代码
在 ASP 端,“意大利面条式”代码方法使用单个 .aspx 文件来同时包含应用逻辑和 HTML 表单。(不建议对现实中的例子采用这种方法,因为这样所有表示逻辑和应用逻辑都将是单个文件,从而您就不能重用用于验证用户凭证的代码。)该代码的轮廓看 起来类似清单 23 中所示的代码。(为简单起见,我们省略了所有错误处理代码。)
清单 23. ASP 中的“意大利面条式”代码
正如清单 24 所示,您可以在 J2EE 中采用相同的方法,使用单个 JSP 页面来同时包含表单和应用逻辑。
清单 24.J2EE 中的“意大利面条式”代码
Login example<%!private boolean validateUser(string userName, String password) { ...}%>...<% if (request.getMethod().equals("GET") ) { %> <% } else { String userName = request.getParameter("username"); String password = request.getParameter("password"); if (validateUser(userName, password)) { response.sendRedirect("mainpage.jsp"); } ... } %>
与 ASP 模型类似,JSP 模型不是事件驱动的,因此您需要检查表单是否被发送回去了,方法是检查该请求,并且如果不是 POST 请求时则添加表单的 HTML。如果它是 POST 请求,您将使用在 JSP 中声明的一个方法来验证登录。注意,使用 <%! 表明该代码是一个方法。Scriptlet 代码将在 JSP 页面处理期间遇到它们的时候执行,因此用于 scriptlet 的标签( <% %>)对方法无效。还要注意如何使用 if/then/else 编程结构来方便地添加或去除较大的 HTML 块。与在 ASP 例子中一样,不推荐将此方法用于 J2EE 开发。表示代码(HTML)和应用逻辑的混合仅允许很少的重用,并且使得代码难于维护。
上一篇:走上开放之路: ASP 开发人员的 J2EE 基础(下)
下一篇:Windows 7 Bitlocker to Go功能解析
登录 注册