众所周知,目前很多网站都提供了API的服务,其中也包括JavaEye。调用网站的API可以提供接口给其他系统使用,方便开发者实现mashup。
一般的API可以是web service,也可以是返回xml、json,其实web service也是返回xml。我们使用grails可以非常容易实现返回xml,而无需借助任何插件。当然在grails中使用web service也相当容易。
下面是一个API的controller:
import grails.converters.*
class ApiController {
def login = {
def userName = params.userName
def password = params.password
def user = User.findWhere(userName:userName,password:password)
if (user)
render user as XML
else
render(text:"<xml><user>not found user</user></xml>",contentType:"text/xml",encoding:"UTF-8")
}
}
这样访问http://localhost:8080/工程名称/api/login?userName=test&password=test
如果存在用户名为test 密码为test的用户,则返回类似如下的xml:
<?xml version="1.0" encoding="UTF-8" ?>
<user id="2">
<userName>test</userName>
<password>test</password>
</user>
如果不存在该用户 也会返回一段xml。
如果需要添加其他的方法供外界调用,只需增加一个action,将其render as xml
需要注意的一点是:如果使用了grails的filter,必须修改相应的filter,比如我的代码如下:
class LoginFilters {
def filters = {
loginCheck(controller:'*', action:'*'){
before = {
if (params.controller == "api") {
return true
}
if(!session.user) {
if( !actionName.equals('login') && !actionName.equals('doLogin') ) {
redirect(controller:'user',action:'login')
return false
}
}
}
}
}
}
这样,如果访问apicontroller,就可以返回xml,否则的话只能返回登陆页面
其他的client端或者别的,只需解析xml就能得到相应的数据。
比如:使用andorid做一个系统的客户端,该系统采用grails实现,首先第一步就需要登陆系统。登陆的话就要验证用户名和密码。
登陆的代码如下:
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpProtocolParams;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
/**
* @author Tony Shen
*
*/
public class LoginActivity extends Activity {
Button cancleButton; //取消按钮
Button loginButton; //登陆按钮
String responseBody = null;
String result = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
validate();
}
private void validate() {
cancleButton = (Button) findViewById(R.id.cancel);
cancleButton.setOnClickListener(cancleListener);
loginButton = (Button) findViewById(R.id.login);
loginButton.setOnClickListener(loginListener);
}
// cancle按钮监听器
OnClickListener cancleListener = new OnClickListener() {
public void onClick(View v) {
Intent intent0 = new Intent(LoginActivity.this, LoginActivity.class);
startActivity(intent0);
}
};
// login按钮监听器
OnClickListener loginListener = new OnClickListener() {
public void onClick(View v) {
CharSequence userNameValue = ((EditText) findViewById(R.id.username)).getText();
CharSequence passwordValue = ((EditText) findViewById(R.id.password)).getText();
String url = "/TheSales/api/login";
String host = "192.168.1.2:8080";
String params = "userName="+userNameValue.toString()+"&password="+passwordValue.toString();
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(HttpProtocolParams.HTTP_CONTENT_CHARSET,"UTF-8");
HttpGet httpget = new HttpGet("http://"+host+url+"?"+params);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
try {
responseBody = httpclient.execute(httpget, responseHandler);
Document document = DocumentHelper.parseText(responseBody);
Element root = document.getRootElement();
if("not found user".equals(root.elementText("user")))
{
showDialog(1);
} else {
Intent intent1 = new Intent(LoginActivity.this,c.class);
startActivity(intent1);
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
protected Dialog onCreateDialog(int id) {
return buildDialog(LoginActivity.this);
}
private Dialog buildDialog(Context context) {
Dialog dialog = new Dialog(context);
dialog.setTitle("用户名或密码出错,请重新输入!");
return dialog;
}
}
LoginActivity主要是通过HttpClient模拟请求系统,调用网站的api,返回xml。然后解析xml验证是否存在该用户。
MainActivity的代码很简单,主要使用main.xml,如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/android:empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="登陆成功!" />
</LinearLayout>
这样我们就可以登陆系统了,界面很简单,只不过是通过这个思路实现网站的API
- 大小: 11.2 KB
分享到:
相关推荐
3. 创建第一个Grails应用,了解MVC结构。 4. 学习GSP和模板引擎,掌握动态页面的生成。 5. 深入研究GORM,理解数据持久化机制。 6. 探索Grails插件,找到适合项目需求的功能扩展。 7. 阅读Grails中文API文档,解决...
通过定义Groovy类并使用Grails的GORM(Grails Object Relational Mapping)来与数据库交互,可以轻松实现数据持久化。 4. **控制器(Controllers)** 控制器负责处理HTTP请求,调用业务逻辑并生成响应。Grails的...
grails_API_文档,CHM格式 ,内容详细.
以下是一个详细的过程,帮助初学者理解如何在Grails中实现分页。 首先,让我们从控制器开始。在Grails中,控制器是业务逻辑和视图之间的桥梁。为了实现分页,你需要在控制器中定义一个方法,例如`processPage`,它...
Grails,一个基于Groovy动态语言的开源MVC框架,为Web开发提供了高效且简洁的解决方案。自2007年发布以来,Grails以其快速开发能力,降低了Web应用的复杂性,吸引了众多开发者。本文将引导读者深入理解Grails的基本...
"Grails下拉框联动最优实现"这个主题聚焦于如何在Grails应用中优雅地实现下拉框(Dropdown)的联动效果,这种效果常见于表单中,例如一个下拉框的选择会动态更新另一个下拉框的选项。 下拉框联动的核心是前端的交互...
总的来说,"第一个grails程序"是一个基础的登录验证系统,展示了Grails如何快速构建Web应用,包括处理用户请求、与数据库交互、实现业务逻辑和视图渲染。这个简单的例子对于初学者来说,是理解Grails框架工作原理和...
《Grails权威指南》是一本全面深入探讨Grails框架的专著,旨在帮助读者掌握这一强大的Web开发工具。Grails是一种基于Groovy语言的开源框架,它为构建现代、高效的应用程序提供了简洁高效的解决方案。本指南针对不同...
总结来说,Grails 是一个强大的Web开发框架,借助Groovy的灵活性和Java生态的稳定性,为开发者提供了高效的开发环境。无论是初学者还是经验丰富的开发者,都能从Grails的简洁设计和强大功能中受益。通过深入学习...
Grails 是一个基于 Groovy 语言的开源Web应用框架,它构建于Spring框架之上,旨在提高开发效率,提供简洁、灵活的语法,以及丰富的插件系统。本文档将带你深入理解Grails的核心概念、主要特性以及实践技巧。 1. **...
标题中的“grails使用freemarker.rar”表明这是一个关于如何在Grails框架中应用FreeMarker模板引擎的资源包。FreeMarker是一个开源的、基于Java的模板引擎,它用于生成动态HTML或其他格式的文本,比如XML、PDF等。...
在这个教程中,我们将探讨如何配置项目、创建REST服务以及使用Grails的特性来实现RESTful API。 首先,我们需要配置`build.gradle`文件,这是Grails项目的核心配置文件。在本例中,我们看到项目版本为"0.1",组名...
Grails,作为一个基于Groovy语言的开源Web应用框架,深受开发者喜爱,它简化了Java开发的复杂性,提供了强大的MVC(Model-View-Controller)架构,以及丰富的插件系统。这份用户手册将帮助你深入理解和高效使用...
安装完成后,创建一个Grails应用程序是另一个重要的步骤,这可以通过命令行工具或者集成开发环境(IDE)来完成。Grails提供了一个默认的"Hello World"示例,帮助新手快速理解框架的基本结构。 Grails框架的配置通常...
Grails是一个基于Groovy语言的开源Web应用框架,它简化了开发过程,尤其适合快速构建动态网站。在Eclipse中搭建Grails项目可能相对复杂,但通过以下步骤,即使是初学者也能顺利进行。 1. **Grails环境安装** - ...
4. **创建Grails项目**:现在,你可以通过Eclipse的"New" -> "Grails Project"来创建一个新的Grails项目。选择合适的Grails版本和其他配置,然后Eclipse会自动生成项目结构。 5. **开发与调试**:在Eclipse中,你...
在命令行中输入以下命令来创建一个新的Grails应用程序: ``` grails create-app demo ``` 其中,“demo”是你创建的应用程序的名字。 3. **查看输出结果** 命令执行成功后,你会看到一系列输出信息,这些...
实际上,一个grails插件和一个grails应用基本是完全一样的,同样可以使用grails run-app命令来运行。区别仅在于一个插件的根目录下需要提供一个fooplugin.groovy文件,提供插件的一些描述信息。
Grails 是一个基于Groovy语言的开源Web应用框架,它构建在Spring Boot之上,提供了丰富的功能和便捷的开发体验。Ajax(Asynchronous JavaScript and XML)技术则是Web开发中用于实现页面无刷新、局部更新的一种重要...