jsp:param액션은, jsp:include,jsp:forward,또는 jsp:params엘리먼트들외부에서 사용되서는안됩니다.

멍게·2023년 3월 28일
0

JSP error note

목록 보기
3/5

20230327 수업 중 에러 백업

발생상황

include, forward 배우면서 수업시간 예제 따라 타이핑 하였음. 본래 라디오 버튼의 사용자 또는 관리자 선택에 따라 login 후 화면이 userMain 또는 manageMain 화면으로 이동되어야 하는데 500 에러 발생함.

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

<form action="actionTest.jsp" method="post">

아이디 : <input type="text" name="id"> <br>
비밀번호 : <input type="password" name="pw"><br>
<input type="radio" name="loginCheck" value="user" checked="checked"> 사용자
<input type="radio" name="loginCheck" value="manager"> 관리자 <br>
<input type="submit" value="로그인">

</form>

</body>
</html>
<!-- actionTagForm.jsp -->
<%@ page import="java.net.URLEncoder"%>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
	request.setCharacterEncoding("utf-8");

	String id = request.getParameter("id");
	String pw = request.getParameter("pw");
	String loginCheck = request.getParameter("loginCheck");

	out.println("id : " + id);
	out.println("pw : " + pw);

	if (loginCheck.equals("user")) {
	%>
	<jsp:forward page="userMain.jsp"></jsp:forward>
	<jsp:param value="<%=URLEncoder.encode(" 고객", "UTF-8")%>" name="userName" />
	<%
	} else {
	%>
	<jsp:forward page="managerMain.jsp"></jsp:forward>
	<jsp:param value="<%=URLEncoder.encode(" 관리", "UTF-8") %>"  name="manager" />
	<%
	}
	%>
</body>
</html>
<!-- userMain.jsp -->
<%@ page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="pink">
	사용자 로그인 성공
	<%=URLDecoder.decode(request.getParameter("userName"), "UTF-8")%>
	<%=request.getParameter("id")%>님 환영합니다.
</body>
</html>
<!-- managerMain.jsp -->
<%@ page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="yellow">
	관리자 로그인 성공
	<%=URLDecoder.decode(request.getParameter("userName"), "UTF-8")%>
	<%=request.getParameter("id")%>님 환영합니다.

</body>
</html>

해결

<!-- 문제 1 해결 -->
if (loginCheck.equals("user")) {
	%>
	<jsp:forward page="userMain.jsp">
	<jsp:param value='<%=URLEncoder.encode("전 고객", "UTF-8")%>' name="userName" />
	</jsp:forward>
	<%
	} else {
	%>
	<jsp:forward page="managerMain.jsp">
	<jsp:param value='<%=URLEncoder.encode("성 관리", "UTF-8") %>'  name="manager" />
	</jsp:forward>
	<%
	}
	%>

이와 같이 param 문을 forward 안에 넣어 500에러는 해결하였으나 관리자 선택 시 페이지에서 추가 오류 발생함.

<!-- 문제 2 해결 -->
<body bgcolor="yellow">
	관리자 로그인 성공
	<%=URLDecoder.decode(request.getParameter("manager"), "UTF-8")%>
	<%=request.getParameter("id")%>님 환영합니다.
</body>

원인 : userMain.jsp 복사+붙여넣기 하다가 manager 페이지 로그인 성공 시 Parameter 값을 수정 않았음.

profile
똑부되자 🔥👩‍💻

0개의 댓글