본문 바로가기

프로그래밍/JSP 프로그래밍

JSP 프로그래밍_config 내장 객체, application 내장 객체, exception 내장 객체

config 내장 객체

<servlet></servlet>에 묶여 하나의 객체에서만 쓸 수 있는 객체.

현재 web.xml에서 읽어온 초기화 정보를 저장하고 있는 JSP 페이지에 대한 Servlet 설정 정보 등을 저장하고 사용할 수 있는 내장 객체이다.

 

web.xml 파일

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    id="WebApp_ID" version="4.0">
    <display-name>demo6</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.jsp</welcome-file>
        <welcome-file>default.htm</welcome-file>
    </welcome-file-list>
 
    <servlet>
        <servlet-name>myServlet</servlet-name>
        <servlet-class>com.tenco.MyServlet</servlet-class>
        <!-- 초기 파라미터 설정하기 -->
        <init-param>
            <param-name>adminId</param-name>
            <param-value>tenco</param-value>
        </init-param>
        <init-param>
            <param-name>adminPw</param-name>
            <param-value>asdf123</param-value>
        </init-param>
    </servlet>
 
</web-app>
cs

Servlet 파일

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.tenco;
 
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
// @WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    public MyServlet() {
        super();
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 내장객체 config 활용해서 초기 파라미터 값 확인하기
        String adminId = getServletConfig().getInitParameter("adminId");
        String adminPw = getServletConfig().getInitParameter("adminPw");
 
        System.out.println("adminId : " + adminId);
        System.out.println("adminPw : " + adminPw);
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
 
}
결과 화면
adminId : tenco
adminPw : asdf123
cs

application 내장 객체

전체 서블릿 객체에서 공유할 필요가 있는 값들을 설정하여 web.xml 파일의 경로를 이용해 더 유연하게 내용을 처리할 수 있다. 

 

web.xml 파일

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    id="WebApp_ID" version="4.0">
    <display-name>demo6</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.jsp</welcome-file>
        <welcome-file>default.htm</welcome-file>
    </welcome-file-list>
    
    <!-- 서블릿 전체에서 공유할 수 있는 데이터 선언 -->
    <context-param>
        <param-name>imgDir</param-name>
        <param-value>/upload/img1</param-value>
    </context-param>
    
    <context-param>
        <param-name>testServerIp</param-name>
        <param-value>127.0.0.1</param-value>
    </context-param>
    
    <context-param>
        <param-name>realServerIp</param-name>
        <param-value>88.0.13.1</param-value>
    </context-param>
 
</web-app>
cs

index.jsp 파일

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<%@ 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>
<%
String imgDir;
String testServerIp;
String realServerIp;
imgDir = application.getInitParameter("imgDir");
testServerIp = application.getInitParameter("testServerIp");
realServerIp = application.getInitParameter("realServerIp");
%>
 
<p>imgDir <%=imgDir %></p>
<p>testServerIp <%=testServerIp %></p>
<p>realServerIp <%=realServerIp %></p>
<div>
    <img alt="배너이미지" src="/demo6<%=imgDir %>/a.png">
</div>
</body>
</html>
cs

 

exception 내장 객체

에러 발생시 에러 페이지를 만들어주지 않으면 코드 내부가 노출이 될 수 있기 때문에 에러 페이지를 만들어주어 코드 노출을 방지할 수 있다.

 

에러가 날 것 같은 페이지에 선언

<!-- 만약 이 페이지에서 오류가 발생한다면 다른 곳으로 이동 시켜 -->
<%@ page errorPage="errorPage.jsp" %>

 

에러 페이지에 정의

<!-- 
여기 jsp 파일을 error 전용 페이지로 사용할려면  
반드시 isErrorPage = true 를 선언 해주어야 한다. 
-->
<%@ page isErrorPage="true" %>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page errorPage="errorPage.jsp" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        String str = null; 
        out.print(str.split("/"));
    %>
</body>
</html>
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>    
 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 
    <h2>잘못된 요청입니다</h2>
 
</body>
</html>
cs