본문으로 바로가기

JSP의 기초(2)

category 웹/JSP 2018. 10. 3. 16:35

이어서 JSP의 기초 문법에 대해 봅시다.

 

*주석

 

JSP페이지에 주석을 달고싶다면 즉 설명을 쓰고싶다면

주석을 달 수 있는 방법이 있습니다.

 

HTML의 주석을 그대로 이용하셔도 됩니다.

<!--....-->를 이용하시면 됩니다.

 

또한 JSP 고유의 주석 다는 방법이 있습니다.

<%--...... --%>

 

또한 c언어 처럼

/*....*/ 와 //를 이용 할 수 있습니다. 단 스크립팅 요소 안에서 사용 가능합니다.

 

*내장 변수

JSP의 내장 변수에 대해 봅시다.

JSP의 내장 변수는 JSP페이지 안에서 선언 없이도 사용 할 수 있는 변수입니다.

request나 out 등과 같은 변수입니다.

 

이렇게 선언 없이도 사용 할 수 있는 이유는 무엇일까요 ??

웹 컨테이너가 JSP 페이지를 서블릿 클래스로 변환 할 때 자동으로 내장 변수를 선언하기 때문입니다.

편하지 않나요 ??

 

JSP 내장 변수 표입니다.

변수 이름 

제공 변수 역할 

request

doGet,doPost의 첫 파라미터

response

doGet,doPost의 두 번째 파라미터

out

HTML 코드 출력

application

어플리케이션 관련 기능 제공

config

JSP 페이지 구성 정보 가져오는 기능

session

세션 관련 기능

pageContext

JSP페이지 범위 내 사용 가능한 데이터 저장 기능

page

JSP 페이지로부터 생성된 서블릿

exception

예외처리 익셉션

 

request 변수는 getParameter를 이용하여 데이터 이름을 통해 얻을 수 있습니다.

ex) String str=request.getParameter("NAME");

 

out 내장 변수는 out.println을 이용하여 출력 할 수 있습니다.

단 JspWriter나 PrintWriter는 가상의 통로를 만들어서 기존 out 내장 변수와 더불어 총 두개의 통로가 공존하여 예상과 달리 출력될 수 있습니다.

그리고 out.getBufferSize();를 통해 현재 %@page buffer="2kb" %로 지정된 크기를 출력 할 수 있습니다.

 

response는 여러 메소드를 지원하는데 doGet,doPost의 두 번째 파라미터와 같은 역할을 합니다.

response.sendRedirect("URL");은 다른 웹페이지로 이동 기능을 제공합니다.

단 메소드 호출 전 후에 데이터 출력을 하면 안됩니다.

 

sendRedirect는 원리가 URL을 직접 호출 하는 것이 아니고 웹 서버에서 다시 웹 자원 호출하라고 메시지를 웹 브라우저로 보낼 뿐입니다.

 

application 내장 변수는 앱 관련 기능을 제공합니다.

getContextPath는 웹 에플리케이션의 상대경로를 리턴해주고 getRealPath는 파일 경로명을 절대경로를 리턴해줍니다.

 

*파일 입출력

파일(.txt)와 같은 것을 입출력 하기 위해선 어떻게 해야 할까요??

흔히 자바에서 사용하는 java.io.FileReader와 java.io.FileInputStream 클래스를 이용하면 됩니다.

이때 파일은 WEB-INF에 저장 해놓고 사용하셔야 합니다.

 

파일로부터 데이터를 읽어보는 방법은 무엇일까요

WEB-INF에 input.txt파일이 있다고 가정 합시다.

이때 절대경로로 지정해주고 이를 통해 읽어주면 됩니다.

String filePath=application.getRealPath("/WEB-INF/input.txt"); 를 이용해서 절대경로로 지정해줍니다.

그다음 BufferedReader를 통해 객체를 생성하고 그 객체에 FileReader에 절대경로명을 지정해줘서 readLine() 메소드를 이용하여 읽어주면 됩니다.

<%@page contentType="text/html; charset=euc-kr"%>
<
%@page import="java.io.*"%>
<HTML>
 <HEAD><TITLE>파일 읽기</TITLE></HEAD>
 <BODY>
 <%
 BufferedReader reader=null;
 try{
 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("파일이 존재하지 않습니다.");
 }
 catch(IOException ioe){
  out.println("파일을 읽을 수 없습니다.");
 }
 finally{
  try{
   reader.close();
  }
  catch(Exception e)
  {}
 }
 %>
 </BODY>
</HTML>

즉 위와 같이 하시면 됩니다.

 

그러면 파일을 읽어와서 출력해주게 되겠죠.

 

반대로 데이터를 파일에 쓰려면????

 

자바에서와 마찬가지로 FileWriter, PrintWriter, FileOutputStream 클래스를 이용하면 됩니다.

 

써질 파일을 저장 할 폴더를 생성합니다.(WEB-INF 디렉토리 안에 폴더 생성)

bbs 폴더로 생성한다고 가정합시다.

 

그리고 파일 명은 왠만하면 현재 시각 단위로 지정해주면 좋습니다.

Date date=new Date();

long time=date.getTime();

으로 해서 time.txt로 지정해주면 되겠죠??

<%@page contentType="text/html; charset=euc-kr"%>
<
%@page import="java.io.*,java.util.Date"%>
<HTML>
 <HEAD><TITLE>게시판 글쓰기-결과화면</TITLE></HEAD>
 <BODY>
  <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;
   try{
    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{
    try{
     writer.close();
    }catch(Exception e){}
   }
   %>
  </BODY>
</HTML>

처럼 파일에 써지게 됩니다.

 

*다른 JSP 페이지 호출(forward,include)

 

 다른 jSP페이지를 호출하려면 forward와 include 메소드가 있습니다.

이 둘의 가장 큰 차이점은 forward는 제어권을 넘겨주고 include는 제어권을 넘겨주지 않습니다.

즉 include는 현재 페이지에서 작업할것이 남아있을 때 사용합니다.

 

메서드 이용하려면

request.setAttribute로 데이터 저장해놓고

RequestDispatcher dispatcher=request.getRequestDispatcher("jsp파일");

로 넘길 jsp페이지를 지정해주고

dispatcher.forward(request,response); 메서드를 호출합니다.

 

그럼 넘어간 jsp에서 request.getAttribute로 데이터를 받으면 됩니다.

 

<%
 String str1=request.getParameter("NUM1");
 String str2=request.getParameter("NUM2");
 int num1=Integer.parseInt(str1);
 int num2=Integer.parseInt(str2);
 request.setAttribute("SUM",new Integer(num1+num2));
 request.setAttribute("DIFFERENCE",new Integer(num1-num2));
 request.setAttribute("PRODUCT",new Integer(num1*num2));
 request.setAttribute("QUOTIENT",new Integer(num1/num2));
 RequestDispatcher dispatcher=request.getRequestDispatcher("FourRulesResult.jsp");
 dispatcher.forward(request,response);
%>

위 파일에서 FourRulesResult.jps로 forward합니다.

 

<%@page contentType="text/html; charset=euc-kr"%>
<HTML>
 <HEAD><TITLE>사칙 연산</TITLE></HEAD>
 <BODY>
  덧셈의 결과는? <%=request.getAttribute("SUM")%><BR>
  뺄셈의 결과는? <%=request.getAttribute("DIFFERENCE")%><BR>
  곱셈의 결과는? <%=request.getAttribute("PRODUCT")%><BR>
  나눗셈의 결과는? <%=request.getAttribute("QUOTIENT")%><BR>
 </BODY>
</HTMl>

이처럼 getAttribute로 데이터를 받아와서 출력해줍니다. 이때 제어권은 FourRulesResult.jps로 넘어가게 됩니다.

 

include도 사용 법은 동일하나 제어권을 넘겨 받지 않는 다는 점에 유의하시기 바랍니다.

 

' > JSP' 카테고리의 다른 글

서블릿의 라이프 사이클(2)  (0) 2018.10.29
서블릿의 라이프 사이클  (0) 2018.10.24
JSP의 기초  (0) 2018.09.19
서블릿에 대해(2)  (0) 2018.09.12
서블릿에 대해  (0) 2018.09.10