NoobJSP
10
2018-05-17 21:25:40 작성 2018-05-17 21:26:31 수정됨
3
275

JSP ResultSet이 두번 불리는 문제.


안녕하세요.

간단한 로그인 기능을 JSP로 만들어 보고 있는 도중에 로그인이 성공하면 계속 ResultSet이 한바퀴 더 도는 문제가 자꾸 발생해서 문의 드립니다.

앞의 로그인폼 jsp 파일에서 이메일 주소와 암호를 받아와서 쿼리문에 넣고 사용하는 형식입니다.


사용환경 windows 10, tomcat8.0 eclipse Oxygen, MySQL workbench 6.3, Mysql은 아마 5.7 이었을겁니다.



public int userCheck(String email, String pword) throws Exception{

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql = "";

String dbPword = "";

int x = 0;

try {

conn = getConnection();

sql = "select pword from cocktailmember where email = ?";

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, email);

rs = pstmt.executeQuery();


if (!rs.next()) {

    System.out.println("no data");

    x = -1;

}else{

dbPword = rs.getString("pword");

System.out.println("rs1 : "+rs);

System.out.println("dbPword : "+dbPword);

System.out.println("pword : "+pword);

if(dbPword.equals(pword)) {

x = 1;

}else {

x = 0;

}

}

System.out.println("rs2 : "+rs);

// 멤버 확인 함수

}catch(Exception ex) {

ex.printStackTrace();

}finally {

if(rs != null)try {rs.close();}catch(SQLException ex) {}

if(pstmt != null)try {pstmt.close();}catch(SQLException ex) {}

if(conn != null)try {conn.close();}catch(SQLException ex) {}

}

System.out.println("x : "+ x);

return x;

}

// 멤버 확인 



java단의 유저확인 코드는 이렇게 되어있습니다.

x가  1 일때는 로그인 성공, 0은 비밀번호 오류, -1은 이메일 오류입니다.

처음부터 x가 0이나 -1이 나올때는 콘솔창에 resultSet의 메모리 주소와  x값이 한번씩만 나오는데 

비밀번호가 정확히 맞아서 로그인이 되어야 할 때는 콘솔창에 아래와 같이 나옵니다, 



rs1 : org.apache.tomcat.dbcp.dbcp2.DelegatingResultSet@5783bc1c

dbPword : 1234

pword : 1234

rs2 : org.apache.tomcat.dbcp.dbcp2.DelegatingResultSet@5783bc1c

x : 1

no data

rs2 : org.apache.tomcat.dbcp.dbcp2.DelegatingResultSet@61cbbca4

x : -1


resultSet이 종료되고 x가 리턴되는 것이 아니라 다른 resultSet 메모리 주소가 불리더니 x값이 -1로 리턴됩니다.

여기저기 찾아봤는데 저 같은 문제는 따로 없는거 같아 질문드립니다.

뭐가 문제일까요?

0
0
  • 답변 3

  • 너부리
    448
    2018-05-17 21:28:49

    getConnection();을 보여주세요.

    0
  • NoobJSP
    10
    2018-05-17 21:31:13

    private Connection getConnection() throws Exception{

    Context initCtx = new InitialContext();

    Context envCtx = (Context) initCtx.lookup("java:comp/env");

    DataSource ds = (DataSource)envCtx.lookup("jdbc/CocktailJSP");

    return ds.getConnection();

    }


    여깄습니다.

    회원 가입하는것과, 이메일 중복 체크때는 이런 문제가 없더니 로그인에서만 이러네요.

    0
  • NoobJSP
    10
    2018-05-17 22:04:28

    해결했습니다.

    로그인 처리하는 JSP 파일에 x가 1이 나오면 넘어가는 부분 코드가


    <%@ page language="java" contentType="text/html; charset=UTF-8"

        pageEncoding="UTF-8"%>

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    <c:if test="${check == 1}">


    <c:set var = "memEmail" value="${email}" scope="session"/>

    <meta http-equiv="Refresh" content="0;url=main.drink"/>

    </c:if>


    이랬었는데




    <c:set var = "memEmail" value="${email}" scope="session"/>

    <meta http-equiv="Refresh" content="0;url=main.drink"/>

    </c:if>


    저 페이지 넘어가는 부분 마지막에 오타로 들어간 / 가 문제였네요, 저것 때문에 다시 재 요청을 해서 오류가 나는 것 이었습니다.


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.