Jython - Servlet


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

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

提供 Project name (项目名称) 和 location (位置)。IDE 将创建项目文件夹结构。在 “Projects”(项目)窗口的 “source packages”(源包)节点下添加 Java servlet 文件 (ServletTest.java)。这会在项目的 lib 文件夹中添加 servlet-api.jar。此外,让 IDE 创建 web.xml 描述符文件。在 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 文件的请求时调用 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 代码作为 JythonServlet.py 放在项目文件夹内的 WEB-INF 文件夹中,相当于上一个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 -

http://localhost:8080/jythonwebapp/jythonservlet.py

浏览器将在 <h1> 标记中显示 Servlet 测试,就像 Java Servlet 输出一样。