2017-04-11 89 views
-1

我有2个java项目。第一个是一个RESTFUL web服务,应该处理CRUD请求。第二个是动态web项目(它有gui)。如何将参数发送到java web项目的宁静服务

假设我在我的web项目中有这个html gui。

enter image description here

(记住我不关心安全性和权威性的原则,我只是wan't了解这首)。

当我填写信息并单击“登录”后,我在web项目中将我的login_servlet称为。在Servlet中创建一个客户对象,并调用RESTful Web服务(doPost方法中):

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    Client client = Client.create(); 
     WebResource webR = client.resource("http://localhost:8080/MyNote/api/login/get"); 

    ClientResponse resp = webR.accept("text/html").get(ClientResponse.class); 

    if (resp.getStatus() == 200){ 
     System.out.println("****** 200 ******"); 
     String output = resp.getEntity(String.class); 
     //System.out.println("****" + output + "****"); 
    } 
} 

至于现在所提供的URL调用RESTful Web服务,它成功地获得打印出里面的下面的代码:

@Path("/login") 
public class UserLogin { 

    @GET 
    @Path("/get") 
    public void login(){ 
     System.out.println("**** I'm checking if user exist in DB *****"); 

    } 
} 

我不是想要做的,是从login_servlet作为参数传递给RESTful Web服务发送插入的用户名和密码,然后返回响应。我怎样才能做到这一点? (只是从一个地方发送参数到另一个+响应的一部分)

+0

为什么不在你的前端使用javascript来与你的休息API进行交流? – bmdelacruz

+0

它必须在java ee – Yoseph

+0

你看过[this](https://docs.oracle.com/javaee/7/tutorial/jaxrs-client002.htm)吗? – bmdelacruz

回答

-1

使用路径参数:

//Rest API 
     @GET 
    @Path("/get/{username}/{password}") 
    public void login(@PathParam("username") String userName, @PathParam("password") String pwd){ 
    } 
//Jersey 

    ClientResponse resp = webR.accept("text/html") 
    .path(userName) 
    .path(password) 
    .get(ClientResponse.class); 

使用查询参数

//Rest API 
    @GET 
    @Path("/get") 
    public void login(@QueryParam("username") String username, @QueryParam("password") String pwd){ 

//Jersey 
ClientResponse resp = webR.accept("text/html") 
.queryParam("username", userName) 
.queryParam("password", pwd) 
.get(ClientResponse.class); 
+0

不要鼓励OP在URL中发送密码。 –

+0

请先阅读这个问题,他说(记住我不关心安全和权威原则,我只是不想了解这一点)。 他想了解如何通过球衣发送params到休息API, – Elgayed

+0

在编写软件时始终关心安全性。即使你是学习者。 –

1

所有的安全之外,你有几个选项发送PARAMS 。

As 查询参数作为Duran上面提到的。 在你的球衣的请求方法,你能处理那些为:

@GET 
@Path("/get") 
public void login(@QueryParam("foo") String var1, @QueryParam("bar") String var2){ 
    // do something 
} 

注意,变量名不必匹配,你传递给@QueryParam()字符串是什么得到匹配和价值注入变量。

由于路径参数你会怎么做:

@GET 
@Path("/get/{foo}/{bar}") 
public void login(@PathParam("foo") String var1, @PathParam("bar") String var2){ 
    // do something 
} 

这里确保你在{}比赛有作为变量名称传递给@PathParam什么。

就泽西岛/ JAX-RS而言,这只是冰山一角,还有其他选择。希望这可以帮助你开始。

编辑:人们似乎采取与被公开过的密码问题,所以让我这样说:NO,你永远不应该在url中传递一个密码,这只是作为一个例子

EDIT2:将用户名更改为foo和密码。

+0

显然是。这就是为什么我的第一句话开始“抛开所有安全问题”,他说“大胆”(记住我不关心安全和权威原则,我只是不想先了解这一点)。“我觉得你甚至没有读过这个问题或答案。 –

+0

更改了var名称,现在他们只是两个不敏感的变量,我希望大家都能找到它。 –

-1

虽然有可能在GET请求(如在以前的答案描述)发送的参数,它通常不如送是一个POST请求并在主体中发送一个JSON负载。

在这里,你只有2个参数(登录和密码),所以它不是太糟糕,但我仍然喜欢在POST中发送一个对象。如果你想这样做,那么在你的RESTful服务中,你只需要用POST注释方法(并检查允许你检索反序列化对象的注释)。

说了这么多,2条评论/问题:

1)为什么你混的servlet和JAX-RS?你可以用JAX-RS实现所有的东西,我会推荐。将注册移至JAX-RS资源。

2)@Path("/get")是一种反模式:你不想在url中有/get。你很少要在URL中使用VERBS(纯粹主义者会说永远不会)。通常,为了注册新用户,我会发送一个POST请求到/ api/registrations,因为我想创建一个新的注册。

+0

不得不说,是的,你所说的一切都是真正。这些是更好地做到这一点的方法。但是我不认为你真的回答了他的问题。他说:“我只是想了解这一点”。 –