예제 5-4 실습할 때 헷갈렸던 것

처음엔 습관적으로 exam5_4.jsp를 만들었는데 여기서 로그인 실패와 성공을 판가름하게 했다.

서블릿에서 그걸 처리하게 하고 넘어와서 페이지 두 개를 보여주는 게 목적이었는데 내가 파일을 총 네 개를 만든 것

 

초기 java파일 (서블릿) : 습관적으로 포워드로 연결해놨다. 심지어 필요도 없는 판정만 하느라 출력이 없는 페이지 exam5_4.jsp 를 연결해놨다..

package chapter05;

import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/exam5_4")
public class exam5_4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        RequestDispatcher ds = req.getRequestDispatcher("chapter05/exam5_4.jsp");
        ds.forward(req, resp);
    }
}

 

exam5_4.jsp : 여기서 리다이렉트로 연결을 해서 인덱스 파일로 다시 넘어간다..

 

package chapter05;

import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/exam5_4")
public class exam5_4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        req.setCharacterEncoding("utf-8");

        String userid = req.getParameter("id");
        String password = req.getParameter("pw");

        if ("관리자".equals(userid) && "1234".equals(password)) {
            resp.sendRedirect("/chapter05/exam5_4_s.jsp");
        } else {
            resp.sendRedirect("/chapter05/exam5_4_f.jsp");
        }
    }
}

 

exam5_4_s.jsp : 성공 페이지

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>

로그인을 성공했습니다.

</body>
</html>

 

exam5_4_f.jsp : 실패 페이지

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<p>로그인을 실패했습니다
<p>ㅣ<a href="../index.html"> 로그인 가기</a>

</body>
</html>

 

인덱스쪽

원래는 a태그로 무의미하게 아무것도 출력하지 않는 exam5_4.jsp 페이지 이걸 링크해놨었다.

   <li>예제5-4 (response 내장 객체로 페이지 이동하기)</li>
   <div>
	    <form action="exam5_4" method="get">
	   <p>아이디:  <input type="text" name="id"></p>
	   <p>패스워드: <input type="text" name="pw"></p>
	   <p><input type="submit" value="전송"></p>
   </div>

 

 

_

 

수정결과

 

java에서 

 

public class exam5_4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { 내용 생략 }

 

이 부분의 변수 이름을 수정해야 한다. 교재대로 따라가서 그대로 옮겨 붙여넣으면 에러 뜬다.

변수 이름이 다 다르기 때문에. 포워드 방식으로 할 땐 변수 이름도 맞춰서 오류가 당연히 안 떴음.

 

바꾼 변수 이름

 

public class exam5_4 extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException

 

직관적으로 하고 싶어서 약자 안 쓰고 풀로 영어 썼음. 이렇게 일치 시켜주었다.. request와 response

 

그 결과 서블릿 페이지엔 이렇게 리다이렉트가 걸린 채 판정하는 로직이 다 들어갔음.

package chapter05;

import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/exam5_4")
public class exam5_4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        request.setCharacterEncoding("utf-8");

        String userid = request.getParameter("id");
        String password = request.getParameter("pw");

        if (userid.equals("관리자") && password.equals("1234")) {
            response.sendRedirect("chapter05/exam5_4_s.jsp"); // 성공 페이지
        } else {
            response.sendRedirect("chapter05/exam5_4_f.jsp"); // 실패 페이지
        }
    }
}

 

동시에 이제 쓸모가 없어진 exam5_4.jsp 파일은 사라진다. 

 

이 뒤에 어디서 연결이 안됐는지 확인하기 위해 

자바 파일엔 이렇게 출력 메시지를 넣음. 

 

@WebServlet("/exam5_4")
public class exam5_4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        
    	System.out.println("exam5_4 서블릿 doGet 진입");
    	request.setCharacterEncoding("utf-8");

        String userid = request.getParameter("id");
        String password = request.getParameter("pw");

        if (userid.equals("관리자") && password.equals("1234")) {
            System.out.println("로그인 성공!"); // 먼저 메시지 찍고
            response.sendRedirect("chapter05/exam5_4_s.jsp"); // 그다음 페이지 이동
        } else {
            System.out.println("로그인 실패!"); // 먼저 메시지 찍고
            response.sendRedirect("chapter05/exam5_4_f.jsp"); // 그다음 페이지 이동
        }
    }
}


___

<%
System.out.println("exam5_4_s.jsp(성공 페이지) 실행됨");
%>
로그인을 성공했습니다.

____
<%
System.out.println("exam5_4_f.jsp(실패 페이지) 실행됨");
%>
<p>로그인을 실패했습니다
<p>ㅣ<a href="../index.html"> 로그인 가기</a>

'JSP' 카테고리의 다른 글

외부입력 필요/없어도 될 때  (0) 2025.05.26
### 1. 클래스, 함수, 객체 구별하는 형태  (0) 2025.05.26
Forward와 Redirect 방식 비교  (0) 2025.05.23
HTML → Servlet → JSP  (0) 2025.05.23
JSP에서 Enumeration 개념  (0) 2025.05.23