서블릿으로 ajax로 보낸 데이터를 받아야하는데 전달이 되질 않습니다!

tishadow

(이우진) #1

안녕하세요! 현재 JSP에서 AJAX를 이용해서 데이터를 받아와야하는데 안되고 있습니다.
아래는 문제의 소스입니다.

AJAX에서는 데이터가 날아가는 것이 확인되었고 STATUS도 200이 뜨는것도 확인되었습니다…
그런데 서블릿에서 doGET()에서 로그를 찍어보니 null로 나오고 있었습니다.
소스 확인 부탁드립니다.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	// 한글 지원을 위해 인코딩과 헤더의 콘텐츠 타입을 초기화
	request.setCharacterEncoding("UTF-8");
	response.setContentType("application/json");

	JSONObject jsonObject = new JSONObject();
	PrintWriter out = response.getWriter();
	
	Connection conn = null;
	PreparedStatement pstmt = null;
	ResultSet res = null;
	
	// 회원의 아이디와 비밀번호를 저장
	String identity = request.getParameter("userId");
	String password = request.getParameter("userPassword");
	
	System.out.println(identity);
	System.out.println(password);
	
	// 세션에 초기화할 타임스탬프 선언
	Timestamp time = new Timestamp(System.currentTimeMillis());
	
	// XSS 공격 대응
	if(identity != null && password != null) {
		identity = identity.replaceAll("<", "&lt;");
		password = password.replaceAll(">", "&gt;");
	}
	
	try {
		// 3. 커넥션 풀에 연결한다.
		conn = dataSource.getConnection();
		
		String isUserQuery = "SELECT USER_ID, USER_PASSWORD "
						+ "FROM USR_GLOBAL "
						+ "WHERE USER_ID = ?";
		
		pstmt = conn.prepareStatement(isUserQuery);
		pstmt.setString(1, identity); // 아이디
		
		res = pstmt.executeQuery();
		
		if(res.next()) {
				// 아이디가 파라미터로 받아 온 값과 일치하는지 점검
				if(res.getString("USER_ID").equals(identity)) {
					// 비밀번호가 파라미터로 받아 온 값과 일치하는지 점검
					if (res.getString("USER_PASSWORD").equals(password)) {
						HttpSession session = request.getSession();
						session.setAttribute("IS_USER", "YES"); // 로그인 여부
						session.setAttribute("USER_ID", identity); // 로그인한 아이디
						session.setAttribute("LOGIN_TIMESTAMP", time); // 로그인한 시간
						
						// JSON 데이터 RESPONSE로 반환
						jsonObject.put("answer", "true");
						
					} else {
						jsonObject.put("answer", "false");
						jsonObject.put("msg", "PASSWORD_ERROR");
					}
			}
			
		} else {
			jsonObject.put("answer", "false");
			jsonObject.put("msg", "ID_ERROR");
		}
		
		response.getWriter().write(jsonObject.toJSONString());
		
	} catch(Exception e) {
		e.printStackTrace();
	
	// 다 사용한 자원은 운영체제에게 다시 반환 
	} finally {
		try {
			// 사용한 정보는 반드시 메모리 낭비를 방지하기 위해서 close 처리
			if(conn != null) conn.close();
			if(pstmt != null) pstmt.close();
			if(res != null) res.close();
			
		} catch(Exception e) {
			e.printStackTrace();
			
		}	
	}
}

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

아래는 ajax 소스입니다.

function getLoginResult() {
var identity = $("input[name='member_id']").val();
var password = $("input[name='member_password']").val();

$.ajax({
	url: '/Ajax/Auth/getAuthResult',
	type: 'post',
	data: { "userId": identity, "userPassword": password },
	dataType: "json",
	cache : false,
    contentType : false,
    processData : false,
	
   beforeSend: function() {
	  $(".loading").show();
   },
    
	success: function(data) {
		console.log("ajax 통신 성공");
		$(".loading").hide();
		
		if(data.msg != null) alert("data.answer: " + data.answer + " / data.msg: " + data.msg);
		else alert("data.answer: " + data.answer);
		
	},
	
	error: function(request,status,error) {
		alert("code = "+ request.status + " message = " + request.responseText + " error = " + error);
	}
});

}

request.getParameter()로 가져오면 안되는것인가요? 뭐가 문제일까요. 검색해도 해당 문제에 대한 시원한 답변이 없어 질문해봅니다…

글 읽어주셔서 정말 감사합니다!


(이승철) #2

일단 요청 method가 post 일때 getParameter로 접근 할 수 없습니다. spring 같은 프레임워크가 아닌 직접 서블릿을 통해 데이터를 얻으려면 다음의 링크를 참고 하시면 되겠습니다.