마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드(앱)에서 MAP타입으로 보낸 데이터를 서버(Servlet)쪽에서 읽는 방법이 궁금합니다.

0 추천

안녕하세요.^^

새로 공부하고 있는 사람입니다.

서버쪽을 해 본적이 없어서 혼자서 삽질하다 질문드립니다. ㅜㅜ

안드로이드 앱에서 volley를 이용해서 회원가입 데이터를 Map<String,String> 형식으로 담아서  서버(Servlet)로 보내는데  서버쪽 Servlet 파일에서 데이터를 어떻게 받아야 하나요?

request.getParameter("userID") 형식으로는 읽을 수가 없어서 헤메는 중입니다.

Servlet 쪽에서 데이터를 읽는 방법을 좀 가르쳐 주시면 정말 감사하겠습니다. ^^;;

[[ 서버 - JoinProc.java ]]

public class JoinProc extends HttpServlet {

.
.
.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
 try {
   //커넥션풀을 가져오기 위한 세팅
   Context initCtx = new InitialContext();
   Context envCtx = (Context) initCtx.lookup("java:comp/env");
   DataSource ds = (DataSource) envCtx.lookup("jdbc/java");
   conn = ds.getConnection();
   System.out.println("커넥션 풀로부터 커넥션 객체를 획득.");  
   
   // 넘어온 데이터를 읽어서 변수에 담는다.
   String userID = request.getParameter("userID");
   String userPassword = request.getParameter("userPassword");

   String userEmail = request.getParameter("userEmail");

/*
  System.out.println("입력받은 ID : "+userID);  <==  여기서 null 이 나옵니다. ㅠㅠ

  request.getParameter 형식으로는 데이터를 읽을 수 없는거 같은데   

  넘어온 데이터들을 어떻게 읽어야 하는지요?

*/

  String sql    = "insert into user (userID,userPassword,userEmail) values (?,?,?)";
   PreparedStatement ps =  conn.prepareStatement(sql);
   ps.setString(1, userID);
   ps.setString(2, userPassword);
   ps.setString(3, userEmail);
   

 int count = ps.executeUpdate();
   
   ps.close();
   //반납
   conn.close();
   System.out.println("커넥션 풀로부터 커넥션 객체를 반납.");
   
   if(count > 0) {// 회원가입 성공
 
   }
   else {//로그인 실패 

   }
  } catch (Exception e) {
   System.out.println("커넥션 풀로부터 커넥션 객체 획득 오류 :"+ e);  
   
   e.printStackTrace();
  }
 
 }

}

[[클라이언트 ]]

RegisterActivity.java

public class RegisterActivity extends AppCompatActivity {


    private String userId;
    private String password;
    private String userEmail;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
       
        final EditText idText = (EditText)findViewById(R.id.idText);
        final EditText passwordText = (EditText) findViewById(R.id.passwordText);
        final EditText emailText = (EditText) findViewById(R.id.emailText);

        Button registerButton = (Button) findViewById(R.id.registerButton);

       registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String userID = idText.getText().toString();
                String userPassword = passwordText.getText().toString();
                String userEmail = emailText.getText().toString();

               Response.Listener<String> responseListner =
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try{
JSONObject jsonResponse = new JSONObject();
boolean success = jsonResponse.getBoolean("success");

if(success){

AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
dialog = builder.setMessage("회원 등록에 성공했습니다.")
.setPositiveButton("확인",null)
.create();
dialog.show();

finish();
}
else{
AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
dialog = builder.setMessage("회원등록에 실패했습니다.")
.setNegativeButton("확인",null)
.create();
dialog.show();

}
                        }
                        catch (Exception e){
e.printStackTrace();
                        }

                    }
                };

                RegisterRequest  registerRequest = new RegisterRequest

             (userID,userPassword,userEmail, responseListner);


                RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
             queue.add(registerRequest);

            }
        });
    }

}
RegisterRequest .java

public class RegisterRequest extends StringRequest{

    final static private String URL ="http://10.0.2.2:8080/PushMessagingServer/joinProc";
    private Map<String, String> paramaters;


    public RegisterRequest(String userID, String userPassword,String userEmail, Response.Listener<String> responseListener){
            super(Method.POST, URL, responseListener, null );




            paramaters = new HashMap<>();
            paramaters.put("userID", userID);
            paramaters.put("userPassword", userPassword);
            paramaters.put("userEmail", userEmail);

    }

    public Map<String, String> getParamaters() {
        return paramaters;
    }
}

 

윈드지니 (190 포인트) 님이 2017년 12월 18일 질문
https://github.com/mcxiaoke/android-volley/blob/master/src/main/java/com/android/volley/Request.java

StringRequest 구현부분이 잘못되었습니다.
Request.java 구현부를 보면
StringRequest가 상속받은
/**
     * Returns a Map of parameters to be used for a POST or PUT request.  Can throw
     * {@link AuthFailureError} as authentication may be required to provide these values.
     *
     * <p>Note that you can directly override {@link #getBody()} for custom data.</p>
     *
     * @throws AuthFailureError in the event of auth failure
     */
    protected Map<String, String> getParams() throws AuthFailureError {
        return null;
    }

를 오버라이드 해서 사용해야 합니다.
public Map<String, String> getParamaters() {
        return paramaters;
    }
상위 코드 getParamaters를
@Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<>();
                params.put("username", "Jay");
                params.put("password", "1234");

                return params;
            }
로 바꾸시면 됩니다.
http://blog.naver.com/PostView.nhn?blogId=dbwoghks90&logNo=220944832313
닉네임이 익명사용자라고 나와서 누구인지는 모르겠으나
정말 정말 감사합니다. 진짜 감동입니다. ㅠㅠ
제가 5년만에 다시 해보려고  유튜브 예제를 따라하다보니 서버쪽은 PHP로 강의 하길래 전 PHP는 모르고 자바를 조금 하기에 서블릿으로 작업하려고 했습니다.
그래서 동영상 강의에 나오는 클라이언트 쪽은 이상이 없고 제가 하려고 하는 서블릿이 문제라고 생각해서 그것만 계속 찾고 있었네요.
역시 기본 지식없이 따라만 하다보니 틀린줄도 모르고 이런일이 생기네요.
한 일주일 넘게 이 문제로 혼자 끙끙 앓았습니다.

정말이지 다시한번 감사드리며 앞으로 열심히 해서 저도 도움이 되는 개발자가
되도록하겠습니다.^^

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...