связь между телефоном и сервлетом через Bluetooth с использованием j2me - PullRequest
0 голосов
/ 24 февраля 2012

Я сделал простое приложение для входа в систему j2me, код ниже.

Он отлично работает на эмуляторе, теперь я хочу запустить его в своем мобильном приложении через соединение Bluetooth. Другими словами, связь по телефону (приложение j2me) -pc (сервлет) через Bluetooth. Нужна помощь.

обновление устройство поддерживает JSR 82 Java API для Bluetooth 1.1.

package hello;

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import java.io.*;
import java.util.Vector;

public class MidletServlet extends MIDlet implements CommandListener {
    Display display = null;
    Form form = null;
    TextField tb = null,tb1= null;
    String str = null;
    String url = "http://localhost:8084/j2metest/getText";
    Command backCommand = new Command("Back", Command.BACK, 0);
    Command submitCommand = new Command("Submit", Command.OK, 2);
    Command exitCommand = new Command("Exit", Command.STOP, 3);
    private Test test;

    public MidletServlet() {}

    public void startApp() throws MIDletStateChangeException {
        display = Display.getDisplay(this);
        form = new Form("Request Servlet");
        tb = new TextField("Username: ","",30,TextField.ANY );
        tb1 = new TextField("Password: ","",30,TextField.ANY);
        form.append(tb);
        form.append(tb1);
        form.addCommand(submitCommand);
        form.addCommand(exitCommand);
        form.setCommandListener(this);
        display.setCurrent(form);
    }

    public void pauseApp() {}

    public void destroyApp(boolean unconditional) {}

    public void commandAction(Command c, Displayable d) {
        if (c == exitCommand) {
            destroyApp(true);
            notifyDestroyed();
        } else if (c == backCommand) {
            display.setCurrent(form);
        } else if (c == submitCommand) {
            test  = new Test(this);
            test.start();
            test.getServlet(tb.getString(),tb1.getString());
        }
    }
    class Test implements Runnable {
        MidletServlet midlet;
        private Display display;
        String pass;
        String user;

        public Test(MidletServlet midlet) {
            this.midlet = midlet;
            display = Display.getDisplay(midlet);
        }

        public void start() {
            Thread t = new Thread(this);
            t.start();
        }

        public void run() {
            StringBuffer sb = new StringBuffer();
            try {
                HttpConnection c = (HttpConnection) Connector.open(url);
                c.setRequestProperty(
                  "User-Agent","Profile/MIDP-2.1, Configuration/CLDC-1.1");

                c.setRequestProperty("Content-Language","en-US");
                c.setRequestMethod(HttpConnection.POST);

                DataOutputStream os =
                        (DataOutputStream)c.openDataOutputStream();

                os.writeUTF(user.trim());
                os.writeUTF(pass.trim());
                os.flush();
                os.close();

                // Get the response from the servlet page.
                DataInputStream is =(DataInputStream)c.openDataInputStream();
                //is = c.openInputStream();
                int ch;
                sb = new StringBuffer();
                while ((ch = is.read()) != -1) {
                    sb.append((char)ch);
                }
                showAlert(sb.toString());
                is.close();
                c.close();
            } catch (Exception e) {
                showAlert(e.getMessage());
            }
        }
                /* This method takes input from user like text and pass
                to servlet */
        public void getServlet(String user,String pass) {
            this.user = user;
            this.pass=pass;
        }

        /* Display Error On screen*/
        private void showAlert(String err) {
            Alert a = new Alert("");
            a.setString(err);
            a.setTimeout(Alert.FOREVER);
            display.setCurrent(a);
        }
    };
}

а это мой код сервлета

package my;
import java.sql.*;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author vicky
 */
import java.io.*;
import java.text.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class getText extends HttpServlet {

    public void init() {
    }

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

        DataInputStream in =
                new DataInputStream((InputStream)request.getInputStream());

        String user = in.readUTF();
        String pass=in.readUTF();
        String text="";
        try {

            Class.forName("oracle.jdbc.driver.OracleDriver");
                Connection conn= DriverManager.getConnection(
                "jdbc:oracle:thin:@localhost:1521:XE","vicky","1");
                Statement stmt=conn.createStatement();
                ResultSet rs;int f=0;
            rs=stmt.executeQuery("select * from ADMIN");
            //s1=request.getParameter("un");
            //s2=request.getParameter("pw");

            if(user==""||pass=="")
                {
                    text="Username and Password are required for login;";
                }
            else
                {
                //session.setAttribute("uname",s1);
                while(rs.next())
                    {
                    String s3=rs.getString(1);
                    String s4=rs.getString(2);
                    if (user.equals(s3)&&pass.equals(s4))
                        {
                            f=1;
                        }
                }
                if(f==1)
                    {
                    //response.sendRedirect("success.jsp");
                    //out.print(s1);
                text="Login Successful";
                                }
                else
                    {
                     //out.print("ERROR");
                    text="Login Failure";
                                }
                }
          }
        catch(Exception e)
        {
       //out.print("ERROR"+e);
        text="error"+e;
            }
        response.setContentType("text/plain");
        response.setContentLength(text.length());
        PrintWriter out = response.getWriter();

        out.print(text);


        in.close();
        out.close();
        out.flush();
    }

    public void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException,
            IOException {

        doPost(request,response);
    }
}

1 Ответ

0 голосов
/ 27 февраля 2012

Я думаю, что именно в этом и заключается проблема, просто измените свой String url = "http://localhost:8084/j2metest/getText"; на IP-адрес своего компьютера, как 192.168.1.1, и попробуйте снова.

Причина этого в том, что когда вы запускаете код Java ME в эмуляторе, он обнаруживает localhost. Но теперь, когда вы развернули это приложение на мобильном телефоне и подключили его через Bluetooth, вы получаете доступ к компьютеру извне, поэтому в этом случае localhost не будет работать. вам нужно передать его IP.

...