ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JSP] login form, forward form, server object
    WEB/JSP 2022. 9. 9. 19:01

    login form

    1. 로그인폼에 아이디와 패스워드 입력 후 로그인버튼(submit) 클릭

    2. action으로 지정된 페이지에 가서 아이디와 패스워드를 검증(유효한 아이디인가, 그 아이디에 맞는 정확한 패스워드인가)

    3. 검증을 마친 결과를 (로그인 성공 or 아이디가 없음 or 패스워드가 틀림)를 갖고 결과 페이지로 이동

    -아이디와 패스워드 검증은 보통 서버 내부에서 실행되는 JSP 프로그램밍으로 이루어지는데 그 자바프로그램의 시작을 서블릿이라고 하며 외부에는 노출되지 않음

     

    서블릿 사용없이 072_Login_do.jsp 파일안에서 그 작업을 실행함(코드외부노출가능)

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>071_loginForm.jsp</title>
    </head>
    <body>
        <form method="post" action="072_Login_do.jsp">
    	<label for="id">아이디: </label>
    	<input type="text" id="id" name="id"><br>
    	<label for="pwd">암 &nbsp; 호: </label>
    	<input type="password" id="pwd" name="pwd"><br>
    	<input type="submit" value="로그인">
    </form>
    </body>
    </html>

    JSP 문법에 의한 로그인 체크 동작만 필요한 페이지이므로 별도의 HTML 태그는 사용하지 않음

    -아래는 072_Login_do.jsp파일 안 코드

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import="java.net.URLEncoder" %>
    <%
    // 072_Login_do.jsp?id=xxxx&pwd=xxxx 
    //               -> post 방식에서는 ' ?id=xxxx&pwd=xxxx '를 감춤
    	String id=request.getParameter("id");
    	String pwd=request.getParameter("pwd");
    	
    // 이 부분에서 실제로는 데이터베이스 엑세스 후 
    // 조회한 회원의 아이디와 비번을 비교함
    // 지금은 특정 아이디와 비번만 비교함
    	if(id.equals("hong")&&pwd.equals("1234")){
    		// 원하는 아이디(hong)와 비번(1234)이 전달되어 왔는지 확인 후
            //  맞으면 073_loginOk.jsp로 이동
    		// jsp 문법에서 페이지 이동은 response.sendRedirect();
    		response.sendRedirect("073_loginOk.jsp?name=" 
             + URLEncoder.encode("홍길동","UTF-8"));
    		// input type="text"태그를 쓰지 않고 이동하는 주소에 
            // 파라미터의 name과 value를 붙여서 전송이 가능함
    		// 위와 같이 주소에 파라미터를 붙이는 방식은 
            // post 방식으로는 사용할 수가 없으므로 중요정보도 모두 노출됨
    		// jsp 파일에서 로그인 절차를 진행하면 
            // 한글 전달값에 대한 인코딩 UTF-8이 아니기 때문에
    		// 도착페이지에서 표시되는 한글이 깨짐. 
            // 별도의 URLEncoding 객체를 사용해야함
    	}else{
    		response.sendRedirect("071_loginForm.jsp");
    	}
    %>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>073_loginOk.jsp</title>
    </head>
    <body>
    <% String name=request.getParameter("name"); %>
    <h1><%=name %>님 안녕하세요!</h1>
    <h1>저희 사이트에 방문해 주셔서 감사합니다.</h1>
    <h1>즐거운 시간 되세요.</h1>
    </body>
    </html>

    아이디: hong, 암호: 1234 입력. 틀릴 시 리셋


    forward form

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>081_ForwardForm.jsp</title>
    </head>
    <body>
    입장하려면 나이를 입력하세요. <br>
    <form action="082_Forward_do.jsp">
    	<input type="text" name="age">
    	<input type="hidden" name="abc" value="가나다라">
    	<input type="submit" value="입장">
    	</form>
    </body>
    </html>

    -request 객체에는 Attribute라는 저장소(HashMap 형식과 비슷한 멤버변수)가 있음
    -전달할 데이터를 Attribute에다가 각 자료의 이름과 값을 같이 저장하고, forward(이동)하면 목적지에 해당데이터가 같이 이동함
    -Attribute라는 저장소에 name이라는 이름으로 "홍길동"이라는 값을 저장해두고 083_ForwardResult.jsp로 이동(forward)함.
    -이때 현재페이지에 존재하면서 보내고자하는 내용을 저장한 request와 response도 같이 이동함
    -083_ForwardResult.jsp에서는 이전 페이지에서 보내준 request와 response를 이용해서 저장해둔 name 값을 꺼내 사용할 수가 있음
    -저장메서드: setAttribute(), 추출메서드: getAttribute()

    -RequestDispatcher(Forward 객체): 전송하려는 값을 갖고 있는 request를 가지고 원하는 페이지로 이동하는 객체

    -현재 페이지의 request 객체의 수명은 forward로 전달될 다음 페이지까지임

    -보통 파라미터를 통해서 정보를 전달하고 request.getParameter()를 사용하여 전달된 값을 추출하여 사용하지만 위의 RequestDispatcher는 전달인수 대신 request 내부의 Attribute를 사용하여 전달인자를 저장하고 그냥 놔두면 수명을 다해 없어질 현재 페이지의 request와 response가 함게 forward라는 명령으로 페이지를 이동함

    -이동한 페이지에서 Attribute를 사용하게 함

    -forward 방식으로 이동된 페이지는 한글에 대한 인코딩 작업이 필요가 없음

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%
    String sAge=request.getParameter("age");
    int age=Integer.parseInt(sAge);
    // 위의 코드와 줄임 
    // int age=Integer.parseInt(request.getParameter("age"));
    if(age<=19){
    %>
    	<script type="text/javascript">
    		alert("20세 미만은 입장이 불가능합니다.");
    	   // 원래 페이지로 돌아가기 location.href='081_ForwardForm.jsp';
    		history.go(-1); // 뒤로 버튼을 클릭한 것과 같음
    	</script>
    <% 
    } else{
    	// 파라미터 저장
    	request.setAttribute("name","홍길동");
    	
    	// 포워드를 위한 객체 생성 및 이동 페이지 설정
    	RequestDispatcher dp=request.getRequestDispatcher("083_ForwardResult.jsp");
    	
    	// 현재의 request와 response를 갖고 목적지로 이동
    	dp.forward(request, response);
    }
    %>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>083_ForwardResult.jsp</title>
    </head>
    <body>
    <%
    // 첫페이지에서 전송된 abc=가나다라 라는 파라미터가
    // request에 아직 파라미터로 담겨있음.
    // 이전페이지에서 그 request를 그대로 전송되어 왔기 때문에 
    // 현재페이지에서도 사용이 가능함
    String age=request.getParameter("age");
    String abc=request.getParameter("abc"); // 첫페이지 히든태그로 포함된 파라미터
    String name=(String)request.getAttribute("name"); // Attribute에 저장된 전송자료
    // 다시 값을 추출할 때 강제캐스팅이 필요함
    %>
    <h1>forward 방식으로 이동된 페이지 </h1>
    <h1>나이: <%=age %></h1>
    <h1>이름: <%=name %></h1>
    <h1>전송자료: <%=abc %></h1>
    </body>
    </html>

    나이를 12로 입력했을 때
    나이를 20으로 입력했을 때


    server object

    *각 개체의 수명

    -pageContext: 현재페이지

    -request: 다음페이지까지 (forward에 의해 연장될 수 있음)

    -session: 브라우저가 닫힐때까지

    -application: 서버가 꺼지거나 리셋될때까지

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>091_ServerObject_Life.jspe</title>
    </head>
    <body>
    <%
    pageContext.setAttribute("name","page man"); 
    request.setAttribute("name","request man"); 
    session.setAttribute("name","session man"); 
    application.setAttribute("name","application man"); 
    
    System.out.println("firstPage.jsp");
    System.out.println("First의 pageContext 객체: "+pageContext.getAttribute("name"));
    System.out.println("First의 request 객체: "+request.getAttribute("name"));
    System.out.println("First의 session 객체: "+session.getAttribute("name"));
    System.out.println("First의 application 객체: "+application.getAttribute("name"));
    
    RequestDispatcher dispatcher=request.getRequestDispatcher("092_ServerObject_Life.jsp");
    dispatcher.forward(request, response);
    %>
    </body>
    </html>

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>092_ServerObject_Life.jsp</title>
    </head>
    <body>
    <h1>
    second의 pageContext 속성: <%=pageContext.getAttribute("name") %><br>
    second의 request 속성: <%=request.getAttribute("name") %><br>
    second의 session 속성: <%=session.getAttribute("name") %><br>
    second의 application 속성: <%=application.getAttribute("name") %><br>
    <a href="093_ServerObject_Life.jsp"> 또 다른 페이지 </a>
    </h1>
    </body>
    </html>

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>093_ServerObject_Life.jsp</title>
    </head>
    <body>
    <h1>
    third의 pageContext 속성: <%=pageContext.getAttribute("name") %><br>
    third의 request 속성: <%=request.getAttribute("name") %><br>
    third의 session 속성: <%=session.getAttribute("name") %><br>
    third의 application 속성: <%=application.getAttribute("name") %><br>
    </h1>
    </body>
    </html>

    'WEB > JSP' 카테고리의 다른 글

    [JSP] cookie, session, removeAttribute  (0) 2022.09.09
    [JSP] servlet, action tag form  (0) 2022.09.09
    [JSP] variable, import, request, include  (0) 2022.09.09
    [JSP] table, calendar, operator, declare  (0) 2022.09.09
    [JSP] sum, form, checkbox, select  (0) 2022.09.09

    댓글

Designed by Tistory.