【问题标题】:How can I return a String after client post from android to page JSP?客户端从android发布到页面JSP后如何返回字符串?
【发布时间】:2016-10-19 08:51:51
【问题描述】:

我正在为大学项目开发​​一个 Web 应用程序,其中一个 android 客户端向 Java 服务器发送一个图像,然后服务器将图像与数据库中的图像进行比较,它必须将响应作为 String 对象发送到调用服务器的客户端。我该怎么做? 我使用 android-async-http 从客户端发送图像,效果很好,但我不知道如何发送响应。 这是客户端的部分代码:

public void makeHTTPCall(){
    prgDialog.setMessage("Server Connection..);
    AsyncHttpClient client=new AsyncHttpClient();
    client.post(ipAddress,params, new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
            prgDialog.hide();
            Snackbar.make(parentLayout,"Image uploaded.",Snackbar.LENGTH_LONG).show();
        }

        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
            prgDialog.hide();
            if(statusCode==404){
                Snackbar.make(parentLayout,"Page not found.",Snackbar.LENGTH_LONG).show();
            }
            else if(statusCode==500){

                Snackbar.make(parentLayout,"Server problem.",Snackbar.LENGTH_LONG).show();
            }else{
                Snackbar.make(parentLayout,"Generic Error. code: "+statusCode,Snackbar.LENGTH_LONG).show();
            }
        }
    });


}

这里是来自服务器的代码:

<%
String imgEncodedStr = request.getParameter("image");
String fileName = request.getParameter("filename");
System.out.println("Filename: "+ fileName);
if(imgEncodedStr != null){
    ManipolaImmagini.stringToImage(imgEncodedStr, fileName);
    System.out.println("Inside if");
    out.print("Image upload complete, Please check your directory");

} else{
    System.out.println("Inside else");
    out.print("Image is empty");    
}%>

【问题讨论】:

    标签: java android web-services jsp


    【解决方案1】:

    您要寻找的是 WebService。

    以下是一些资源:

    Difference between web services and servlet

    Oracle Web Service Guide

    您的问题可能与: Calling WebServices from JSP

    【讨论】:

    • 是的,我想构建一个 WebService。如果我使用 Servlet,我该如何从客户端调用 Servlet?
    • 您的 Servlet 有一个与之关联的 url 模式。例如:@WebServlet("/YourService")。所以你需要调用:your.server/YourService。我提供的例子有效吗?
    • 这里有大量的资源,在 SO 和 web 中,关于如何正确使用 WebServices 和 Servlet。检查更新的答案。
    • 是的,对于这个项目,我必须实现这个 Web 服务,但很抱歉,我真的不明白该怎么做。我找到了这个link,我想我可以使用这种方法发送图像并获得答案。你认为这行得通吗?
    • 这取决于你。您需要知道该方法是否符合您的需求。我认为您应该对网络服务进行一些研究。
    【解决方案2】:

    我正在做一个类似的项目。我已经有了我的网络服务,现在我在 Android 方面。 我的网络服务使用Jersey。如果你的服务器是兼容的,那么做一个 web 服务就不是那么棘手了,Jersey 文档真的很好。

    服务器端 如果需要,您必须将库放入您的项目中。如果您使用 Maven,则必须遵循: https://jersey.java.net/documentation/latest/modules-and-dependencies.html#dependencies

    在你的战争项目中,要激活泽西岛,一个简单的方法可能是制作一个像这样简单的类:

    @javax.ws.rs.ApplicationPath("/url_to_your_webservices")
    public class MyApplication extends ResourceConfig {
    
        public MyApplication() {
            // Association des classes de webservices
            packages(true, "path.to.your.webservices.package");
        }
    }
    

    否则,这里描述的还有其他解决方案: https://jersey.java.net/documentation/latest/deployment.html

    下一步,您必须创建一个 Resource 类,它是您的 Web 服务,可能是这样的:

    @Path("url_of_the_resource")
    @RequestScoped
    public class YourResource {
        @GET
        @Path("/url_of_the_method_inside_your_resource")
        @Produces("application/txt")
        @Consumes("image/jpeg")
        public Response compareMyImage() {
            // See how you can get your images and build your answer which could be what you want TXT, JSON, XML...
    
            return Response.ok("Awnser Could be what you want.").build();
        }
    }
    

    有关如何在此处构建 Web 服务的更多详细信息: https://docs.oracle.com/javaee/7/tutorial/partwebsvcs.htm#BNAYK

    客户端
    似乎有一个适用于 android 的 Jersey 客户端: https://blogs.oracle.com/japod/entry/jersey_2_x_client_on1 否则,您可以使用传统的 http 客户端。

    当然,您必须根据您的情况调整我的示例。祝你好运,希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      • 2018-03-17
      • 1970-01-01
      • 2012-08-04
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多