使用 Netbeans Jersey ApacheTomcat Java 构建 HTML 表单数据的REST服务

每天‬分享‬最新‬软件‬开发‬,Devops,敏捷‬,测试‬以及‬项目‬管理‬最新‬,最热门‬的‬文章‬,每天‬花‬3分钟‬学习‬何乐而不为‬,希望‬大家‬点赞‬,加‬关注‬,你的‬支持‬是我‬最大‬的‬动力‬。



Jersey 项目有很好的文档记录,因此可以很容易地使用 Java 学习 REST。在本文中,我将构建两个项目。第一个项目将是一个非常简单的 HTML 页面,它向用户显示一个表单,然后将其提交给驻留在同一服务器上的 REST 项目。第二个项目将是 REST 部分。

对于本文,我使用了以下工具:

1. Netbeans 7
2. Apache Tomcat 7
3. Jersey
4. Java

我在 OS X Lion 上构建了这个系统。

继续并使用 Netbeans 7创建一个新的 MavenWeb 应用程序,命名为: MyForm

生成项目之后,获取结果(默认) index.jsp 文件并删除它。在其位置添加一个名为: index.html 的文件,并向其添加以下内容:



    
        REST with Forms
        
    
    
        
Name:
Message:
Item 1:
Item 2:


基本上,我创建了一个简单(丑陋)的表单,它接受用户输入的一些参数。他们提交表单,数据被发送到我们即将构建的 REST 项目。这里的想法是我们使用一个 HTTPPOST 来创建一个新消息。

这是第一个项目!使用 Netbean 的 Maven 集成执行 Clean 和 Build,然后将生成的 WAR 文件部署到 ApacheTomcat。

使用 Netbeans 7创建另一个新的 Maven Web 应用程序,名为: RESTwithForms


向新项目添加两个新的 Java 类:

1.MyApplication

2.MessageResource

Java 的代码如下:

package com.giantflyingsaucer;
 
import com.sun.jersey.api.core.PackagesResourceConfig;
import javax.ws.rs.ApplicationPath;
 
@ApplicationPath("/")
public class MyApplication extends PackagesResourceConfig {
 
    public MyApplication() {
        super("com.giantflyingsaucer");
    }
}


简而言之,这段代码允许我们使用一些 Servlet 3.0的好处(例如,我们不需要为这个项目创建 web.xml 文件)。有关详细信息,请参阅标题为: 示例2.8的部分。自定义应用程序模型和示例2.9中的 Reusing Jersey 实现。使用@ApplicationPath 和 Servlet 3.0在此链接部署 JAX-RS 应用程序。

REST 项目的真正核心在 MessageResource.java 文件中,如下所示:

package com.giantflyingsaucer;
 
import java.net.URI;
import java.util.List;
import java.util.UUID;
 
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import javax.ws.rs.Consumes;
import javax.ws.rs.core.MediaType;
 
@Path("/messages")
public class MessageResource {
 
    @POST
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    public Response createMessage(@FormParam("name") String name,
                                @FormParam("message") String message,
                                @FormParam("thelist") List list) {
        if(name.trim().length() > 0 && message.trim().length() > 0 && !list.isEmpty()) {
            // Note 1: Normally you would persist the new message to a datastore
            // of some sort. I'm going to pretend I've done that and
            // use a unique id for it that obviously points to nothing in
            // this case.
            // Note 2: The way I'm returning the data should be more like the commented
            // out piece, I am being verbose for the sake of showing you how to
            // get the values and show that it was read.
            return Response.created(URI.create("/messages/" + String.valueOf(UUID.randomUUID()))).entity(
                    name+ ": " + message + " --> the items: " + list.get(0) + " - " + list.get(1)).build();
 
            // This is a more real world "return"
            //return Response.created(URI.create("/messages/" + String.valueOf(UUID.randomUUID()))).build();
        }
        return Response.status(Response.Status.PRECONDITION_FAILED).build();
    }
}


注意: 特别注意评论。请不要发电子邮件告诉我,我不应该返回的值文本,也请不要告诉我,我应该迭代列表,等这只是一个演示。在生产环境中,您显然会以不同的方式完成这项工作。这里的关键是简单性和最少的代码。

此时,您需要将 jersey-server 作为依赖项添加到 POM 文件中。


    com.sun.jersey
    jersey-server-linking
    1.9.1


使用 Netbean 的 Maven 集成执行 Clean 和 Build,然后将生成的 WAR 文件部署到 ApacheTomcat。您现在已经准备好测试它了。从第一个项目加载 HTML 文件并输入一些数据,然后提交它。


如果您有一个类似 FireBug 的 Firefox 工具,您还可以看到返回了一个 HTTP201(如果成功的话)。

如果在表单中没有输入任何数据,那么应该返回一个 HTTP412。

没有更多的工作,您可以轻松地使用类似 jQuery 的东西,并通过 AJAX 提交表单。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章