最近由于项目需要,用到了grails,这玩意确实好用,生产率高有类型python的速度与简洁。仅第一印象,用的还不深入,说的不对请轻拍。

遇到的几个问题:

1. groovy远程调试

玩Java的应该都知道在eclipse中有个java remote debug的功能,可以调试java拉起的程序,含jar,含web。

话说业界某公司做IDE,拖拽图元出来的代码,都能对图元进行远程调试,虽然那功能做的不是很漂亮,但也不错。

不多了,言归正传。

一个语言如果不能远程调试,那多痛苦啊,尤其是用在web后端的语言。因为一般上点规模的不是玩具的系统都会涉及到很多其他模块,在本机搭环境,会痛苦的一沓。何况很多系统的模块只支持Linux系统

找了好久未能解决。

stackoverflow有一哥们在问,但是也没具体结果

貌似结论就是不支持

How to debug Groovy code via the remote Java application debugging in Eclipse

后来,后来,终于在群里,—飞/aiq警 这个哥们告诉我上IntelliJ IDEA 这个IDE

我带着半信半疑的态度用了把,果然行。

再次谢谢 —飞/aiq警 这个哥们。

说下方法(我这边打出来war是放在tomcat容器中的)

1. 修改tomcat的启动脚本增加dtsocket配置已经打开远程debug的参数

Shell
 
export JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8333,server=y,suspend=n $JAVA_OPTS"
1
export JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8333,server=y,suspend=n $JAVA_OPTS"

2. 重启tomcat 确认8333端口已经监听

3.  配置IntelliJ, 与eclipse的远程调试类似,大同小异,只是菜单在地方不一样,快捷键不一样

我新建了一个远程debug配置

如下图1

然后启动这个debug 就可以连接到远程的server上了

然后run debug 刚才的那个远程debug就可以了

试下断点,果然行

2. 关于请求contriller中的action让其返回xml 出现404问题

在很多场景下,比如做api的需求,webservice的需求,都需要返回xml或者json格式的数据。

但是我按官网的文档区做,怎么做怎么就是404.

说我那个action对应的view不在,汗,我把那个view放上去,他就显示view中的内容,也不显示action中组装的xml的内容。

没招,试了很久,翻阅若干文档,国内的,国外的,E文不够好,看的不是很明白。

终于,终于,发现一个哥们说的,试了下,果然ok,

请猛戳这里REST Service XML Output in Grails via Content Negotiation

关键点在这里:

if you call http://localhost:8080/myapp/blah/list.xml or http://localhost:8080/myapp/blah/list?format=xml, you will get an XML result

其实,看到这里,这个问题,也不复杂。但是我为什么会被绕进去呢,嗯,(⊙_⊙),人品问题?好吧。

我解释下,这玩意按官网的说法,你要想响应回xml格式的内容,只需要

JavaScript
 
 
 
1
2
3
4
5
6
7
8
9
10
      withFormat {
        xml {
          render(contentType:"text/xml") {
            response() {
              returncode("FAILED")
              message("Could not find conference.")
            }
          }
        }
      }

就可以了。

但是我的为什么出问题呢

原因是我测试的时候测试页面用的是post请求(当然我已经在urlMappings中配置上post对应的action

“/commonFileShare/preBatchDownload”(controller:”commonFileShare”) {
action = [POST:'preBatchDownload', GET:'preBatchDownload']
}

)

如果用get请求的话就是ok

后来我post的时候

http://192.168.1.148:8080/xxx/commonFileShare/preBatchDownload?format=xml

也是就说你用post方式请求的时候,后面加?format=xml

就可以啦。

–EOF–

http://www.simonme.org/?p=169

grails的controller和action那点事---远程调试groovy代码的更多相关文章

  1. 实现MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器

    MVC开发中几种以AOP方式实现的Filters是非常好用的,默认情况下,我们通过App_Start中的FilterConfig来实现的过滤器注册是全局的,也就是整个应用程序都会使用的,针对单独的Fi ...

  2. 解读ASP.NET 5 & MVC6系列(10):Controller与Action

    我们知道在MVC5和之前的版本,两个框架的生命周期是不一样的,在新版MVC6中,MVC Controller/Web API Controller已经合二为一了,本章我们主要讲解Controller和 ...

  3. [ASP.NET MVC 小牛之路]09 - Controller 和 Action (1)

    我们知道,在 MVC 中每个请求都会提交到 Controller 进行处理.Controller 是和请求密切相关的,它包含了对请求的逻辑处理,能对 Model 进行操作并选择 View 呈现给用户, ...

  4. [ASP.NET MVC 小牛之路]10 - Controller 和 Action (2)

    继上一篇文章之后,本文将介绍 Controller 和 Action 的一些较高级特性,包括 Controller Factory.Action Invoker 和异步 Controller 等内容. ...

  5. 在ASP.NET MVC 中获取当前URL、controller、action

    一.URL的获取很简单,ASP.NET通用: [1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取 虚拟 ...

  6. Asp.Net_Mvc_获取当前Url、Controller、Action

    一.URL的获取很简单,ASP.NET通用: [1]获取 完整url (协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取 虚拟 ...

  7. 004. Asp.Net Routing与MVC 之二: 请求如何激活Controller和Action

    上篇讲到 请求到达 MvcRouteHandler ,并且透过 IRouteHandler.GetHttpHandler 获取到了真正的处理程序 MvcHandler 这次我们看看,MvcHandle ...

  8. [译] ASP.NET MVC 6 attribute routing – the [controller] and [action] tokens

    原文:http://www.strathweb.com/2015/01/asp-net-mvc-6-attribute-routing-controller-action-tokens/ 当在Web ...

  9. Yii里获取当前controller和action的id

    Yii里获取当前controller和action的id 在控制器里$name = $this->getId();  // controller$name = $action->id;  ...

随机推荐

  1. python学习教程(九)sqlalchemy框架的modern映射

    首先写一个modern.py文件, from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Col ...

  2. git使用说明

    1,git clone git://github.com/schacon/simplegit.git git工作目录,暂存目录,本地代码仓库都有代码了. 2,git pull git://github ...

  3. Linux - 文件系统结构

    文件系统结构:   Linux文件系统为一个倒转的系统单根树状结构. 根为   / 严格区分大小写. 路径使用   /    分割,Windows使用  \     . 当前工作目录: 每一个Shel ...

  4. Mac 修改Host 绑定host

    Mac 系统下 ,修改Host 文件: 打开命令行终端 输入 sudo vi /etc/hosts 之后回车确认,进入vi 编辑界面(进行vi编辑操作,之后保存就行了) 版权声明:本文为博主原创文章, ...

  5. Delphi安装NT服务程序时(不出现提示信息)

    如果我们不加上"/silent",那么Delphi在安装和卸载NT服务程序时候,都会出现一个提示信息,不希望出现这个提示信息,那么使用如下命令: 1,安装:“你的nt程序 /ins ...

  6. mysql 创建函数set global log_bin_trust_function_creators=TRUE;

    <pre name="code" class="html">set global log_bin_trust_function_creators=T ...

  7. linux shell 正则表达式(BREs,EREs,PREs)差异比较

    linux shell 正则表达式(BREs,EREs,PREs)差异比较 则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符 串的单个字符串.在很多文本编辑器或其他工具里 ...

  8. Java_io体系之BufferedWriter、BufferedReader简介、走进源码及示例——16

    Java_io体系之BufferedWriter.BufferedReader简介.走进源码及示例——16 一:BufferedWriter 1.类功能简介: BufferedWriter.缓存字符输 ...

  9. C中程序的内存分配

    一.预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. ...

  10. Greenplum同步到Oracle

    开发提出须要从Greenplum同步到Oracle的解决方式,写了个脚本用于定时调度处理. #!/bin/sh #copy_gp_2_ora.sh if [ $# -ne 1 ]; then     ...