이번 폴더구조는 다음과 같다.




이미지 파일 첨부


images.zip





이번에는 JSP 프로젝트에 JDBC 기능을 사용한다.


WEB-INF 폴더 아래에 lib 폴더를 만들고


ojdbc6.jar을 복사하자.(JDBC 할 때 build Path 추가와 같은 작업)


이 파일은 jdbc를 공부할 때 어디있는지 한번 설명을 했었다. (https://qdgbjsdnb.tistory.com/196?category=726465)


위의 글 설명 그대로


sql을 사용하기 위한 Library 파일을 불러온다.


계속 사용했던 oracle에 설치 폴더에 있는 파일을 불러온다.


경로는 설치 경로 + oraclexe/app/oracle/product/11.2.0/server/jdbc/lib 에 ojdbc6이라는 파일이 존재한다.



출처: https://qdgbjsdnb.tistory.com/196?category=726465 [하위^^]

sql을 사용하기 위한 Library 파일을 불러온다.


계속 사용했던 oracle에 설치 폴더에 있는 파일을 불러온다.


경로는 설치 경로 + oraclexe/app/oracle/product/11.2.0/server/jdbc/lib 에 ojdbc6이라는 파일이 존재한다.



출처: https://qdgbjsdnb.tistory.com/196?category=726465 [하위^^]

sql을 사용하기 위한 Library 파일을 불러온다.


계속 사용했던 oracle에 설치 폴더에 있는 파일을 불러온다.


경로는 설치 경로 + oraclexe/app/oracle/product/11.2.0/server/jdbc/lib 에 ojdbc6이라는 파일이 존재한다.



출처: https://qdgbjsdnb.tistory.com/196?category=726465 [하위^^]으

sql을 사용하기 위한 Library 파일을 불러온다.


계속 사용했던 oracle에 설치 폴더에 있는 파일을 불러온다.


경로는 오라클 설치 경로 + oraclexe/app/oracle/product/11.2.0/server/jdbc/lib 에 ojdbc6이라는 파일이 존재한다.




파일을 찾아서 lib 폴더에 복사하면 된다.







01_testPerson.jsp는 선호도 조사로 선택한 항목, 입력 값 등을 통해서


해당하는 이미지를 출력한다.


또한 선택을 안했을 경우의 예외처리도 전부 JSP 파일에서 구현한다.





02_memberJoin.jsp는 JSP에서 데이터 베이스에 접근하여 새로운 정보를 추가하여 회원가입을 구현한다.



index.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>
    <h1>MVC Model1</h1>
    <p>jsp도 서블릿이다!</p>
    <h3><a href="views/01_testPerson.jsp">선호도 조사</a></h3>
    <h3><a href="views/02_memberJoin.jsp">회원가입</a></h3>
</body>
</html>

------------------------------------------------------------------------------------------------------------------------------------


01_testPerson.jsp, 01_testPersonResult.jsp

------------------------------------------------------------------------------------------------------------------------------------

01_testPerson.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>
    <h2>개인 취향 테스트(MVC)</h2>
    당신의 취향을 테스트합니다.<br>
    데이터 입력 후 확인 버튼을 누르세요
   
    <form action="01_testPersonResult.jsp" name="personFrm" method="post">
        <ul style="list-style: none; line-height: 200%;">
            <li>이름은? <input type="text" name="name" size="10"></li>
            <li> 좋아하는 색?
                <input type="radio" name="color" id="color-red" value="빨강">
                <label for="color-red">빨강</label>
                <input type="radio" name="color" id="color-blue" value="파랑">
                <label for="color-blue">파랑</label>
                <input type="radio" name="color" id="color-yellow" value="노랑">
                <label for="color-yellow">빨강</label>
            </li>
            <li>좋아하는 동물?
                <select name="animal" id="animal">
                    <option value="강아지">강아지</option>
                    <option value="고양이">고양이</option>
                    <option value="금붕어">금붕어</option>
                </select>
            </li>
            <li>좋아하는 음식?(모두 고르세요)
                <input type="checkbox" name="food" id="food1" value="짜장면">
                <label for="food1">짜장면</label>
                <input type="checkbox" name="food" id="food2" value="짬뽕">
                <label for="food2">짬뽕</label>
                <input type="checkbox" name="food" id="food3" value="탕수육">
                <label for="food3">탕수육</label>
                <input type="checkbox" name="food" id="food4" value="양장피">
                <label for="food4">양장피</label>
                <input type="checkbox" name="food" id="food5" value="팔보채">
                <label for="food5">팔보채</label>
            </li>
            <li>
                <br>
                <input type="submit" value="확인">&nbsp;&nbsp;
                <input type="reset" value="취소">
            </li>
        </ul>
    </form>
   
</body>
</html>






01_testPersonResult.jsp



<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    //1.전달 파라미터 한글 처리
    request.setCharacterEncoding("utf-8");

    //2.전달된 파라미터 변수에 담기
    String name = request.getParameter("name");
    String color = request.getParameter("color");
    String animal = request.getParameter("animal");
    String[] foodArr = request.getParameterValues("food");
   
   
   
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
    <div id="container">
        <div id="header">
            <h2><span style="color: blue;"><%= name %></span>님의 개인 취향 테스트</h2>
        </div>
        <div id="color">
            <span class="title">당신이 좋아하는 색깔은?</span>
        </div>
       
        <div id="animal">
            <span class="title">당신이 좋아하는 동물은?</span>
        </div>
        <div id="food">
            <span class="title">당신이 좋아하는 음식은?</span>
        </div>
   
    </div>
    <script>
        $(function(){
            <%
                if(color != null){
                switch(color){
                    case "빨강" :
            %>
                            $("#color").append("<img src='<%=request.getContextPath()%>/images/red.png'>");
            <%                break;
                    case "파랑" :
            %>
                            $("#color").append("<img src='<%=request.getContextPath()%>/images/blue.png'>");
            <%                break;
                    case "노랑" :
            %>
                            $("#color").append("<img src='<%=request.getContextPath()%>/images/blue.png'>");
            <%                break;
                }
                }else{
            %>
                    $("#color").append("선택한 색깔이 없습니다 ㅜㅜ");
            <%
                }
            %>
        });
    </script>
    <script>
        $(function(){
            <%
                switch(animal){
                    case "강아지" :
            %>
                            $("#animal").append("<img src='<%=request.getContextPath()%>/images/dog.png'>");
            <%                break;
                    case "고양이" :
            %>
                            $("#animal").append("<img src='<%=request.getContextPath()%>/images/cat.png'>");
            <%                break;
                    case "금붕어" :
            %>
                            $("#animal").append("<img src='<%=request.getContextPath()%>/images/fish.png'>");
            <%                break;
                }
            %>
        });
    </script>
    <script>
        $(function(){
            <%
                try{
                for(int i = 0; i < foodArr.length; i++){   
                    switch(foodArr[i]){
                        case "짜장면" :
            %>
                            $("#food").append("<img src='<%=request.getContextPath()%>/images/jjm.png'>");
            <%
                            break;
                        case "짬뽕" :
            %>
                            $("#food").append("<img src='<%=request.getContextPath()%>/images/jjbong.png'>");
            <%
                            break;
                        case "탕수육" :
            %>
                            $("#food").append("<img src='<%=request.getContextPath()%>/images/tangsy.png'>");
            <%
                            break;
                        case "양장피" :
            %>
                            $("#food").append("<img src='<%=request.getContextPath()%>/images/yang.png'>");
            <%
                            break;
                        case "팔보채" :
            %>
                            $("#food").append("<img src='<%=request.getContextPath()%>/images/palbc.png'>");
            <%
                            break;
                    }   
                }
                }catch(Exception e){
            %>
                            $("#food").append("선택한 음식이 없습니다 ㅜㅜ");
            <%
                }
            %>
        });
    </script>
</body>
</html>

------------------------------------------------------------------------------------------------------------------------------------





02_memberJoin.jsp, 02_memberJoinResult.jsp

------------------------------------------------------------------------------------------------------------------------------------

02_memberJoin.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>
    <div align="center">
        <h2>회원 가입 정보 입력</h2>
        <br>
        <form action="02_memberJoinResult.jsp" method="post">
            <input type="text" placeholder="아이디" name="userId" id="userId">
            <br>
            <input type="password" placeholder="패스워드" name="password" id="password">
            <br>
            <input type="text" placeholder="이름" name="userName" id="userName">
            <br>
            <input type="text" placeholder="나이" name="age" id="age">
            <br>
            <input type="email" placeholder="이메일" name="email" id="email">
            <br>
            <input type="tel" placeholder="휴대폰" name="phone" id="phone">
            <br>
            <input type="text" placeholder="주소" name="address" id="address">
            <br>
            <label>성별 : </label>
            <input type="radio" name="gender" id="male" value="M">
            <label for="male">남</label>
            <input type="radio" name="gender" id="female" value="F">
            <label for="female">여</label>
            <br>
            <label>취미 : </label>
            <input type="checkbox" name="hobby" id="hobby0" value="운동">
            <label for="hobby0">운동</label>
            <input type="checkbox" name="hobby" id="hobby1" value="등산">
            <label for="hobby1">등산</label>
            <input type="checkbox" name="hobby" id="hobby2" value="독서">
            <label for="hobby2">독서</label>
            <input type="checkbox" name="hobby" id="hobby3" value="게임">
            <label for="hobby3">게임</label>
            <input type="checkbox" name="hobby" id="hobby4" value="여행">
            <label for="hobby4">여행</label>
            <br><br>
            <input type="submit" value="가입">&nbsp;&nbsp;
            <input type="reset" value="취소">
        </form>
    </div>


</body>
</html>





02_memberJoinResult.jsp



<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.*"%>
<%
    //1.한글 인코딩 처리
    request.setCharacterEncoding("utf-8");

    //2.전송값 꺼내서 변수에 기록
    String userId = request.getParameter("userId");
    String password = request.getParameter("password");
    String userName = request.getParameter("userName");
    int age = Integer.parseInt(request.getParameter("age"));
    String gender = request.getParameter("gender");
    String email = request.getParameter("email");
    String phone = request.getParameter("phone");
    String address = request.getParameter("address");
   
    String[] hobbies = request.getParameterValues("hobby");
   
    //String[]을 구분자로 연결하는 String의 스태틱메소드 join
    String hobby = String.join(",", hobbies);
   
    //3.비즈니스로직 작성
    Connection conn = null;
    PreparedStatement pstmt = null;
    int result = 0;
    String msg = "";
   
    String query = "INSERT INTO MEMBER VALUES(?,?,?,?,?,?,?,?,?,SYSDATE)";
   
    try{
        Class.forName("oracle.jdbc.driver.OracleDriver");
       
        conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "jsp", "jsp");
       
        pstmt = conn.prepareStatement(query);
        pstmt.setString(1, userId);
        pstmt.setString(2, password);
        pstmt.setString(3, userName);
        pstmt.setString(4, gender);
        pstmt.setInt(5, age);
        pstmt.setString(6, email);
        pstmt.setString(7, phone);
        pstmt.setString(8, address);
        pstmt.setString(9, hobby);
       
        result = pstmt.executeUpdate();
       
        if(result > 0){
            conn.commit();
            msg = "성공적으로 회원 가입 되었습니다.";
        }else{
            conn.rollback();
            msg = "회원 가입에 실패했습니다.";
        }
       
       
    }catch(Exception e){
        e.printStackTrace();
    }finally {
        try{
            pstmt.close();
            conn.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
   
   
   
   
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <ul style="list-style: none; line-height: 200%">
        <li>아이디 : <%= userId %></li>
        <li>패스워드 : <%= password %></li>
        <li>이름 : <%= userName %></li>
        <li>나이 : <%= age %></li>
        <li>이메일 : <%= email %></li>
        <li>성별
            <span id="gender" style="font-weight: bold;
            color: <%
                    String genderColor = "";
                    if("M".equals(gender)){
                        genderColor = "blue";
                    }else{
                        genderColor = "red";
                    }
                %><%=genderColor%>"><%=gender %></span>
        </li>
        <li>휴대폰 : <%= phone %></li>
        <li>주소 : <%= address %></li>
        <li>취미 : <%= hobby %></li>
   
    </ul>
    <hr>
    <p><%= msg %></p>


</body>
</html>

------------------------------------------------------------------------------------------------------------------------------------





주목해야 할 점은 html문 중간중간에 <%%>를 사용하여 연산된 데이터를 표현하는 것


또한 Jquery 문에도 조건문과 섞어서 사용하는 방법을 주목하자.












이번 예는 간단한 JSP 기능들을 이용한 페이지들을 사용해보자.


테이블 구조는 다음과 같다.







총 4가지의 페이지를 볼 수 있는데 01_sum은 연산의 결과가 오류일 때 정해진 오류 페이지를 보여준다.


페이지를 열 때 브라우저에 400번대 에러와 500번대 에러는 흔히 볼 수 있는데


500번대 에러는 서버측의 에러이기 때문에 해커가 현재 서버가 어떤 문제가 있는지 코드에 어떤 오류가 있는지


알 수 있기 때문에 500번 오류는 노출하지 않는걸 권장한다.




두번째로 02_date인데 웹브라우저에서 자주 사용하는 날짜 함수를 JSP에서 어떻게 사용하는지 확인해보자.



세번째로 03_fortune은 다른 페이지(jsp 파일)를 불러와 현재 페이지에 포함(include)하는 방법을 확인해보자



네번째 04_menu는 간단하게 get방식으로 값을 넘겨서 연산처리를 하여 결과를 확인해보자.






index.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>
    <h1>JSP 테스트</h1>
    <h3><a href="views/01_sum.jsp">테스트1</a></h3>
    <h3><a href="views/02_date.jsp">테스트2</a></h3>
    <h3><a href="views/03_fortune.jsp">테스트3</a></h3>
    <h3><a href="views/04_menu.jsp">테스트4</a></h3>
</body>
</html>










01_sum.jsp




<%-- directive page : 페이지 지시자 태그'<%@' --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%--
        아래의 코드(System.out.println)를 보면 에러가 발생하는 구문이다.
        실행하면 에러페이지에 아래 코드가 출력이 되는데 코드가 그대로 노출되기 때문에 보안에 매우 취약하다.
        따라서 에러 페이지를 따로 지정하면 된다.
    --%>
    <%@ page errorPage="errorPage.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<%-- JSP는 동적 컴파일을 지원하기 때문에 변경사항이 있어도 서버를 껏다 킬 필요가 없다. --%>
<body>
    <%-- JSP 주석 '<%--' --%>
    <!-- HTML 주석 -->
   
   
   
    <%-- Scripting Element 1 : scriptlet --%>
    <%-- <%로 시작해서 %>로 끝나는 것을 스크립틀릿이라고 부른다. --%>
    <%
        int total = 0;
       
        for(int i = 1; i <= 10; i++){
            total += i;
        }
       
        // 아래의 코드를 보면 에러가 발생하는 구문이다.
        // 실행하면 에러페이지에 아래 코드가 출력이 되는데
        String s = null;
        System.out.println(s.charAt(0));
    %>
   
   
   
    <%-- Scripting element 2 : expression 기능은 자바 코드에서 작성한 결과값을 출력한다. --%>
    <%-- expression 태그는 세미콜론이 있으면 에러가 난다. --%>
    <h4>1부터 10까지의 합은 : <span style="color: red; font-size: 16pt; "><%= total %></span></h4>
    <h4>1부터 10까지의 합은 : <span style="color: red; font-size: 16pt; "><% out.println(total); %></span></h4>
    <%-- out은 선언하지 않았는데 사용할 수 있음 - 내장객체이므로 가능 --%>
</body>
</html>





errorPage.jsp



<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>에러페이지</h1>
    <h3>에러 종류 : <%= exception.getClass().getName() %></h3>
</body>
</html>











02_date.jsp




<%@page import="java.util.Date"%>
<%@ 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>
    <%
        Date now = new Date();
       
        String date = String.format("%tF", now);
        String time = String.format("%tp %tT", now, now);
        String today = String.format("%tY년 %tm월, %td일, %tA", now, now, now, now);
       
        /*
        날짜 타입           설명
        ------------------------------------------
        %tF          날짜를 yyyy-mm-dd 형식으로 포맷
        %tT          날짜의 시각을 HH:MM:SS 형식으로 포맷
        ------------------------------------------
        %tY          4자리 년도만 출력
        %ty          2자리 년도만 출력
        %tB          월의 이름 영문(January, Febuary, ....)
        %tm          월을 숫자로 (01, 02, 03 ~ 12)
        %td          일수를 1 ~ 31로 표현
        %te          %td와 같다.
        %tA          요일명 출력
        ------------------------------------------
        %tp          오전, 오후 출력
        %tk          시간을 0 ~ 23 으로 출력
        %tl          시간을 1 ~ 12로 출력
        %tM          분을 00 ~ 59로 출력
        %tS          초를 00 ~ 59로 출력
        ------------------------------------------
        */
    %>
   
    <ul style="list-style: decimal;">
        <li>오늘의 날짜 : <%= date %></li>
        <li>현재 시간 : <%= time %></li>
        <li>오늘은 <span style="color: red;"><%= today %></span>입니다.</li>
       
    </ul>
</body>
</html>










03_fortune.jsp



<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%--
<%
    Date now = new Date();
    String today = String.format("%tY년 %tm월 %td일 %tA", now, now, now, now);
%>
--%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%-- <h2>오늘의 운세<sub style="color:lightgray"><%= today %></sub></h2> --%>
    <h2>오늘의 운세<%@ include file="today.jsp" %></h2>
    <%-- 위의 date 때문에 오류가 나기 때문에 주석으로 감싼다. --%>
    <select>
        <option>쥐띠</option>
        <option>소띠</option>
        <option>호랑이띠</option>
        <option>토끼띠</option>
        <option>용띠</option>
        <option>뱀띠</option>
        <option>말띠</option>
        <option>양띠</option>
        <option>원숭이띠</option>
        <option>닭띠</option>
        <option>개띠</option>
        <option>돼지띠</option>
    </select>
   
</body>
</html>






today.jsp




<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    Date now = new Date();
    String today = String.format("%tY년 %tm월 %td일 %tA", now, now, now, now);
%>
<%-- include 전용 파일에 HTML 코드들이 있으면 다같이 딸려가기 때문에 지워둔다. iframe과 유사 --%>
<sub style="color: lightgray;"><%= today %></sub>











04_menu.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>
    <h2>오늘의 메뉴<%@ include file="today.jsp" %></h2>
   
    <!--  13번째 줄과 14번째 줄은 같은 의미 -->
    <!-- <form action="/w4/menu.Order.do" method="get" name="menuFrm"></form> -->
    <form action="<%= request.getContextPath() %>/menuOrder" method="get" name="menuFrm">
        <select id="menu" name="menu">
            <option value="햄버거">햄버거</option>
            <option value="짜장면">짜장면</option>
            <option value="짬뽕">짬뽕</option>
            <option value="순대국">순대국</option>
        </select>
        <input type="submit" value="선택완료">
    </form>
   
</body>
</html>











MenuOrderServlet.java




package com.kh.servletTest.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
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("/menuOrder")
public class MenuOrderServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
      
    public MenuOrderServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1. 전송값에 한글이 있을 경우 인코딩 처리 해야 함, 그냥 항상 하자
        request.setCharacterEncoding("utf-8");
       
        // 2. 전송갑 꺼내서 변수에 기록하기
        String menu = request.getParameter("menu");
       
        // 3. 비지니스 로직
        int price = 0;
        switch (menu) {
        case "햄버거":
            price = 5000;
            break;
        case "짬뽕":
            price = 4000;
            break;
        case "짜장면":
            price = 4500;
            break;
        case "순대국":
            price = 6000;
            break;
        }
       
        // 4. 실행 결과 처리 및 전송 (박싱이 자동으로 처리됨, 오토 박싱)
        request.setAttribute("menu", menu);
        request.setAttribute("price", price);
       
        RequestDispatcher view = request.getRequestDispatcher("views/04_menuResult.jsp");
       
        view.forward(request, response);
       
       
       
       
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}










04_menuResult.jsp





<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String menu = (String)request.getAttribute("menu");
    int price = (int)request.getAttribute("price");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h2>감사합니다.</h2>
    주문하신 <%= menu %>의 결제 금액은 <%= price %>원 입니다.
</body>
</html>















번호별로 주목할 점은 위에서 설명한거와 같이 넘버별로 하나씩



01_sum <%@ page errorPage="errorPage.jsp" %>을 통해서 임의의 에러 페이지를 지정하고


errorPage.jsp에서는 <%= exception.getClass().getName() %>을 통해서 에러 코드(널포인터 익셉션)를 표시해준다






02_date는 <%%> 구문안에 Date를 사용하고 사용하기 위해서 상단에 import해야 하는것을 확인하자.


그 외 실제로 확인하는 방법은 주석문에 정리해두었다.






03_fortune은 <%@ include file="today.jsp" %>을 통해서 적절한 부분에 해당 jsp 파일을 불러온다.


불러올 파일의 내용을 전부 가져오기 때문에 HTML 태그라던가 head body 등 쓸모없는 부분은 지워서 작성한다.






네번째 04_menu는 JSP -> Servlet -> JSP 순으로 데이터의 흐름이 어떻게 움직이는지 확인해보자.





1. Tomcat이 페이지의 default 값 파일이 저장되어 있는 위치



톰캣을 이클립스 Server에 연동 시키면 프로젝트 구조에 다음과 같은 Servers라는게 생긴다




이 파일들이 전부 default 값으로 설정 해 둔 정보들이 담겨있는 파일이다.


예를 들어 페이지의 맨 첫번째 페이지를 지금까지 index.html으로 사용했는데


이것은 어디서 결정되는지 궁금했을거다.


이것은 위의 파일들에 담겨있는 정보들에 지정이 전부 되어있다.


또한 프로젝트에서 이 기본 정보들을 변경 할 수 있다.


이 파일들을 복사해서 프로젝트에 붙여넣고 내용을 바꾼다.(파일 이름은 절대 바꾸면 안된다.)


프로젝트에 동일한 이름의 파일이 있다면 톰캣은 default 파일들을 기준으로 잡지 않고


프로젝트에 있는 파일들의 설정을 따른다.





2. java 파일이 서버에 적용되는 원리


위의 사진에서 네모친 web.xml에 java 파일을 서버에 올리는 작업 대상이 될 폴더가 명시되어 있다.






다음과 같이 <context> 부분의 속성에 workDir="원하는 경로"를 입력하면


그 쪽에 java파일들이 컴파일러에 의해 처리가 되어 class 파일로 저장된다.










+ Recent posts