JSP 의내장객체 response 객체 - response 객체는 JSP 페이지의실행결과를웹프라우저로돌려줄때사용되는객체이다. - 이객체는주로켄텐츠타입이나문자셋등의데이터의부가정보 ( 헤더정보 ) 나쿠키 ( 다음에설명 ) 등을지정할수있다. - 이객체를사용해서출력의방향을다른 URL로바꿀수있다. 예 ) response.sendredirect("http://www.paran.com"); out 객체 - 이객체는페이지에실행결과를출력할때사용되는객체이다. - HTTP 형태로출력할수있다. - 일반적으로스크립트릿에서출력결과를클라이언트로보여줄때사용한다. - 주로사용하는메서드는다음과같다. 메서드 기능 print() 괄호안의내용을클라이언트로출력한다. println() 괄호안의내용을클라이언트로출력하고다음줄로옮긴다. newline() 다음줄로줄옮김을한다. flush() 버퍼에들어있는내용을모두클라이언트로출력한다. getbuffersize() 현재출력용버퍼의크기를알려준다. getremaining() 현재버퍼에서사용하지않는공간의크기를알려준다. clearbuffer() 버퍼의모든내용을출력하고버퍼를비운다. - 사용예 ) int x = 5; int y = 10; int z = x + y; out.print(" 지금이페이지에는값이 " + x + " 인 x 변수와값이 "); out.print(y + " 인변수가있다.<br>"); out.print(" 이두변수의값을합치면 <strong>" + z + "</strong> 이된다."); out.print("<br>"); out.print(" 버퍼의크기는 " + out.getbuffersize()); out.print("<br>"); out.print(" 남아있는빈공간은 " + out.getremaining()); out.flush(); application 객체 - 이객체는웹어플리케이션 ( 즉, 웹프로젝트 ) 디렉터리에속하는모든웹자원들의집합을의미한다. - 따라서, 이객체에는개발하고있는웹어플리케이션의모든환경정보들이저장되어있다. 예 ) String apppath = application.getcontextpath(); - 위의예에서사용한 application.getcontextpath() 는웹어플리케이션의경로이름을알려준다. - 1 -
예 ) String absolutepath = application.getrealpath("/ 프로젝트명 /JSP 파일명 "); - 위의예에서사용한 application.getrealpath("/ 프로젝트명 /JSP 파일명 ") 은지정된 JSP 파일 의절대경로를알려준 다. 파일처리 ( 파일로부터데이터를읽는처리 ) - JSP에서파일을읽기위해서는자바프로그램의파일읽기와동일하게처리한다. - java.io.* 패키지를사용한다. - 예외처리가필요하다. - 파일처리과정은다음과같다. 1 클라이언트에서웹서버의 JSP 페이지를호출한다. 2 서버폴더에서파일을읽는다. 3 읽은내용을클라이언트 ( 웹브라우저 ) 로전송한다. 파일처리시주의사항 : 데이터를저장하는파일의위치를이클립스프로젝트의 "WebContent" 폴더에위치시키면모든클라이언트에서접근이가능하므로, 노출되거나변경될가능성이높게된다. 따라서, 클라이언트에서접근하지못하도록 "WEB-INF" 라는폴더에일반적으로파일을위치시킨다. 어떠한파일이라도 "WEB-INF" 폴더에위치시키면클라이언트는접근할수없다. - 웹어플리케이션에서의파일의경로를알기위해서는다음과같이한다. String filepath = application.getrealpath("/web-inf/input.txt"); - 위의예는 "input.txt" 파일의절대경로를 "filepath" 변수에저장한다. 텍스트파일의내용을읽어서웹브라우저로출력하는 JSP 의예 - 다음예제를실행하기위해서는 "/WEB-INF/" 폴더에 "input.txt" 파일을미리생성해야한다. <HEAD><TITLE> 파일읽기 </TITLE></HEAD> BufferedReader reader = null; String filepath = application.getrealpath("/web-inf/input.txt"); reader = new BufferedReader(new FileReader(filePath)); while (true) { String str = reader.readline(); if (str == null) break; out.println(str + "<BR>"); catch (FileNotFoundException fnfe) { out.println(" 파일이존재하지않습니다."); - 2 -
catch (IOException ioe) { out.println(" 파일을읽을수없습니다."); finally { reader.close(); catch (Exception e) { 다음은특정디렉토리에있는파일들의목록을웹브라우저에출력하고, 사용자가특정한파일을클릭하면클릭한파일의내용을출력하는 JSP - 이예제를실행하기위해서는다음의순서로작업한다. 1 "/WEB-INF/songs" 라는디렉토리를만들고, 이디렉토리에노래가사를적은텍스트파일들을저장한다. 2 다음의 JSP를작성한다. @page import="java.io.file" <html> <head> <meta http-equiv="content-type" content="text/html; charset=euc-kr"> <title>insert title here</title> </head> <body> String dirpath = application.getrealpath("/web-inf/songs"); File dir = new File(dirPath); String filenames[] = dir.list(); <H4> 노래파일목록 </H4> for (String filename : filenames) { <A HREF='SongReader.jsp?FILE_NAME== filename '> = filename </A><BR> </body> </html> - 3 -
3 위의 2에서링크를클릭하면 SongReader.jsp로이동하면서 FILE_NAME 이라는파라미터에는클릭한파일이름이저장된다. 그러므로, SongReader.jsp 파일에서 getparameter() 메소드를사용해서 FILE_NAME이라는파라미터에저장되어있는파일이름을처리하도록한다. 4 아래와같이 SongReader.jsp 파일을생성한다. @page import="java.io.*" String filename = request.getparameter("file_name"); <HEAD><TITLE> 노래가사 </TITLE></HEAD> <H4> 파일이름 : = filename </H4> BufferedReader reader = null; String filepath = application.getrealpath("/web-inf/songs/" + filename); reader = new BufferedReader(new FileReader(filePath)); while (true) { String str = reader.readline(); if (str == null) break; out.println(str + "<BR>"); catch (FileNotFoundException fnfe) { out.println(" 파일이존재하지않습니다."); catch (IOException ioe) { out.println(" 파일을읽을수없습니다."); finally { reader.close(); catch (Exception e) { - 4 -
도전과제 - /WEB-INF 폴더안에파일들을만든다. - 파일의이름은본인의친구이름으로한다. 파일의내용은친구의전화번호와주소로한다. - 한글 처리를한다. 한글처리는다음과같이한다. String filename = request.getparameter("file_name"); filename = new String(filename.getBytes("ISO-8859-1"), "euc-kr"); - 본인친구들의이름이웹브라우저에출력되고, 친구의이름을클릭하면친구의전화번호와주소가출력되는 JSP를작성하세요. - 5 -
파일처리 ( 파일에데이터를기록하는처리 ) - JSP에서파일을읽기위해서는자바프로그램의파일읽기와동일하게처리한다. - java.io.* 패키지를사용한다. - 예외처리가필요하다. - 파일처리과정은다음과같다. 1 클라이언트에서입력된문장을웹서버의 JSP 페이지로전송한다. 2 서버폴더에서파일을생성해서보내온문장을저장한다. 3 저장되었습니다. 라는메세지를클라이언트 ( 웹브라우저 ) 로전송한다. 게시판글쓰기기능의 HTML <HEAD> <META http-equiv="content-type" content="text/html;charset=euc-kr"> <TITLE> 게시판글쓰기 - 입력화면 </TITLE> </HEAD> <H2> 글쓰기 </H2> <FORM ACTION=BBSPost.jsp METHOD=POST> 이름 : <INPUT TYPE=TEXT NAME=NAME><BR> 제목 : <INPUT TYPE=TEXT NAME=TITLE><BR> <TEXTAREA COLS=30 ROWS=5 NAME=CONTENT></TEXTAREA><BR> <INPUT TYPE=SUBMIT VALUE=' 저장 '> </FORM> 게시판의내용을파일로저장하는 BBSPost.jsp @page import="java.io.*, java.util.date" <HEAD><TITLE> 게시판글쓰기? 결과화면 </TITLE></HEAD> <H2> 글쓰기 </H2> request.setcharacterencoding("euc-kr"); String name = request.getparameter("name"); String title = request.getparameter("title"); String content = request.getparameter("content"); Date date = new Date(); Long time = date.gettime(); String filename = time + ".txt"; PrintWriter writer = null; - 6 -
String filepath = application.getrealpath("/web-inf/bbs/ + filename); writer = new PrintWriter(filePath); writer.printf(" 제목 : %s %n", title); writer.printf(" 글쓴이 : %s %n", name); writer.println(content); out.println(" 저장되었습니다."); catch (IOException ioe) { out.println(" 파일에데이터를쓸수없습니다."); finally { writer.close(); catch (Exception e) { 문제점발생 : 위의결과 JSP 즉, BBSPost.jsp 페이지에서 새로고침 버튼을누르면, 계속해서동일한내용의파 일이생성된다. 따라서, 하나의파일만생성하도록변경해야한다. 도전과제 : 위의문제점을해결하도록한다. - 힌트 1 : 위의 BBSPost.jsp를두개의페이지로분리한다. - 힌트 2 : 두개로분리된첫번째페이지에서파일을생성하고데이터를저장한후두번째페이지를호출한다. 호출하면서, 파일생성 성공 인지, 실패 인지의정보도같이넘겨준다. - 힌트 3 : 두개로분리된두번째페이지에서 성공 을받으면클라이언트화면에 저장되었습니다. 를출력하고, 실패 를받으면 파일에데이터를기록할수없습니다. 를출력한다. - 7 -