다연이네

[days04] JSP 기본 내장 객체 1. request 2. response 3. out 4. pageContext 5. application 본문

JSP

[days04] JSP 기본 내장 객체 1. request 2. response 3. out 4. pageContext 5. application

 다연  2020. 12. 28. 21:43
반응형


JSP 기본 내장 객체 : 
1. request
2. response
3. out
4. pageContext 
5. application

 

 out 

버퍼 정보 확인

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="">
<style>
</style>
<script>
   $(document).ready(function (){     
   });
</script>
</head>
<body>

 <%
 	out.println("홍길동"); // \r\n 포함 (그러나 브라우저에선 <br>로 개행하기떄문에 개행은 안됨)
 	out.newLine(); // == \r\n  
 	out.print("홍길동"); //미포함
 %>
 
 <h3>버퍼 정보 확인</h3>
 >버퍼 크기 : <%=out.getBufferSize() %>kb<br>
 >남은 크기 : <%=out.getRemaining() %>kb<br>
 >auto flush : <%=out.isAutoFlush() %><br>
</body>
</html>

 pageContext 

1. JSP 기본 객체를 얻어올 수 있다. -- 커스텀 태그 구현
2. 속성 처리할 수 있다.
3. 페이지 흐름 제어할 수 있다.
4. 에러 데이터 구할 수 있다.

<body>
<h3>pageContext 기본 객체</h3>
 
 <%
 	//request 기본 객체를 얻어오고자 한다면
 	//request.getParameter(); 바로 쓰면 되지만 특별한 경우 (커스텀 태그 만들때 등)
 	HttpServletRequest httpRequest = (HttpServletRequest)pageContext.getRequest();
 	//그러나 서블릿 열어보면 HttpServletRequest (ServletRequest이 부모)
 	//=>다운캐스팅 필요
 	//request.getParameter();와 동일
 %>
 동일여부 확인<%= request==httpRequest %> <br>
 
 <%
 	out.append("홍길동");
 	out.append("<br>");
 	
 	JspWriter httpOut = pageContext.getOut();
 	httpOut.append("김길동");
 	
 	pageContext.getResponse(); 	//response 기본 객체
 	pageContext.getSession(); 		//session 기본객체
 	pageContext.getServletContext(); //servletContext 기본객체
 	pageContext.getServletConfig(); 
 	pageContext.getException();
 	pageContext.getPage(); 			//page 기본 객체
 %>
 
</body>

 

 

 

 application 

- 모든 JSP 페이지는 하나의 application 기본 객체를 공유한다.
- 즉, 웹 사이트 전체에 application 공유 객체(공유 정보 쓰기/읽기)
- 초기 설정정보/서버정보 저장, 자원 읽어오기 가능

- DB 연결 정보 / 파일 저장 경로 / 로깅 설정 등 웹 사이트에 공통으로 사용할 초기 설정 정보를 저장

 

서블릿 규약은 웹 사이트(어플리케이션) 전체에 걸쳐서 사용할 수 있는 초기화 파라미터를 정의하고 있다. 
WEB-INF\web.xml 파일(dd파일) 안에 <context-param> 태그를 사용해 초기화 파라미터 설정

 

web.xml

 <!-- 웹사이트 전체에서 사용할 수 있는 초기화 파라미터 선언 => applicatiob 기본 객체를 통해 사용-->
  <context-param>
  <description>로그인 여부</description>
  <param-name>logEnabled</param-name>
  <param-value>true</param-value>
  </context-param>
  <context-param>
  <description>디버깅 레벨</description>
  <param-name>debugLevel</param-name>
  <param-value>3</param-value>
  </context-param>

 

<%@page import="java.util.Enumeration"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="">
<style>
</style>
<script>
   $(document).ready(function (){     
   });
</script>
</head>
<body>
<h3>application 기본 객체</h3>

<h3>web.xml context-param 읽기</h3>
<% 
	Enumeration<String> en = application.getInitParameterNames();
	while(en.hasMoreElements()){
		String initParamName = en.nextElement();
%>
	<li><%=initParamName %>-<%=application.getInitParameter(initParamName) %></li>
<%
	}
%>

</body>
</html>

<h3>application 기본 객체 - 서버 정보 읽기</h3>
서버 정보 : <%=application.getServerInfo() %><br>
서블릿 규약 메이저 버전 : <%=application.getMajorVersion() %><br> 
서블릿 규약 마이너 버전 : <%=application.getMinorVersion() %><br>

 

application.getRealPath(path) : 시스템 상의 실제 경로를 리턴하는 함수

실제 물리적인 경로를 톰캣 서버에 배포한 그 경로이다.

게시판 글쓰기 + 첨부파일(사진) 때 사용

<%
 	//URL - http://localhost:80/jspPro/days01/ex01.jsp

 	String path = ""; 
    //C:\Class\JSPClass\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\jspPro\
 	String path = "/days01"; //뒤에 days01까지 잡히게 됨
    //C:\Class\JSPClass\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\jspPro\days01
 	String path = "/"; //아무것도 안주나 /주나 똑같음
    //C:\Class\JSPClass\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\jspPro\
 	
    String contextPath = request.getContextPath();    
    //  /jspPro
    
 	String realPath = application.getRealPath(path);
%>


<!-- C:\Class\JSPClass\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\jspPro\ -->
 <!-- 가상으로 이클립스 내부에 배포 경로 
 	C:\apache-tomcat-8.5.60\webapps라고 이해
 	탐색기에 검색하보면 게시되어져있다 만든적도 없는데 (나중에 얘네 복사해서 직접 실제 서버에 붙혀넣기
-->

 

 

 

 

jspPro 웹사이트를 배포했다 가정하고

1) days01 폴더 안의 파일명을 select태그의 option으로 추가하자

2) select 태그의 한 옵션을 선택하면 해당 옵션의 이름을 가진 파일의 스크립트가 출력되도록 하자

 

 

<%@page import="java.io.BufferedReader"%>
<%@page import="java.io.FileReader"%>
<%@page import="java.io.File"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="">
<style>
</style>
<script>
   $(document).ready(function (){     
	   $("#file").change(function(event) {
	   		$("#form1").submit();
	   });
	   
	   $("#file").val("${empty param.file ? 'ex01.html' : param.file}");
	  
   });
</script>
</head>
<body>

 <%
 	String path = "/days01"; //뒤에 days01까지 잡히게 됨
 	String realPath = application.getRealPath(path);
 %>

 <%=realPath %><br>

 <br>
 <%
 	File dir = new File(realPath);
 	File [] fileList = dir.listFiles();
 %>
<form action="" id="form1" method="get">
	<label>days01</label>
	<br />
	<select name="file" id="file">
		<%
		for(int i=0;i<fileList.length;i++){
		%>
			<option><%=fileList[i].getName() %></option>	
		<%
		}
		%>
		
	</select>
</form>

<%
	FileReader in = null;
	BufferedReader br = null;
	StringBuffer sb = new StringBuffer();
	
	//?
	//?file=파일명
	String pFile = request.getParameter("file");
	String file = pFile == null? "ex01.html":pFile;
	String fileName = String.format("%s/%s",realPath, file);
	
	try{
		in = new FileReader(fileName);
		br = new BufferedReader(in);
		
		String line = null;
		while((line=br.readLine())!=null){
			sb.append(line+"\r\n"); //아님 여기 <br>추가해도 됨
		}
	}catch(Exception e){
		e.printStackTrace();
	}finally{
		try{
		in.close();
		br.close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	String content = sb.toString();
	content = content.replaceAll("<","&lt;") //태그로 인식 못하게
							.replaceAll(">", "&gt;")
							.replaceAll("\r\n", "<br>");
	
%>
<div style = "border: solid 1px gray; padding: 5px; margin-top: 10px;">
	<code>
		<%=content %>
	</code>
</div>

</body>
</html>
반응형
Comments