0

我有一个现有的和正在运行的 java web 应用程序。我想让这个应用程序在 android 上原生并打算继续使用相同的 servlet。

上次我在做一个与服务器通信的 android 应用程序时,在 servlet 中放置了这样的东西:

PrintWriter out = response.getWriter(); 
out.print("pass"); 

在android java类中我会这样做:

String response = null;
    try {
        response = CustomHttpClient.executeHttpPost(
        "http://10.0.2.2/ProjectName/" + "LoginServlet",postParameters);
        String res = response.toString();
                    if(res.equals("pass")
                    {
                        /**do the things i want**/
                    }
               }
               catch(Exception e)
               {
                   e.printStackTrace();
               }

我的 Web 应用程序中的 servlet 使用 HttpSession 并具有如下调度方法:

HttpSession session = request.getSession();
session.setAttribute("user",user);

和这个:

dispatch(request, response, "/login.jsp");

我将 PrintWriter 添加到我的 Web 应用程序使用它的现有 servlet 失败。这个错误是在 logcat 上产生的:

07-12 08:59:46.344: E/jdwp(487): >>> comparing 'jsp' to 'ers'
07-12 08:59:46.454: E/jdwp(487): >>> comparing 'jsp' to 'nfo'
07-12 08:59:46.524: E/jdwp(487): >>> comparing 'jsp' to 'o$1'
07-12 08:59:46.534: E/jdwp(487): >>> comparing 'jsp' to 'nfo'
07-12 08:59:46.534: E/jdwp(487): >>> comparing 'jsp' to 'o$1'
07-12 08:59:46.594: E/jdwp(487): >>> comparing 'jsp' to 'Key'
07-12 08:59:46.934: E/jdwp(487): >>> comparing 'jsp' to 'ver'
07-12 08:59:47.044: E/jdwp(487): >>> comparing 'jsp' to 'ile'
07-12 08:59:47.334: E/jdwp(487): >>> comparing 'jsp' to 'gin'
07-12 08:59:47.334: E/jdwp(487): >>> comparing 'jsp' to 'nfo'
07-12 08:59:47.354: E/jdwp(487): >>> comparing 'jsp' to 'ame'  
07-12 08:59:47.404: E/jdwp(487): >>> comparing 'jsp' to 'ger'
07-12 08:59:47.404: E/jdwp(487): >>> comparing 'jsp' to 'eme'
07-12 08:59:47.504: E/jdwp(487): >>> comparing 'jsp' to 'ams'

比较的清单还在继续。

问题:我是否遗漏了什么或者我应该创建新的 servlet?(我真的希望它不是第二种选择)

编辑

我发现错误是由 dispatch 方法产生的,该方法将响应更改为 jsp 文件而不仅仅是文本字符串,并且注释掉 dispatch 方法允许我使用 android 成功登录到服务器。

但是,我想保留调度方法和 PrintWriter,这样 android 应用程序和 Web 应用程序都可以使用同一个 servlet 登录。反正我能做到吗?

4

1 回答 1

0

经过一番研究,这个问题的答案似乎是否定的。没有办法为 web 应用程序和 android 应用程序使用相同的 servlet。必须创建一个新的 servlet,无论这 2 个 servlet 的内容是否 95% 相同。

我目前知道可以通过以下几种方式使用android登录:

1)使用上面提到的 out.print 方法。创建 PrintWriter 对象并使用该对象进行 out.print,并通过 android java 类中的 response.toString().equals("expectedString") 进行检查。

2) cookie,我认为它可以工作,但没有,调度方法仍然妨碍了。关于 cookie,我仍然很模糊,但显然您可以将用户信息保存在 cookie 中,以便在使用应用程序的整个过程中对用户进行身份验证。

如果我在上述任何一项中有错误,请随时添加答案或纠正我。

于 2012-07-13T03:15:49.027 回答