ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JSP내장객체정리, 로그인하기(jsp버전)
    JAVA 2021. 7. 25. 00:41

    1. JSP 내장객체(Implicit Object: 내포된 객체)

    jsp란 java의 서버규격이다.

    window 10(OS) -- webserver(여러 JSP) -- webapp(회원등록창, 게시물등록) 등이 차례로 시작된다.

    * 도커로 linux 환경구축시 = 가상화

    Linux (OS)컨테이너 -- webserver(여러 JSP) -- webapp(회원등록창, 게시물등록)

    요청객체(request)와 응답객체(response)

    요청객체와 응답객체는 특정요청에 대한 전용객체로 1요청 1요청객체&응답객체들로 만들어진다.

    ( 즉 , 로그인준비.jsp 요청시 : 받아오는 요청객체, 로그인창HTML을 주는 응답객체 1쌍.

    준비에서 action 으로 로그인.jsp 요청시 : 받아오는 요청객체, 업무규칙검사(존재여부확인) 후 결과HTML을 주는 응답객체 1쌍

    요청마다 따로 생긴다.)

    JSP 서버: 클라이언트의 IP, PORT , DATA, 요청URL 을 가져온다(그래야 던져주니까)

    이 객체들의 요청이 오면 생기고 응답한 후 없어진다. 이것이 생명주기이다.

    응답하며 요청한 클라이언트의 정보들(위에정리)을 세션에 넘긴다.

    세션객체( session ) - 계속 ( 첫 요청&응답객체들에게 정보를 받아 다음 요청시 필요한 정보를 꺼내쓸 수 있다.)

    - request : 요청객체 ( 응답완료시 사라짐 )

    - response : 응답객체 ( 응답완료시 사라짐 )

    - session : 세션객체 ( 서버 종류시 사라짐//내용도 함께 )

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

    session = "true" 는 default 값으로 생략되어 있다. session 객체가 만들어져있어 사용할 수 있다는 의미이다.

    ("false" 로 넣으면 생성되지 않는다.)


    1-1. session 객체

    webserver(web-project)에 한개의 IP당 하나의 세션공간이 있다.

    따라서 한 개의IP로 들어왔을 때 web-project 의 jsp 파일들은 같은 세션공간이라서

    a.jsp 에서 세션공간에 저장한 값을 b.jsp 에서 꺼내올 수 있다.

    아래가 예제이다.

    >> a.jsp

    - setAttribute("name", value) : 세션에 name 라는 이름으로 value값을 설정해 넣는다. (한번 run시켜야 값이 설정된다!!)

    <%
    	int a = 7;
    	session.setAttribute("a", a); // 세션에 name라는 이름으로 value값을 설정해 넣는다.
    %>

    >> b.jsp

    - getAttribute("name") : 세션에 name 이라는 이름의 value값을 가져온다.

    (보관한 값의 자료형을 판단하지 않았기 때문에 꺼낼 때 형변환 필요)

    <%
    	int 가져온값 = (Integer)session.getAttribute("a");
    	System.out.println(가져온값);
    %>

    1-2. response 객체

    - sendRedirect("name.jsp") : 응답객체가 조건에 의해 다시 direct를 보내줌.

    ( 특정 활동이 끝난 후 다시 name.jsp 로 위치를 보내버림 .)

    - setCharacterEncoding() : 어떤 인코딩으로 설정할지 미리 정해놔야한다.

    	if(존재하는회원){
            response.setCharacterEncoding("uft-8");
    		response.sendRedirect("main.jsp");
    	}

    2. location : browser 내장 객체(BOM)

    - href 속성 : 프로그램적으로 주소를 요청 ( 브라우저가 요청한다 )


    3. LOGIN

    >> 회원DAO.java

     

    public class 회원DAO {
    	
    	public String 존재회원인가(String id, String password) {
    		
    		String 성명 = null;
    		try{
    			Class.forName("com.mysql.cj.jdbc.Driver");
    			Connection c = DriverManager.getConnection(String.format("jdbc:mysql://%s:%s/%s?useUnicode=true",ConnectionInfo.DBIP,ConnectionInfo.DBPORT,ConnectionInfo.DBName),ConnectionInfo.UID,ConnectionInfo.PASSWORD);
    			
    			PreparedStatement st = c.prepareStatement("select 성명 from 회원 where 아이디 = ? and 패스워드 = ?");
    			st.setString(1, id);
    			st.setString(2, password);
    
    			ResultSet set = st.executeQuery();
    			if(set.next()) {
    				성명 = set.getString("성명");
    			}
    			
    			set.close();
    			c.close();
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    		
    			
    		return 성명;
    	}

    아이디와 패스워드를 매개로 받아 where절에 넣고 가져오는 열은 성명으로 성명열의 값을 return 하는 메서드다.

    만약 where절에서 없다면 성명은 안나올 것이고 null로 return 한다.

    >> main.jsp

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String 성명 = (String)session.getAttribute("name");
    	boolean 로그인중 = (성명==null)? false:true;
    	
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>메인 내용</h1>
    <a href="로그인후사용가능.jsp">로그인후사용가능경로</a>
    
    <%
    if(!로그인중){
    %>	
    	
    <form action="로그인.jsp" method="post">
    ID <input type="text" name="id"><br>
    password <input type="password" name="password"><br>
    <input type="submit" value="로그인">
    </form>
    <input type="button" value="회원등록" onclick="location.href='회원등록준비.jsp'">
    
    <%
    } else {
    %>
    
    <%= 성명 %> 님 환영합니다. <button onclick="location.href='로그아웃.jsp'">로그아웃</button>
    
    <%
    }
    %>
    
    </body>

    >> 로그인.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        
    <%
    	// 1. 업무규칙검사
    	// 1-1. 회원가입여부 검사
    	boolean 존재하는회원 = true;
    	String 성명= "가길동";
    	
    	// 세션기록
    	if(존재하는회원){
    		session.setAttribute("name", 성명);
    	}
    	
    	// 경로
    	if(존재하는회원){
    		response.sendRedirect("main.jsp");		
    	}else{
    		response.setCharacterEncoding("UTF-8");
    		response.sendRedirect("prepare_login.jsp");		
    	}
    %>

    >> 로그아웃.jsp

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        
    <%
    session.removeAttribute("name");
    response.setCharacterEncoding("UTF-8");
    response.sendRedirect("prepare_login.jsp");//이 jsp의 html은 비어있고 똑같이 쓰는건 낭비다. 그래서 다시 main.jsp로 돌려보냄
    
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    </body>
    </html>

     

    댓글

Designed by Tistory.