처음엔 습관적으로 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 |