zoukankan      html  css  js  c++  java
  • Java Groovlets和普通的Web项目集成

    由于Groovy动态语言的方便性,如果想在普通的web项目中集成有两个选择

    使用基于groovy的Grails框架,非常的方便,适用于新建的项目

    使用groovy本身集成,适用已有项目的维护(毕竟按照grails的约定升级一个项目对于大的项目还是有很多的工作量的)

    下文把实际涉及的一个项目维护使用groovy的过程总结一下:

    Web.xml配置:加入groovy响应的servlet

    <servlet>

    <servlet-name>Groovy</servlet-name>

    <servlet-class>groovy.servlet.GroovyServlet</servlet-class>

    </servlet>

    <servlet-mapping>

    <servlet-name>Groovy</servlet-name>

    <url-pattern>*.groovy</url-pattern>

    </servlet-mapping>

    加入依赖库

    groovy-all-1.7.10.jar groovy的所有依赖项

    mysql-connector-java-5.0.7-bin.jar:mysql的驱动,数据库项目使用

    例子

    以下是使用sql和数据绑定等的简单实例

    importgroovy.sql.Sql

    if(!session)

    {

    session = request.getSession(true)

    }

    if(!session.Counter)

    {

    session.Counter =1

    }

     /*DROP TABLE IF EXISTS `demo`.`text_search`;

    CREATE TABLE  `demo`.`text_search` (

      `id` bigint(20) NOT NULL auto_increment,

      `version` bigint(20) NOT NULL,

      `description` varchar(255) NOT NULL,

      `username` varchar(255) NOT NULL,

      PRIMARY KEY  (`id`),

      UNIQUE KEY `username` (`username`)

    ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

    */

    defdb = groovy.sql.Sql.newInstance('jdbc:mysql://localhost:3306/demo','root', '', 'com.mysql.jdbc.Driver')

    def name = params.guess

    defdesc = "descdd"

    try

    {

    db.execute("insert into text_search (version,username, description) values(1, ${name} , ${desc})")

    }catch(exception)

    {

    println '已经存在'

    }

    html.html{

    head{

    title("Groovy Demo")

        }

    body{

    p("${request.remoteHost}::: ${session.Counter}")

            h1 'Variables in the Binding:'

    table(summary:'binding') {

    tbody {

    binding.variables.each{ key, value ->

    tr {

    tdkey.toString()

    td(value ? value.toString() : 'null')

                            }

                        }

                }

            }

    hr()

    db.eachRow("select * from text_search"){

    println it.id

    printlnit.username

    hr()

            }

        }

    }

    session.Counter=  session.Counter + 1

    使用http://localhost:8084/demo/hello.groovy?guess=demo访问即可写入数据,读取内容

    相关的信息参考

    名称

    备注(Servlet中的对应)

    实例用法

    headers

    Map类型

    HTTP request headers

    headers.host

    params

    Map类型

    HTTP request parameters

    params.myParam

     

    session

    ServletSession, can be null

    session?.myParam

    request

    HttpServletRequest

    request.remoteHost

    response

    HttpServletResponse

    response.contentType=’text/xml’

    context

    ServletContext

    context.myParam

    application

    ServletContext (同 context)

    application.myParam

    out

    response.writer

    延迟初始化,第一次使用时初始化

    sout

    response.outputStream

    延迟初始化,第一次使用时初始化

    html

    Builderinitialized as  new MarkupBuilder(out)

    延迟初始化,第一次使用时初始化

     

    TemplatingGroovlets

    如果想处理更服务的页面,可以使用模板,具体参考文档

    总结

    对于java不是很熟的人员(如.net人员)维护已有的java web项目,使用groovy可以比较快速的跟进,同时由于groovy语法的简便性和集成性,对于普通的xml文件处理、数据处理等可以使用较少的简洁的代码实现

     Groovy的sample比较系统统一,查找方便

    和已有的java代码可以互相调用

  • 相关阅读:
    【转】c语言中的#号和##号的作用
    stm32 HAL库编程驱动控制文件<stm32f1xx_hal_conf.h>的使能方法
    rt-thread是如何做到通过menuconfig配置将相应文件加入工程和从工程中除去
    rt-thread 学习路线
    stm32使用rt-thread在文件《stm32f1xx_hal.h》中头文件包含顺序引出的错误
    rt-thread之stm32系列BSP制作方法
    使用rt-thread中BSP-stm32 ENV构建工具报错
    rt-thread中动态内存分配之小内存管理模块方法的一点理解
    内存对齐
    rt-thread中线程内置定时器的作用 ---
  • 原文地址:https://www.cnblogs.com/2018/p/2016306.html
Copyright © 2011-2022 走看看