论坛首页 编程语言技术论坛

servlet的另类写法:使用jython

浏览 21055 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-06-15  
众所周知,servlet是java在服务器端程序设计的重要组成部分,servlet执行效率较高,适合做程序的逻辑处理,缺点是使用起来比较
繁琐,每个servlet必须在web.xml中声明并且当修改部署后的servet后一般还需要reload容器,这种情况对于快速开发是很不利的,
本文介绍一种另外的serlvet开发方式:使用jython

在http://www.jython.org上下载jython,解压后得到一个.class文件,使用java jython-21安装到硬盘目录,假设为D:\jython-2.1

建立一个名称为jython的web应用,把D:\jython-2.1\jython.jar copy到webapp下的WEB-INF\lib下,并配置web.xml如下:

<servlet>
 <servlet-name>PyServlet</servlet-name>
 <servlet-class>
  org.python.util.PyServlet
 </servlet-class>
 <load-on-startup>11</load-on-startup>
 <init-param>
  <param-name>python.home</param-name>
  <param-value>D:\jython-2.1</param-value>
 </init-param>
 <init-param>
  <param-name>python.path</param-name>
  <param-value>D:\jython-2.1\Lib</param-value>
 </init-param>
</servlet>

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


现在编写一个HelloWorld.py,如下:

from javax.servlet.http import HttpServlet
class HelloWorld(HttpServlet);:#需要类名和文件名一致
    def doGet(self,request,response);:
        response.setContentType("text/html;charset=utf-8");;
        out = response.getWriter();
        print>>out,"<H1>Hello World by Jython Servlet!</H1>";

这个文件放在web应用的根目录下。

启动应用服务器,假设位于localhost,端口8080,访问http://localhost:8080/jython/HelloWorld.py,是不是看到了
“Hello World by Jython Servlet!”字符串输出呢?
正如您所想象的一样,jython servlet无须在web.xml做任何声明,PySerlvet会拦截所有.py请求并分发给各自的jython servlet,
并且在修改HelloWorld的实现后,立刻就可以看到变化,无须重启应用服务器,很方便吧!

注:编写HelloWorld.py的时候请严格缩进,python是一种以缩进区分代码块的语言,不正确的缩进是语法错误
   发表时间:2005-06-18  
你们现在在哪些方面用Jython了,
我想把Quixote的功能用Jython来实现。
0 请登录后投票
   发表时间:2005-06-20  
snowway 写道
众所周知,servlet是java在服务器端程序设计的重要组成部分,servlet执行效率较高,适合做程序的逻辑处理,缺点是使用起来比较
繁琐,每个servlet必须在web.xml中声明并且当修改部署后的servet后一般还需要reload容器,这种情况对于快速开发是很不利的,
本文介绍一种另外的serlvet开发方式:使用jython ...


不过这样和写全是 Java 代码的 jsp 就没有什么区别了, 除非开发人员很熟悉Python, 不过我想这样的人往往更熟悉Java
0 请登录后投票
   发表时间:2005-06-20  
glassprogrammer 写道
snowway 写道
众所周知,servlet是java在服务器端程序设计的重要组成部分,servlet执行效率较高,适合做程序的逻辑处理,缺点是使用起来比较
繁琐,每个servlet必须在web.xml中声明并且当修改部署后的servet后一般还需要reload容器,这种情况对于快速开发是很不利的,
本文介绍一种另外的serlvet开发方式:使用jython ...


不过这样和写全是 Java 代码的 jsp 就没有什么区别了, 除非开发人员很熟悉Python, 不过我想这样的人往往更熟悉Java


上面的仅仅是个例子,我并不是说把表现层的代码放在jython servlet中.实际上使用jython servlet并不需要开发人员很熟悉python,通常是语法层面需要熟悉而已,但一定要熟悉java api.

jython servlet的优点是可以使用强大的python特性,比如动态类型,高级数据类型,无须显式编译和重载模块等等,这些都是java不具备的,正是因为这些特性,才保证了jython servlet的开速开发.
0 请登录后投票
   发表时间:2005-06-20  
马伟 写道
你们现在在哪些方面用Jython了,
我想把Quixote的功能用Jython来实现。


我一般使用jython充当某些框架开发中的脚本引擎,这样用户就有机会在配置文件中写一些简单的逻辑.比如工作流系统中的脚本语言支持.
0 请登录后投票
   发表时间:2005-06-20  
挺有趣 ! servlet变得比过去灵活多了.

问一下 python自己的库也可以在jython中随意使用吗 ?
0 请登录后投票
   发表时间:2005-06-20  
out.print(), 怎么都输与jsp,velocity等Template Engine一点.
0 请登录后投票
   发表时间:2005-06-21  
winterwolf 写道
挺有趣 ! servlet变得比过去灵活多了.

问一下 python自己的库也可以在jython中随意使用吗 ?


可以的,只要sys.path列表中包含模块查找路径就可以了.在首次调用模块的时候jython引擎会把python模块编译成java虚拟机认识的class文件.
这样的话,有些功能就可以使用python来编写了
0 请登录后投票
   发表时间:2005-06-21  
calvin 写道
out.print(), 怎么都输与jsp,velocity等Template Engine一点.


jython servlet和template engine不是一回事,jython servlet的特长并不在表现层的.
0 请登录后投票
   发表时间:2005-06-21  
引用

jython servlet和template engine不是一回事,jython servlet的特长并不在表现层的.


哦,搂主的简单例子是用jython直接print嘛。

我也提倡在IDE足够友好的时候,用groovy/jruby/jython 写controler和dao类,
&lt;在Spring+Hibernate框架下,用动态语言写业务类&gt; http://blog.csdn.net/calvinxiu/archive/2005/06/13/393429.aspx
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics