열심히 끝까지
디바이스 융합 자바(Java) day37 - JSP 기본문법(에러페이지 처리,include 지시어,include 액션,forward 액션,스크립트릿),내장 객체(request,response,out,session,application,exception) 본문
디바이스 융합 자바(Java) day37 - JSP 기본문법(에러페이지 처리,include 지시어,include 액션,forward 액션,스크립트릿),내장 객체(request,response,out,session,application,exception)
노유림 2022. 8. 2. 17:33[오늘 수업]
JSP 기본 문법
if, for
배열 -> DBMS
1. 준비한 예제들이 실무 스타일!
2. 문법을 설명하기 위해 만든 예제 존재
기본문법
1) 에러페이지 처리
404 : 클라이언트의 문제
ex ) 주로 없는 페이지를 요청
-> 있는 페이지를 요청
-> 서버측에서 페이지를 생성
500 : 서버의 문제
- 로직 상에서 발생하는 모든 문제에 대해 500에러를 발생시킴
>> 실무에서 많이 쓰이는 방법 중 하나
[에러 나면 보낼 페이지]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>에러 처리 페이지</title>
</head>
<body>
<h1>처리중에 문제가 발생해습니다!</h1>
<hr>
<%=exception %>
<%-- exception은 JSP 내장객체! --%>
</body>
</html>
[에러가 나는 페이지]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="NewFile.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>에러 발생 페이지</title>
</head>
<body>
<h1>테스트중입니다.....</h1>
<hr>
<%
// 컴파일은 정상적으로 수행되나,
// 실행시키면 에러가 발생하는 코드
String msg="apple";
int num=Integer.parseInt(msg);
%>
</body>
</html>
결론 : page 지시어 isErrorPage, errorPage 속성을 통해 설정 가능함
---------------------------------
2) 에러페이지 처리
: 여러 페이지에 공통으로 들어가는 내용을 관리할 때 용이
ex ) 메인페이지, 고객센터 등의 header, footer
: 공통으로 들어가는 페이지를 한 번 만들어두면,
다른 페이지에서 필요한 경우에 include해서 사용 가능함
: 공통 내용의 페이지를 포함시킨 이후에 컴파일하기 때문에,
개별적으로 컴파일하지 않으므로 별도의 기본 HTML 구조 태그가 필요 없음
: 여러 파일들을 하나로 컴파일하기 때문에 변경이 적은 정적인 페이지를 포함시킬 때 용이
>> 임의로 header와 footer 입력
[include 지시어 테스트]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>include 지시어</title>
</head>
<body>
<%-- 임의로 header 와 footer 입력 --%>
<table border="2">
<tr>
<td><%@ include file="header.jsp" %></td>
</tr>
<tr>
<td><%@ include file="footer.jsp" %></td>
</tr>
</table>
</body>
</html>
>> header와 footer는 따로 HTML 파일이 필요 없음
>> 그래서 작성하는 방법이 생각보다 간단!
[header 페이지]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
[메일][카페][블로그][지식iN][쇼핑][쇼핑LIVE][Pay][▷TV]
[footer 페이지]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
[공지사항]
<hr>
Creators<br>
Partners<br>
Developers
>> 템플릿을 구성하는 경우 내부에 바로 적용, CSS에 우선순위를 높히는 방법
>> 코드를 보면 티가 나서 외부 CSS를 추가
------------------------------------
3) include 액션
: 포함시킬 파일(조금씩 바뀌는 파일)들을 각각 관리(따로 컴파일)
: 메인 파일(메인페이지, 상세페이지)이 다른 파일(기사)들을 포함하는 개념
: 동적인 페이지를 포함시킬 때 용이
[include 액션 페이지]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>include 액션</title>
</head>
<body>
<hr>
<jsp:include page="side.jsp">
<jsp:param value="apple" name="msg"/>
<jsp:param value="1024" name="num"/>
</jsp:include>
<hr>
</body>
</html>
>> 매개변수를 줄 수 있고(선)
>> 띄우는 side.jsp를 가져와서 사용
※ 즉, include 액션페이지가 side.jsp에 저장된 값을 불러와 띄우는 것!
[side.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>별도 페이지</title>
</head>
<body>
<h3>별도페이지입니다.</h3>
<hr>
<%-- 내장객체 : request --%>
<%-- 요청정보 안에 있는 숫자나 메세지 출력하도록 작성 --%>
<%=request.getParameter("num") %> <br>
<%=request.getParameter("msg") %>
</body>
</html>
>> 이때 num의 1024는 String 타입!! 기억할 것
>> 2) include 지시어
3) include 액션 : 요청
이 두개는 많이 쓰이지는 않지만 기본이라서 배움
>> include 액션 페이지 안에 포함되서 나오는 것이 페이지에 보임(라인 추가됨)
--------------------------------------
4) forward 액션
: 페이지 제어권을 완전히 넘겨줌
: 현재 페이지 -> 다른 페이지로 화면 전환할 때 사용
: response(JSP 내장객체.응답관련 정보가 저장된 객체)의
★ sendRedirect() 메서드와 유사한 기능을 수행 ★
>> forward로 바꿨을 뿐인데, <hr> 두 라인이 보이지 않음
>> 제어권을 넘겨주고 돌려받지 못함!!
>> 돌아오지 못하기 때문에 <hr>을 출력하지 못함
[앞의 include 액션 예제 가져와서 forward로 변경]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>forward 액션</title>
</head>
<body>
<hr>
<jsp:forward page="side.jsp">
<jsp:param value="apple" name="msg"/>
<jsp:param value="1024" name="num"/>
</jsp:forward>
<hr>
</body>
</html>
-----------------------
5) 스크립트릿(scriptlet)
: JSP 내부에서 JAVA 언어를 사용할 수 있게 해주는 태그
ex )
<%@ %> 지시어
<%@ page %> page 지시어
<%@ include %> include 지시어
<% %> 스크립트릿
<%= %> 표현식
out 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>
<%
for(int i=1; i<=10; i++){
System.out.println("콘솔 : "+i); // 원래 있던거라서 사용 가능
out.println("브라우저 : "+i+"<br>"); // 내장객체
}
%>
</body>
</html>
[따로 입력]
<%@ 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>
<%
for(int i=1; i<=10; i++){
%>
<%=i %> <br>
<%
}
%>
</body>
</html>
================================
[내장 객체]
1) request
: 요청정보
: String(문자열) 타입으로 데이터를 주고받음
: UTF-8 인코딩 해야함에 유의!
ex )
[요청 시작]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="request_end.jsp" method="post">
<table border="1">
<tr>
<td>이름</td>
<td><input type="text" name="uname"></td>
</tr>
<tr>
<td>직업</td>
<td>
<select name='job'>
<option>무직</option>
<option>학생</option>
<option>회사원</option>
<option>전문직</option>
<option>자영업</option>
</select>
</td>
</tr>
<tr>
<td>관심 컨텐츠</td>
<td>
<input type="checkbox" name="fav" value="영화">영화
<input type="checkbox" name="fav" value="드라마">드라마
<input type="checkbox" name="fav" value="애니메이션">애니메이션
</td>
</tr>
<tr>
<td colspan="2" align="right">
<input type="submit" value="가입하기">
</td>
</tr>
</table>
</form>
</body>
</html>
[요청 끝]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
요청 메서드 : <%=request.getMethod()%><br>
<table border="1">
<tr>
<td>이름</td>
<td><%=request.getParameter("uname")%></td>
</tr>
<tr>
<td>직업</td>
<td>
<%=request.getParameter("job")%>
</td>
</tr>
<tr>
<td>관심 컨텐츠</td>
<td>
<%-- getParameter로는 못함 --%>
<%
String[] fav = request.getParameterValues("fav");
// 일반적으로 요청매개변수 명과 자바 변수명을 맞춰서 쓰는것이 보통
for(int i=0; i<fav.length;i++){
out.println(fav[i]+"<BR>");
}
for(String v:fav){
out.println(v+"<BR>");
}
%>
</td>
</tr>
</table>
</body>
</html>
-------------------------
2) response
: 응답정보
forward 액션 vs response.sendRedirect()
공통점 둘 다 요청을 수행할 수 있음
차이점 forward 액션 : 새로운 요청을 수행하는 것이 아닌 내 페이지에서 제어권을 넘겨주면서 '
파라미터 값도 그대로 전달(및 추가) 가능
새로운 요청 xxx / 제어권 넘겨주면서 파라미터 값도 전달(및 추가) 가능함
response.sendRedirect() : 새로운 요청을 넘겨주는 것이라 파라미터값을 유지하지 못함
새로운 요청 ooo / 파라미터 값 유지 xxx
1 2 3
start forward end
response
>> 1번 페이지에서 timo 보냄
>> 2번 페이지에서는 timo를 볼 수 있음
>> forward는 timo값을 3번 페이지에 그대로 넘겨줌과 동시에 본인이 추가한 값도 같이 전달,
제어권을 넘겨주고 끝남
>> 제어권을 넘겨준거라서 주소에 forward.jsp값이 그대로 유지되어 전달
- 이전 정보가 필요하면 forward
response는 새로운 요청을 수행하는 객체,
request가 새로 파져서 timo는 유지하지 못 함
넘겨준 제어권을 시 가져오기까지 함
- 이전 정보가 필요하지 않으면 response
>> URL == 요청
1. start 페이지 보여줘! 라고 요청
2-1. 티모로 submit forward.jsp 요청을 한 것
>> forward라는 액션은 자신의 제어권(브라우저에 출력될 권리)을 넘겨줌
새로운 요청이 아니기 때문에 URL이 유지
2-2. 티모로 submit response.jsp 요청을 한 것
>> 요청을 한 번 더 하라는 것 -> 새로운 요청, 새 URL
-> end.jsp는 뜨지만 새로운 페이지에서 열린 거라 빈 정보를 전달
ex ) 장바구니
>> 결제하기 위해서 메인페이지로 옮길 때 forward
>> 결제 후 장바구니 정보를 저장하지 않아도 되기 위해
response.sendRedirect()를 이용하여
네이버 웹툰
>> 224화 보여달라고 했는데 안보여주고 밖으로 빠져나감 - sendRedirect()
>> 메인으로 갈 때는 요청 정보가 필요 없어서 정보를 날리고 메인 복귀
>> 20000화 보여줘! 도 sendRedirect()
네이버 블로그
>> 없는 게시글을 보여달라고 url 요청
url을 유지하면서 alert를 띄움, 그렇다는건 유효성검사로 입구컷
> alert를 확인 누르면 response일 가능성이 있음
[시작]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>시작 페이지</title>
</head>
<body>
<form action="forward.jsp" method="post">
forward 액션 : <input type="text" name="uname">
<input type="submit" value="전송!">
</form>
<hr>
<form action="response.jsp" method="post">
response.sendRedirect() : <input type="text" name="uname">
<input type="submit" value="전송!">
</form>
</body>
</html>
[끝]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>종료 페이지</title>
</head>
<body>
<h1>종료 페이지</h1>
<hr>
이름 : <%= request.getParameter("uname") %><br>
메세지 : <%= request.getParameter("msg") %>
</body>
</html>
[forward]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 이곳의 내용전달 안함 -->
<!-- start 페이지에서 요쳥을 forward 페이지한테 한건데, forward가 유지해서 보낼 수 있음 -->
<!-- 자기 메세지까지 넣어서 출력 가능 -->
<jsp:forward page="end.jsp">
<jsp:param value="apple" name="msg"/>
</jsp:forward>
[response]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 새로운 요청을 하는 것이기 때문에 값을 받아서 보내지 못함 -->
<% response.sendRedirect("end.jsp"); %>
--------------------------------
3) out
: 브라우저(화면) 출력 기능
--------------------------------
4) session ☆ 오늘의 핵심!!
: HTTP 프로토콜 == 비연결형 프로토콜
: 하나의 페이지가 출력된 이후에 클라이언트와 서버의 연결이 끊어짐 = 그것이 문제
: 위의(나의) 상태를 기억하기 위해(저장하기 위해) 사용하는 방법
: 쿠키, session, application, ...
: 브라우저 단위 or 일정 시간
ex ) 장바구니, 은행 어플, 로그인, ...
1. 브라우저 단위로 유지되기 때문에 브라우저를 종료시키면 새로운 session 객체가 생성
2. 일정 시간(유지기간)이 지나면, 새로운 session 객체가 생성됨
>> 장바구니, 은행 어플에 많이 사용(이것만 쓰는 건 아님)
(이거 많이쓴다고 해서 이거 썼어요 라고 답하면 안된다.)
>> 서버자원이나 DB를 쓴다고 한다
[예시]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>session</title>
</head>
<body>
<%
session.setMaxInactiveInterval(3);
if(session.isNew()){
out.println("<SCRIPT> alert('세션 재설정!') </SCRIPT>");
session.setAttribute("id", "admin");
}
%>
세션 유지 시간 : <%=session.getMaxInactiveInterval() %><br>
<%=session.getAttribute("id") %>님, 반갑습니다! :D
</body>
</html>
--------------------------------
5) application ☆ 오늘의 핵심!!!
: 서버 단위
ex ) 앱, 투데이 방문자 수, ...
1. 서버 단위로 유지되기 때문에, 브라우저를 종료시켜도 데이터를 유지할 수 있음
2. 서버 단위==톰캣 : 톰캣을 종료하거나 재시작하면 새로운 application 객체가 생성됨
>> 톰캣을 종료하거나 다시 시작하면 새 application 생성
[예시]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>application - 1</title>
</head>
<body>
<%
application.setAttribute("id","admin");
application.setAttribute("cnt", 0);
%>
<a href="NewFile9.jsp">투데이 방문자 수 확인하기</a>
</body>
</html>
[예시]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>application - 2</title>
</head>
<body>
<%
// 오브젝트로 돌아다니고 있어서 밑줄 그어짐 = (Integer) 정수형이라고 지정
int cnt=(Integer)application.getAttribute("cnt");
cnt++;
// 증가된 cnt를 늘려주기
application.setAttribute("cnt", cnt);
%>
<%=application.getAttribute("id") %>님의 방문자수:<%=cnt %>명
</body>
</html>
--------------------------------
6) exception
: 예외객체
[session을 이용한 장바구니 예제]
1. index.jsp(표지 페이지)
로그인 <form>을 제공
이름(uname)을 입력하면 다음 페이지(main.jsp)로 이동
method="post"
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<%session.invalidate(); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인(표지페이지)</title>
</head>
<body>
<form action="main.jsp" method="post">
<input type="text" name="uname">
<input type="submit" value="로그인">
</form>
</body>
</html>
2. main.jsp
uname님, 반갑습니다! :D
물건을 구매하는 <form>을 제공 / 물건 정보 담아서 보냄
5가지의 물건 <select> > 우리가 알아서.... 개수 재고 신경 안씀
<a> 구매하기</a>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>구매 페이지</title>
</head>
<body>
<%
String uname=request.getParameter("uname");
session.setAttribute("uname", uname);
%>
<h1><%=request.getParameter("uname") %>님, 반갑습니다! :D </h1><br>
<form action="add.jsp" method="post">
<select name="product">
<option>아메리카노</option>
<option>카페라떼</option>
<option>카페모카</option>
<option>프라푸치노</option>
<option>스무디</option>
</select>
<input type="submit" value="장바구니에 추가하기">
</form>
<a href ="result.jsp">구매하기</a>
<!-- 새로운 요청을 했기 때문에 uname이 result에 도달하는 것은 불가능
-->
<%-- 강사님 방법 --%>
<h1><%=session.getAttribute("uname") %>님, 반갑습니다! :D</h1>
<form action="add.jsp" method="post">
<select name="product">
<option>키링</option>
<option>아이스홍시</option>
<option>은귀고리</option>
<option>스마트톡</option>
<option>식빵</option>
</select>
<input type="submit" value="장바구니에 추가하기">
</form>
<a href ="result.jsp">구매하기</a>
</body>
</html>
3. 물건을 하나 select해서 전송하게 되면 add.jsp 실행
구매한 물건을 장바구니에 추가하는 로직]
장바구니 : 브라우저를 종료하면 사라지는 객체(session)에 저장
로직을 수행완료하면 다시 main.jsp로 이동
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList"%>
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>장바구니에 물건을 추가하는 로직(화면 출력 x)</title>
</head>
<body>
<%-- 내 방법 --%>
<%
String product=(String)request.getParameter("product");
ArrayList<String> bproduct = (ArrayList<String>)session.getAttribute("bproduct");
if(bproduct==null){ // 장바구니가 없을 경우
bproduct=new ArrayList<String>();
}
bproduct.add(product);
session.setAttribute("bproduct",bproduct);
%>
<%-- 강사님 방법 --%>
<%
String tproduct=request.getParameter("product");
ArrayList<String> datas=(ArrayList)session.getAttribute("datas");
// session 내장 객체에 저장된 장바구니를 불러오는 코드
if(datas==null){// 장바구니가 생성되지 않은 경우
datas=new ArrayList<String>();
session.setAttribute("datas",datas);
}
datas.add(tproduct);
%>
<%-- 스크립트는 같으니 패스 --%>
<script type="text/javascript">
alert("<%=product%>이(가) 추가되었습니다.");
history.go(-1);
</script>
</body>
</html>
4. result.jsp
지금까지 장바구니에 담긴 모든 물건을 화면에 출력
+) 단, 능력이 된다면 유효성 검사를 수행해주세요!
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList"%>
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>구매하기(결제페이지)</title>
</head>
<body>
<h1>구매한 상품 목록</h1>
<h2><%=session.getAttribute("uname") %>님이 선택한 상품 목록</h2>
<hr>
<%
ArrayList<String> bproduct=(ArrayList)(session.getAttribute("bproduct"));
if(bproduct==null){
out.println("선택한 상품이 없습니다.");
}
else{
for(String product:bproduct){
out.println(product+"<BR>");
}
}
%>
<br>
<a href="main.jsp">메인으로</a>
<%-- 강사님 방법 --%>
<h1><%=session.getAttribute("uname") %>님이 구매한 상품 목록</h1>
<hr>
<ol>
<%
ArrayList<String> datas=(ArrayList)session.getAttribute("datas");
if(datas==null){
out.println("<h2>구매한 상품이 없습니다!</h2>");
}
for(String v : datas){
out.println("<li>"+v+"</li>"); // li는 숫자 오더리스트
}
%>
</ol>
</body>
</html>
2시 10분에 전체적인 아웃라인을 같이 코딩!!
session.getAttribute("없는 변수명")
존재하지 않는 변수명을 호출하는 행위는
에러가 아니다!!!!!!
>> 없는 아이야! 라고 답변함
>> null을 리턴하는 것은
[application을 이용한 SNS 예제]
1. index2.jsp
로그인 form
로그인한 사람의 이름(id)을 전달
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<%session.invalidate(); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
</head>
<body>
<form action="main2.jsp" method="post">
<input type="text" name="id">
<input type="submit" value="로그인">
</form>
</body>
</html>
2. main2.jsp
[로그인한 사림 이름]님 : [ (msg) ] [글쓰기]
--------------------------------------------------
banana 하이 :D
banana (*^▽^*)
aaa ㅎㅇ
>> application scope에 저장
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList"%>
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SNS 창</title>
</head>
<body>
<%
String id = request.getParameter("id");
if(id!=null){ // index2.jsp를 통해서 페이지를 출력할때에만
session.setAttribute("id", id);
// session으로 해야한다/ 보안상의 문제로...
}
%>
<form action="add2.jsp" method="post">
[<%=request.getParameter("id") %>]님 : <input type="text" name="msg"> <input type="submit" value="글쓰기"><br>
---------------------------------------------------<br>
<%
ArrayList<String> ids = (ArrayList<String>)application.getAttribute("ids");
ArrayList<String> msgs = (ArrayList<String>)application.getAttribute("msgs");
if(ids==null && msgs==null){
out.println("<h3>유저와 메세지가 없습니다.</h3>");
}
else{
for(int i=0;i<ids.size(); i++){
out.println(ids+"\t"+msgs+"<BR>");
}
}
%>
<!-- 강사님 방법 -->
[<%=session.getAttribute("id")%>]님 : <input type="text" name="msg"><input type="submit" value="글쓰기">
</form>
<hr>
<ol>
<%
ArrayList<String> datas=(ArrayList)application.getAttribute("datas");
if(datas==null){
out.println("아직 내용이 없습니다.");
}
else{
for(String v : datas){
out.println("<LI>"+v+"</LI>");
}
}
%>
</ol>
</body>
</html>
[글쓰기]버튼 클릭시
3. add2.jsp
누가 어떤 msg를 작성했는지 AL<String>에 저장
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList"%>
<% request.setCharacterEncoding("UTF-8"); %>
<%
String id = (String)request.getParameter("id");
String msg = (String)request.getParameter("msg");
ArrayList<String> ids = (ArrayList)application.getAttribute("ids");
ArrayList<String> msgs = (ArrayList)application.getAttribute("msgs");
if(ids==null && msgs==null){
ids = new ArrayList<String>();
msgs = new ArrayList<String>();
}
ids.add(id);
msgs.add(msg);
application.setAttribute("ids", ids);
application.setAttribute("msgs", msgs);
// history.go(-1)을 사용해보았지만..
%>
<!-- 강사님 방법 -->
<%
String tmsg=request.getParameter("msg");
tmsg=session.getAttribute("id")+" "+tmsg;
ArrayList<String> datas=(ArrayList)application.getAttribute("datas");
if(datas==null){
datas=new ArrayList<String>();
application.setAttribute("datas", datas);
}
datas.add(tmsg);
response.sendRedirect("main2.jsp");
%>