开发 WebLogic Server 的 Web 应用程序、Servlet 和 JSP

http://edocs.weblogicfans.net/wls/docs92/webapp/configureservlet.html

创建和配置 Servlet

以下部分描述如何创建和配置 Servlet。

 


配置 Servlet

在 J2EE 标准 Web 应用程序部署描述符 web.xml 的多个条目中将 servlet 定义为 Web 应用程序的一部分。web.xml 文件位于 Web 应用程序的 WEB-INF 目录中。

servlet 根元素中 web.xml 的第一个条目,定义 servlet 的名称并指定执行 servlet 的已编译类。(或者可以指定一个 JSP,而不是指定一个 servlet 类。)servlet 元素也包含初始化特性的定义和 servlet 的安全角色。

servlet-mapping 元素中 web.xml 的第二个条目,定义调用此 servlet 的 URL 模式。

Servlet 映射

Servlet 映射控制如何访问 servlet。下列示例演示如何在 Web 应用程序中使用 servlet 映射。在示例中,一组 servlet 配置和映射(从 web.xml 部署描述符中)后跟显示用于调用这些 servlet 的 URL 的表(请参阅 URL 模式和 Servlet 调用

有关 servlet 映射的详细信息,例如一般的 servlet 映射规则和约定,请参阅 Servlet 2.4 specification 的相关部分。

清单 4-1 Servlet 映射示例
<servlet>
  <servlet-name>watermelon</servlet-name>
  <servlet-class>myservlets.watermelon</servlet-class>
</servlet>
<servlet>
  <servlet-name>garden</servlet-name>
  <servlet-class>myservlets.garden</servlet-class>
</servlet>
<servlet>
  <servlet-name>list</servlet-name>
  <servlet-class>myservlets.list</servlet-class>
</servlet>
<servlet>
  <servlet-name>kiwi</servlet-name>
  <servlet-class>myservlets.kiwi</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>watermelon</servlet-name>
  <url-pattern>/fruit/summer/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>garden</servlet-name>
  <url-pattern>/seeds/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>list</servlet-name>
  <url-pattern>/seedlist</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>kiwi</servlet-name>
  <url-pattern>*.abc</url-pattern>
</servlet-mapping>

表 4-1 url 模式和 Servlet 调用
URL
调用的 Servlet
http://host:port/mywebapp/fruit/summer/index.html
watermelon
http://host:port/mywebapp/fruit/summer/index.abc
watermelon
http://host:port/mywebapp/seedlist
list
http://host:port/mywebapp/seedlist/index.html
默认 servlet(如果已配置)或未找到错误消息的 HTTP 404 文件。
如果 list servlet 的映射已经是 /seedlist*,则会调用 list servlet。
http://host:port/mywebapp/seedlist/pear.abc
kiwi
如果 list servlet 的映射已经是 /seedlist*,则会调用 listservlet。
http://host:port/mywebapp/seeds
garden
http://host:port/mywebapp/seeds/index.html
garden
http://host:port/mywebapp/index.abc
kiwi

ServletServlet 可以用于创建 servlet 的默认映射。例如,要创建一个默认映射将所有的 servlet 映射到 /myservlet/*,以便可以使用 http://host:port/web-app-name/myservlet/com/foo/FooServlet 来调用 servlet,请将下列代码添加到 web.xml 文件。(web.xml 文件位于 Web 应用程序的 WEB-INF 目录中。)

<servlet>
  <servlet-name>ServletServlet</servlet-name>
  <servlet-class>weblogic.servlet.ServletServlet</servlet-class>
</servlet>

<servlet-mapping>

<servlet-name>ServletServlet</servlet-name>
  <url-pattern>/myservlet/*</url-pattern>
</servlet-mapping>

 


设置默认 Servlet

每个 Web 应用程序都有一个默认 servlet。此默认 servlet 可以是由用户指定。如果未指定默认 servlet,则 WebLogic Server 使用名为 FileServlet 的内部 servlet 作为默认 servlet。

可以将任意 servlet 注册为默认 servlet。编写默认 servlet 可以允许使用自己的逻辑来决定如何处理回到默认 servlet 的请求。

因为 FileServlet 用于提供大多数文件服务,例如文本文件、HTML 文件、图像文件等等,所以设置默认 servlet 替换 FileServlet时应非常谨慎。如果希望默认 servlet 提供上述文件服务,则需要将该功能编写到默认 servlet。

要设置用户定义的默认 servlet,请执行下列操作:

  1. 配置客户端访问 Web 应用程序的方式所述定义 servlet,按如下所示使用 url-pattern = "/" 添加 servlet 映射:
    <servlet-mapping>
    <servlet-name>MyOwnDefaultServlet</servlet-name>
    <url-pattern>/myservlet/*(</url-pattern>
    </servlet-mapping>
  2. 如果仍然想让 FileServlet 使用其他扩展名来提供文件服务,请执行下列操作:
    1. 定义 servlet 并为其给定一个 <servlet-name>,例如 myFileServlet
    2. <servlet-class> 定义为 weblogic.servlet.FileServlet
    3. 使用 <servlet-mapping> 元素,将文件扩展名映射到 myFileServlet (除了对默认 servlet 进行映射之外)。例如,如果希望 myFileServlet 提供 .gif 文件服务,请将 *.gif 映射到 myFileServlet
注意:如果未指定 docHome 参数(不赞成在此版本中使用),则当确定源文件名时,FileServlet 会包括 SERVLET_PATH。因此,通过将 FileServlet 映射到 /dir/* 等,从特定目录显式提供文件服务也是可能的。

 


Servlet 初始化特性

在 Web 应用程序部署描述符中,使用 param-nameparam-value 标记,并用 servlet 元素的 init-param 元素来定义 servlet 的初始化特性。web.xml 文件位于 Web 应用程序的 WEB-INF 目录中。例如:

清单 4-2 配置 web.xml 中 Servlet 初始化特性的示例
<servlet>
  <servlet-name>HelloWorld2</servlet-name> 
  <servlet-class>examples.servlets.HelloWorld2</servlet-class>
  <init-param>
    <param-name>greeting</param-name> 
    <param-value>Welcome</param-value> 
  </init-param>
  <init-param>
    <param-name>person</param-name> 
    <param-value>WebLogic Developer</param-value> 
  </init-param>
</servlet>

 


编写简单 HTTP Servlet

此部分提供编写简单 HTTP servlet 的过程,此过程输出消息 Hello World。说明这些步骤的完整代码示例 (HelloWorldServlet) 位于本部分末尾。有关使用各种 J2EE 和 Weblogic Server 服务,例如 servlet 中的 JDBC、RMI 和 JMS,将会在本文档的后面部分进行论述。

  1. 导入相应的包和类,包括如下:
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
  2. 扩展 javax.servlet.http.HttpServlet。例如:
    public class HelloWorldServlet extends HttpServlet{
  3. 实现 service() 方法。

    servlet 的主要功能是从 Web 浏览器中接受 HTTP 请求,并返回 HTTP 响应。使用 servlet 的 service() 方法完成此项工作。服务方法包括用于创建输出的响应对象和用于接收来自客户端数据的请求对象。

    其他 servlet 示例可能实现 doPost() 和/或 doGet() 方法。这些方法只答复 POST 或 GET 请求,如果希望从单个方法中处理所有的请求类型,则 servlet 可以简单地实现 service() 方法。(但是如果选择实现 service() 方法,则无法实现 doPost()doGet() 方法,除非在开始使用 service() 方法时调用 super.service()。)HTTP servlet 规范描述用于处理其他请求类型的方法,但这些方法都统称为服务方法。

    所有的服务方法都采用相同的参数。HttpServletRequest 提供有关请求的信息,而 servlet 使用 HttpServletResponse 来答复 HTTP 客户端。服务方法类似下列内容:

    public void service(HttpServletRequest req,
           HttpServletResponse res) throws IOException
    {
  4. 设置如下内容类型:
    res.setContentType("text/html");
  5. 获取 java.io.PrintWriter 对象的引用以便用于输出,如下所示:
    PrintWriter out = res.getWriter();
  6. 如下例所示,使用 PrintWriter 对象的 println() 方法创建 HTML。
    out.println("<html><head><title>Hello World!</title></head>");
    out.println("<body><h1>Hello World!</h1></body></html>");
      }
    }
  7. 编译 servlet,如下所示:
    1. 使用正确的类路径和路径设置来设置开发环境外壳。
    2. 从包含 servlet 的 Java 源代码的目录中,将 servlet 编译到包含 servlet 的 Web 应用程序的 WEB-INF/classes 目录。例如:
      javac -d /myWebApplication/WEB-INF/classes myServlet.java
  8. 将 servlet 部署为 WebLogic Server 所承载 Web 应用程序的一部分。
  9. 从浏览器中调用 servlet。

    用于调用 servlet 的 URL 取决于: (a) 包含 servlet 的 Web 应用程序名和 (b) 在 Web 应用程序部署描述符中映射的 servlet 名。用于调用 servlet 的 URL 也可以包括请求参数。

    通常 servlet 的 URL 如下所示:

    http://host:port/webApplicationName/mappedServletName?parameter

    URL 的组件定义如下:

    • host 是运行 WebLogic Server 的计算机名。
    • port 是上述计算机监听 HTTP 请求所在的端口。
    • webApplicationName 是包含 servlet 的 Web 应用程序名。
    • parameters 是从浏览器发出且在 servlet 上可用的包含信息的一个或多个名值对。

      例如,要使用 Web 浏览器来调用部署于 examplesWebApp 中且从计算机上运行的 WebLogic Server 接受服务的 HelloWorldServlet (本文档中介绍了此示例),请输入下列 URL:

      http://localhost:7001/examplesWebApp/HelloWorldServlet

      URL 的 host:port 部分可以由映射到 WebLogic Server 的 DNS 名来替换。

 


高级功能

上述步骤创建了基本的 servlet。也可以使用 servlet 的高级功能。

  • 处理 HTML 表单数据 - HTTP servlet 可以接收和处理以 HTML 表单形式、来自于浏览器客户端的数据。
  • 设计应用程序 - TTP servlet 提供许多方法来设计应用程序。下列部分提供有关编写 servlet 的详细信息:
  • 初始化 servlet - 如果 servlet 已经初始化,servlet 需要初始化数据、接受初始化参数或执行其他操作时,则可以替换 init() 方法。
  • 使用 servlet 中的“会话”和“持久性”- 会话和持久性允许在 HTTP 会话中或会话间跟踪用户。会话管理包括 cookie 的使用。有关详细信息,请参阅下列部分:
  • 使用 servlet 中的 WebLogic 服务 - WebLogic Server 提供多种可以在 Web 应用程序中使用的服务和 API。这些服务包括 Java 数据库连接(Java Database Connectivity,简称 JDBC)驱动程序、JDBC 数据库连接缓冲池、Java 消息传递服务(Java Messaging Service,简称 JMS)、Enterprise JavaBeans (EJB) 和远程方法调用(Remote Method Invocation,简称 RMI)。有关详细信息,请参阅下列部分:

 


完整 HelloWorldServlet 示例

本部分提供上述过程中所使用示例的完整 Java 源代码。此示例是一个响应 HTTP 请求的简单 servlet。本文档的后面部分中会围绕此示例分析如何使用 HTTP 参数、cookie 和会话跟踪。

清单 4-3 HelloWorldServlet.java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class HelloWorldServlet extends HttpServlet {
  public void service(HttpServletRequest req, 
                      HttpServletResponse res)
       throws IOException
  {
    // 必须首先设置内容类型
    res.setContentType("text/html");
    // 现在获取 PrintWriter 以将 HTML 插入
    PrintWriter out = res.getWriter();
    out.println("<html><head><title>" +
                "Hello World!</title></head>");
    out.println("<body><h1>Hello World!</h1></body></html>");
  }
}

可以在 WebLogic Server 分发的 samples/examples/servlets 目录中,找到用于编译和运行示例的源代码和说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值