내장객체와 request.getParameter();
화면에서 입력받은 값을 java로 가져오려면 request를 통해 parameter로 넘어온 값을 취득하게 됩니다. 여기서 내장객체란 우리가 따로 생성하지 않고도 바로 사용이 가능한 객체를 말합니다. servlet에서 HttpServletRequest라고 다소 길게 썼다면 jsp에서는 간단하게 request라고만 쓰면 가능합니다.
<%
String name = request.getParameter("name");
String age = request.getParameter("age");
String hobby[] = request.getParameterValues("hobby");
%>
이런식으로 request.getParameter를 통해 html 태그 속에 name을 parameter로 받아서 가져올수가 있게 됩니다. 만약 값이 여러개라면 getParameterValues();를 쓰면 되겠죠. 출력은 아래와 같이 하면 되겠습니다.
<h3>이름 : <%=name %></h3>
<h3>나이 : <%=age %></h3>
<%
for(int i = 0; i<hobby.length;i++){
%>
<h3>취미: <%=hobby[i] %></h3>
<%
}
%>
YouClass를 별도의 자바파일로 만들어서 getter와 setter를 포함시킨 상태로 toString() 오버라이딩을 시켜주겠습니다. 그러면 이 클래스를 임포트해와서 어떤 jsp파일이라도 new생성자를 만들어서 사용할 수 있게 됩니다. String name을 매개변수로 받는 함수를 만들어주고 new 생성자로 cls를 만들어주겠습니다.
YouClass cls = new YouClass("카리나");
name은 제가 요즘 좋아하는 여자 아이돌 카리나로 하였습니다. 값을 받는 방법에는 두가지가 있습니다.
<%
YouClass cls = new YouClass("카리나");
request.setAttribute("you", cls);
session.setAttribute("you", cls);
pageContext.forward("index4.jsp");
response.sendRedirect("index4.jsp");
%>
첫 번째가 request.setAttribute("you", cls);이고 두 번째는 session.setAttribute("you", cls);입니다. 첫 번째를 사용했을 경우에는 값을 넘겨주기 위해서 무조건 forward를 써야합니다. 그러나 두 번째 session을 활용하는 경우에는 forward를 쓰거나 sendRedirect를 쓰거나 상관없이 둘 다 값을 넘겨줄수가 있습니다.
참고로 servlet에서는 굉장히 길게, request.getRequestDispatcher("index4.jsp").forward(request,response);이렇게 썼습니다.
<%
//YouClass ycls = (YouClass)request.getAttribute("you");
YouClass ycls = (YouClass)session.getAttribute("you");
%>
<h3>넘어온 객체의 이름: <%=ycls.getName() %></h3>
첫 번째 주석처리해놓은 것처럼 쓰면 안 됩니다...왜>??
두 번째 session.getAttribute("you")를 해야 정상적으로 다음과 같은 화면이 나오게 됩니다.