Jython 简明教程

Jython - Servlets

Java servlet 是使用最广泛的 Web 开发技术。我们可以使用 Jython 来编写 servlet,这增加了 Java 提供的功能之外的许多更多优势,因为现在我们还可以利用 Python 语言功能。

我们将使用 NetBeans IDE 使用 Jython servlet 开发 Java Web 应用程序。确保 nbPython plugin 已安装在 NetBeans 安装中。通过选择以下路径启动一个新项目以构建 Web 应用程序 - File → New Project → Java web → New Web Application

提供项目名称和位置。IDE 将创建项目文件夹结构。在 Projects 窗口中的源包节点下添加 Java servlet 文件 (ServletTest.java)。这会在项目的 lib 文件夹中添加 servlet-api.jar 。此外,让 IDE 创建 web.xml descriptor file 。在 ServletTest.java 中添加以下代码。

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ServletTest extends HttpServlet {

   public void doGet (HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      doPost(request, response);
   }

   public void doPost (HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      response.setContentType ("text/html");
      PrintWriter toClient = response.getWriter();

      toClient.println (
         "<html>
            <head>
               <title>Servlet Test</title>" + "
            </head>
            <body>
               <h1>Servlet Test</h1>
            </body>
         </html>"
      );
   }
}

NetBeans 创建的 web.xml 文件将如下所示:

<web-app>
   <servlet>
      <servlet-name>ServletTest</servlet-name>
      <servlet-class>ServletTest</servlet-class>
   </servlet>

   <servlet-mapping>
      <servlet-name>ServletTest</servlet-name>
      <url-pattern>/ServletTest</url-pattern>
   </servlet-mapping>
</web-app>

构建并运行项目以获取浏览器窗口中 <h1> 标签中显示的文本 Servlet Test 。因此,我们在应用程序中添加了一个常规 Java servlet。

现在,我们将添加 Jython Servlet。Jython servlet 通过一个中间 Java servlet(也称为 PyServlet)来工作。PyServlet.class 存在于 jython standalone.jar 中。将其添加到 WEB-INF/lib 文件夹中。

下一步是配置 web.xml 以便在每次提出对任何 *.py file 的请求时调用 PyServlet。这应通过在其中添加以下 xml 代码来完成。

<servlet>
   <servlet-name>PyServlet</servlet-name>
   <servlet-class>org.python.util.PyServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
   <servlet-name>PyServlet</servlet-name>
   <url-pattern>*.py</url-pattern>
</servlet-mapping>

完整的 web.xml 代码如下所示。

<web-app>
   <servlet>
      <servlet-name>ServletTest</servlet-name>
      <servlet-class>ServletTest</servlet-class>
   </servlet>

   <servlet>
      <servlet-name>PyServlet</servlet-name>
      <servlet-class>org.python.util.PyServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>

   <servlet-mapping>
      <servlet-name>ServletTest</servlet-name>
      <url-pattern>/ServletTest</url-pattern>
   </servlet-mapping>

   <servlet-mapping>
      <servlet-name>PyServlet</servlet-name>
      <url-pattern>*.py</url-pattern>
   </servlet-mapping>
</web-app>

将以下 Jython 代码放在项目文件夹中的 WEB-INF 文件夹中,作为 JythonServlet.py,它等效于之前的 ServletTest.java。

from javax.servlet.http import HttpServlet
class JythonServlet1 (HttpServlet):
   def doGet(self,request,response):
      self.doPost (request,response)
   def doPost(self,request,response):
      toClient = response.getWriter()
      response.setContentType ("text/html")

      toClient.println (
         "<html>
            <head>
               <title>Servlet Test</title>" + "
            </head>
            <body>
               <h1>Servlet Test</h1>
            </body>
         </html>"
      )

构建项目并在浏览器中打开以下 URL:

浏览器将显示 Servlet Test 中的 <h1> 标签,如同 Java Servlet 输出一样。