[8장 연습문제]

 

01. 유효성 검사란 무엇인가?

 

사용자가 폼에 입력한 데이터 값이 서버로 전송되기 전에 특정 규칙에 맞게 입력되었는지 검증 하는것을 말한다.

유효성 검사를 위한 핸들러 함수는 폼 페이지에서 이벤트 발생 시(버튼 클릭 or <submit>클릭) 유효성 검사를 위해 매핑하는 메소드를 의미한다.

 

02. 유효성 검사를 위한 두 가지 처리 기법을 간단히 설명하시오.

 

1. 기본 유효성 검사:  사용자가 폼의 입력항목에 입력한 데이터 값의 존재유무, 데이터 길이, 숫자 등 기본적인 것을 검사

2. 데이터 형식 유효성 검사: 사용자가 폼의 입력항목에 입력한 데이터 값이 특정 형태에 적합한지 검사하기 위해 정규표현식 사용

 

03. 유효성 검사를 위한 핸들러 함수와 폼 페이지를 작성하는 기법을 설명하시오.

-> 04번 문제의 코드 참조

 

04. 비밀번호가 아이디를 포함하지않도록 조건에 맞게 jsp애플리케이션을 만들고 실행결과를 확인하시오. 

 

case 1. 아이디:admin, 비밀번호:admin1234입력              case2. 아이디, 비밀번호 미입력

       

 

case3. 아이디:admin, 비밀번호:123 입력

- validation01.jsp 파일 생성

- validaton01_process.jsp 파일 생성

- 아이디, 비밀번호 항목이 입력되지 않으면 메시지창 출력

- 비밀번호에 ID가 포함되면 메시지창 출력

 

<코드>

1. validation01.jsp

21~25행은 "입력한 패스워드 정보가 아이디 값을 포함하면 경고창을 띄우고 수정한다." 를 의미합니다.

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
37
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Validation</title>
</head>
<script type="text/javascript">
    function checkInfo(){
        var form= document.form;
        if(form.id.value=="")
        {
        alert("아이디 입력");
        form.passwd.select();
        return
        }
        else if(form.passwd.value=="")
        {
        alert("비밀번호 입력");
        form.passwd.select();
        return;
        }
    if((form.passwd.value).search(form.id.value)>-1)
        {
        alert("비밀번호는 ID를 포함할 수 없습니다.");
        return;
        }
    form.submit();
        
    }
</script>
<body>
    <form action="validation01_process.jsp" name="form" method="post">
        <p> 아이디: <input type="text" name="id">
        <p> 비밀번호: <input type="password" name="passwd">
        <p> <input type="submit" value="전송" onclick="checkInfo()">
    </form>
</body>
</html>
cs

 

2. validation01_process.jsp

1
2
3
4
5
6
7
8
9
10
11
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Validation</title>
</head>
<body>
 
    <p>아이디: <%=request.getParameter("id") %>
    <p>비밀번호: <%=request.getParameter("passwd") %>
</body>
</html>
cs

 

 

05. 비밀번호로 동일한 영문이나 숫자를 3개이상 사용하지않도록 조건에 맞게 구현하고 결과를 확인하시오.

         

 

- 비밀번호에 동일한 영문이나 숫자가 3개연속 입력되면 메시창 출력

ex) aaa-> 오류, 1111-> 오류

 

<코드>

1. validation02.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
29
30
31
32
33
34
35
36
37
38
39
40
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Validation</title>
</head>
<script>
function check(){
 
    var form=document.frm;
    var passwd=form.passwd.value;
    var passwdcheck=form.passwd2.value;
    if(passwd!=passwdcheck)
        {
        alert("비밀번호 다시 확인");
        return false;
        }
    if(/(\w)\1\1/.test(passwd))
        {
        alert("영문,숫자는 3자 이상 연속 입력 불가능");
        form.passwd.focus();
        return false;
        }
    form.submit();
}
 
</script>
<body>
 
<form action="validation01_process.jsp" name="frm">
<p> 아이디 : <input type="text" name="id">
<p> 비밀번호 : <input type="text" name="passwd">
<p> 비밀번호 확인 : <input type="text" name="passwd2">
<input type="button" value="전송" onclick="return check();">
</form>
 
</body>
</html>
cs

 

2. validation02_process.jsp

1
2
3
4
5
6
7
8
9
10
11
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Validation</title>
</head>
<body>
 
    <p>아이디: <%=request.getParameter("id") %>
    <p>비밀번호: <%=request.getParameter("passwd") %>
</body>
</html>
cs

 

 

06. 비밀번호가 영문, 숫자, 특수기호를 조합한 8자이상이 되도록 조건에 맞게 구현하고 결과를 확인하시오.

 

 

<코드>

1. validation03.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
29
30
31
32
33
34
35
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Validation</title>
</head>
<script>
function check(){
 
    var form=document.frm;
    var passwd=form.passwd.value;
    var passwdcheck=form.passwd2.value;
    var regExpPasswd=/^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{8,}$/;
    if(!regExpPasswd.test(passwd))
        {
        alert("영문+숫자+특수기호 8자리 이상 구성 필요");
        return false;
        }
    form.submit();
}
 
</script>
<body>
 
<form action="validation01_process.jsp" name="frm">
<p> 아이디 : <input type="text" name="id">
<p> 비밀번호 : <input type="text" name="passwd">
<p> 비밀번호 확인 : <input type="text" name="passwd2">
<input type="submit" value="전송" onclick="return check();">
</form>
 
</body>
</html>
cs

 

 

 

 

 

 

 

 

[7장 연습문제]

 

01. 파일 업로드를 위한 form 태그내에 반드시 설정해야 하는 기법은 무엇인가?

 

1. action 속성-> 파일 업로드를 처리할 JSP파일 설정

2. method 속성-> 반드시 POST방식으로 설정

3. enctype 속성-> multipart/form-data로 설정

 

02. 파일을 서버에 업로드하는 처리 기법에 대해 간단히 설명하시오.

 

1. MultipartRequest를 이용한 파일 업로드

 MultipartRequest 객체 생성-> 해당 클래스가 제공하는 메소드를 사용하여 요청 파라미터를 읽어오고 파일 업로드

* 03번 문항 참조

 

2. Commons-FileUpload를 이용한 파일 업로드

 DiskFileUpload 객체 생성-> 해당 클래스가 제공하든 메소드를 사용하여 요청 파라미터를 읽어오고 

 FileItem 클래스의 메소드를 이용하여 요청 파라미터를 분석(일반데이터 or 파일)및 처리하여 파일 업로드

 

03. MultipartRequest 클래스를 이용하여 조건에 맞게 JSP애플리케이션을 만들고 실행결과를 확인하시오.

* 서버의 파일 저장 폴더 이름: C:\\exercise

   

 

<폴더>

 

 

1. WEB-INF/lib/폴더에 cos.jar파일 추가

2. fileupload01.jsp 파일 생성

3. fileupload01_process.jsp 파일 생성

 

<코드>

1. fileupload01_jsp

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"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>File Upload</title>
</head>
<body>
<form name="fileForm" method="post" enctype="multipart/form-data" action="fileupload01_process.jsp">
        <p> 파일: <input type="file" name="filename">
        <p> <input type="submit" value="파일 올리기">
    
    </form>
</body>
</html>
cs

 

 

2. fileupload01_process.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
29
30
31
32
33
34
35
36
37
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="com.oreilly.servlet.*"%>
<%@ page import="com.oreilly.servlet.multipart.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<%
    MultipartRequest multi = new MultipartRequest(request, "C:\\exercise"5 * 1024 * 1024"utf-8"new DefaultFileRenamePolicy());
 
    Enumeration params = multi.getParameterNames();
 
    while (params.hasMoreElements()) {
        String name = (String) params.nextElement();
        String value = multi.getParameter(name);
        out.println(name + " = " + value + "<br>");
    }
    out.println("-----------------------------------<br>");
 
    Enumeration files = multi.getFileNames();
 
    while (files.hasMoreElements()) {
        String name = (String) files.nextElement();
        String filename = multi.getFilesystemName(name);
        String original = multi.getOriginalFileName(name);
        String type = multi.getContentType(name);
        File file = multi.getFile(name);
 
        out.println("요청 파라미터 이름 : " + name + "<br>");
        out.println("실제 파일 이름 : " + original + "<br>");
        out.println("저장 파일 이름 : " + filename + "<br>");
        out.println("파일 콘텐츠 유형 : " + type + "<br>");
 
        if (file != null) {
            out.println(" 파일 크기 : " + file.length());
            out.println("<br>");
        }
    }
%>
cs

 

 

04. Commons-FileUpload 패키지를 이용하여 조건에 맞게 JSP애플리케이션을 만들고 결과를 확인하시오.

    

 

<폴더>

 

 

1. WEB-INF/lib 폴더에 commons-fileupload.jar, commons-io.jar 파일 추가

2. fileupload02.jsp파일 생성

3. fileupload02_process.jsp파일 생성

 

<코드>

1. fileupload02.jsp

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"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form name="fileForm" method="post" enctype="multipart/form-data" action="fileupload02_process.jsp">
        <p> 파일: <input type="file" name="filename">
        <p> <input type="submit" value="파일 올리기">
    
    </form>
</body>
</html>
cs

 

2. fileupload02_process.jsp

* 16~19행: 파일의 최대 크기/저장 버퍼 크기/ 파일 저장경로 설정(c:\\exercise)

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
37
38
39
40
41
42
43
44
45
46
<%@ page  contentType="text/html; charset=UTF-8"%>
<%@page import="org.apache.commons.fileupload.*" %>
<%@page import="java.util.*" %>
<%@page import="java.io.*" %>
 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
            String Path="C:\\exercise";
    
    DiskFileUpload upload=new DiskFileUpload();
    upload.setSizeMax(1000000);
    upload.setSizeThreshold(4096);
    upload.setRepositoryPath(Path);
    
    List items=upload.parseRequest(request);
    Iterator params=items.iterator();
    while(params.hasNext())
    {
        FileItem item=(FileItem)params.next();
        if(!item.isFormField())
        {
            String fileFiledName=item.getFieldName();
            String fileName=item.getName();
            String contentType=item.getContentType();
            
            fileName=fileName.substring(fileName.lastIndexOf("\\")+1);
            long fileSize=item.getSize();
            
            File file=new File(Path+"/"+fileName);
            item.write(file);
            
            out.println("요청 파라미터 이름:"+fileFiledName+"<br>");
            out.println("저장 파일 이름:" +fileName+"<br>");
            out.println("파일 콘텐츠 유형:"+contentType+"<br>");
            out.println("파일 크기: "+fileSize);
        }
    }
    %>
</body>
</html>
cs
 
 
 
 
 

 


[6장] 연습문제


01. form 태그에 사용하는 속성에 대해 간단히 설명하시오.


action: 폼 데이터를 받아 처리하는 웹 페이지의 URL을 설정한다.

method: 폼 데이터가 전송되는 HTTP방식을 설정한다. (get 방식 or post방식)

name: 폼을 식별하기 위한 이름을 설정한다.

accept-charset: 폼 전송에 사용할 문자 인코딩을 설정한다.


02. form 태그 내에 중첩하여 사용하는 태그를 나열하고 설명하시오.


input태그: 사용자가 텍스트입력, 선택 등을 다양하게 할 수 있도록 공간을 만드는 태그다.

select태그: 여러 개의 항목이 나타나는 목록 상자에서 항목을 선택하는 태그로, 반드시 option태그를 포함해야한다.

textarea태그: 여러 줄의 텍스트를 입력할 수 있는 태그로, 입력폼 안에 사용된 태그와 띄어쓰기가 그대로 출력된다.



03. 폼 페이지에서 전송된 데이터를 전달받는 내장 객체와 관련된 메소드는 무엇인가?


request 내장 객체


메소드

1. 요청 파라미터의 값 받기: getParameter("요청 파라미터 이름");

2. 요청 파라미터의 값을 배열로 받기: getParameterValues("요청 파라미터 이름");

3. 요청 파라미터의 전체 값 받기: 

 1) getParameterNames(): 모든 입력 양식의 요청 파라미터 이름을 순서에 상관없이 Enumeration형태로 전달받는다.

 2) hasMoreElements(): Enumeration 요소가 있으면 true, 없으면 false를 반환한다.

 3) nextElement(): Enumeration 요소를 반환한다.

04. form 태그를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.

      


1. form01.jsp 파일을 생성합니다.

- input 태그 내에 text유형을 이용하여 이름, 주소, 이메일 항목을 작성합니다.

- form 태그의 action 속성 값은 form01_process.jsp로 작성합니다.

2. form01_process.jsp 파일을 생성합니다.

- request 내장 객체의 getParameter()메소드를 이용하여 전송된 요청 파라미터 값을 받습니다.

- StringBuffer 클래스를 이용하여 전송된 요청 파라미터 값을 저장하여 출력합니다.

3. 웹 브라우저에 http://localhost:8080/Exercise/ch06/form01.jsp를 입력하여 실행결과를 확인합니다.


<코드>

1. form01.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- 3행,6행은 부트스트랩 적용 과정에서 디폴트로 파일 생성시 기본 적용된 태그입니다. -->
<title>Form Processing</title>
</head>
<body>
    <!--책의 결과 화면URL에 입력 데이터정보가 없으므로 post방식임  -->
    <form action="form01_process.jsp" method="post">
        이름: <input type="text" name="name">
        <p> 주소: <input type="text" name="address">
        <p> 이메일: <input type="text" name="email">
        <p> 전송:<input type="submit" value="전송">
    </form>
</body>
</html>
cs


2. form01_process.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Form Processing</title>
</head>
<body>
    <%
        request.setCharacterEncoding("utf-8");
        String name=request.getParameter("name");
        String address=request.getParameter("address");
        String email=request.getParameter("email");
    %>
    아이디: <%=name %>
    <p> 주소: <%=address %>
    <p> 이메일: <%=email %>
</body>
</html>
cs

05. form 태그를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행결과를 확인하시오.

  

1. form02.jsp 파일을 생성합니다.

- input 태그 내에 text 유형을 이용하여 이름, 주소, 이메일 항목을 작성합니다.

- form 태그의 action 속성 값은 form02_process.jsp로 작성합니다.

2. form02_process.jsp파일을 생성합니다.

- Enumeration 클래스를 이용하여 전송된 모든 요청 파라미터 값을 받습니다.

- StringBuffer 클래스를 이용하여 전송된 요청 파라미터 이름과 값을 저장하여 출력합니다.

3. 웹 브라우저에 http://localhost:8080/Exercise/ch06/form02.jsp를 입력하여 실행결과를 확인합니다.


<코드>

1. form02.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- 3행,6행은 부트스트랩 적용 과정에서 디폴트로 파일 생성시 기본 적용된 태그입니다. -->
<title>Form Processing</title>
</head>
<body>
    <!--책의 결과 화면URL에 입력 데이터정보가 없으므로 post방식임  -->
    <form action="form02_process.jsp" method="post">
        이름: <input type="text" name="name">
        <p> 주소: <input type="text" name="address">
        <p> 이메일: <input type="text" name="email">
        <p> 전송:<input type="submit" value="전송">
    </form>
</body>
</html>
cs


2. form02_process.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
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Form Processing</title>
</head>
<body>
    <%
        request.setCharacterEncoding("utf-8");
        Enumeration en=request.getParameterNames();
        
        Enumeration em=request.getParameterNames();
        while(em.hasMoreElements())
        {
            String name=(String)em.nextElement();
            String pValue=request.getParameter(name);
            out.println(name+" : "+pValue + "<br>");
        }
        
    %>
</body>
</html>
cs


06. form 태그를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.

   


1. form03.jsp 파일을 생성합니다.

- input 태그 내에 checkbox 유형을 이용하여 오렌지, 사과 ,바나나 항목을 작성합니다.

- form 태그의 action 속성 값은 form03_process.jsp로 작성합니다.

2. form03_process.jsp 파일을 생성합니다.

- request 내장 객체의 getParameterValues() 메소드를 이용하여 요청 파라미터 값을 전달받아 출력합니다.

3. 웹 브라우저에 http://localhost:8080/Exercise/ch06/form03.jsp를 입력하여 실행결과를 확인합니다.


<코드>

1. form03.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- 3행,6행은 부트스트랩 적용 과정에서 디폴트로 파일 생성시 기본 적용된 태그입니다. -->
<title>Form Processing</title>
</head>
<body>
    <!--책의 결과 화면URL에 입력 데이터정보가 없으므로 post방식임  -->
    <form action="form03_process.jsp" method="post">
        오렌지<input type="checkbox" name="name" value="오렌지">
        사과<input type="checkbox" name="name" value="사과">
        바나나<input type="checkbox" name="name" value="바나나">
        <input type="submit" value="전송">
    </form>
</body>
</html>
cs


2. form03_process.jsp

<b>~</b> 태그를 사용하여 "선택한 과일" 문구를 굵게 표현했습니다.

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
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Form Processing</title>
</head>
<body>
<b>선택한 과일</b><p>
    <%
        request.setCharacterEncoding("utf-8");
        String []fruit=request.getParameterValues("name");
        if(fruit!=null)
        {
            for(int i=0;i<fruit.length;i++)
            {
                out.println(" "+fruit[i]);
            }
        }
    %>
 
    
</body>
</html>
cs

07. 다음 조건에 맞게 도서 웹 쇼핑몰을 위한 웹 애플리케이션을 만들고 실행 결과를 확인하시오.

         


1. 생성된 BookMarket 프로젝트를 사용합니다.

2. WebContent 폴더에 상품 정보 등록 페이지 addBook.jsp 파일을 생성합니다.

- 위의 그림과 같이 입력 항목을 작성합니다.

- 신규 도서의 등록을 처리하는 processAddBook.jsp 파일을 생성합니다.

3. src 폴더의 BookRepository 클래스에 신규 도서를 저장하는 addBook() 메소드를 작성합니다.

4. 자바빈즈를 대신하여 새로 등록된 상품 목록을 가져오도록 상품 목록 페이지 products.jsp 파일을 수정합니다.

5. 자바빈즈를 대신하여 새로 등록된 상품 상세 정보를 가져오도록 상품 상세 정보 페이지 product.jsp 파일을 수정합니다.

6. 웹 브라우저에 http://localhost:8080/BookMarket/addBook.jsp를 입력하여 실행결과를 확인합니다.


<코드>

각 챕터의 쇼핑몰 프로젝트의 코드를 이용해서 내용을 추가하거나 수정한 부분이있는 jsp파일만 올렸습니다.

addBook.jsp 파일로 실행해야 상품등록 페이지가 출력됩니다.

1. addBook.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="dto.Book" %>

<jsp:useBean id="productDAO" class="dao.BookRepository" scope="session"/>
<html>
<head>
<link rel="stylesheet"
	href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<title>도서 등록</title>
</head>
<body>
	<jsp:include page="menu.jsp"/>
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-3">도서 등록</h1>
		</div>
	</div>
	<div class="container">
		<form name="newProduct" action="./processAddBook.jsp"class="form-horizontal" method="post">
			<div class="form-group row">
				<label class="col-sm-2">도서 코드</label>
				<div class="col-sm-3">
					<input type="text" name="bookId" class="form-control">
				</div>
			</div>
		<div class="form-group row">
				<label class="col-sm-2">도서명</label>
				<div class="col-sm-3">
					<input type="text" name="name" class="form-control">
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">가격</label>
				<div class="col-sm-3">
					<input type="text" name="unitPrice" class="form-control">
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">저자</label>
				<div class="col-sm-3">
					<input type="text" name="author" class="form-control">
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">출판사</label>
				<div class="col-sm-3">
					<input type="text" name="publisher" class="form-control">
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">출판일</label>
				<div class="col-sm-3">
					<input type="text" name="releaseDate" class="form-control">
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">총페이지 수</label>
				<div class="col-sm-3">
					<input type="text" name="totalPages" class="form-control">
				</div>
			</div>
	
			<div class="form-group row">
				<label class="col-sm-2">상세 정보</label>
				<div class="col-sm-5">
					<textarea name="description" cols="50" rows="2" class="form-control"></textarea>
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">분류</label>
				<div class="col-sm-3">
					<input type="text" name="category" class="form-control">
				</div>
			</div>
				<div class="form-group row">
				<label class="col-sm-2">재고 수</label>
				<div class="col-sm-3">
					<input type="text" name="unitsInStock" class="form-control">
				</div>
			</div>
				<div class="form-group row">
				<label class="col-sm-2">상태</label>
				<div class="col-sm-5">
					<input type="radio" name="condition" value="New ">신규제품
					<input type="radio" name="condition" value="Old"> 중고 제품
					<input type="radio" name="condition" value="Refurbished"> 재생 제품
 				</div>
			</div>
			<div class="form-group row">
				<div class="col-sm-offset-2 col-sm-10">
					<input type="submit" class="btn btn-primary" value="등록">
				</div>
			</div>
		</form>
	</div>
	<jsp:include page="footer.jsp"/>
</body>
</html>

2. BookRepository.jsp

package dao;
import java.util.ArrayList;
import dto.Book;
public class BookRepository {
	ArrayList<Book>listOfBooks=new ArrayList<Book>();
	private static BookRepository instance= new BookRepository();
	public static BookRepository getInstance() {
		return instance;
	}
	public BookRepository(){
		
		Book book1=new Book("Num1","HTML5+CSS",15000);
		book1.setDescription("워드나 PPT문서를 만들수 있나요? 그러면 문제 없습니다. 지금 바로 웹페이지에 도전하세요.");
		book1.setCategory("Hello Coding");
		book1.setPublisher("한빛미디어");
		book1.setAuthor("황재호");
		book1.setTotalPages(268);
		book1.setUnitsInStock(1500);
		book1.setReleaseDate("2018/03/07");
		
		Book book2=new Book("Num2","쉽게 배우는 자바 프로그래밍",27000);
		book2.setDescription("객체 지향의 핵심과 자바의 현대적 기능을 다루면서 초보자가 쉽게 학습할 수 있습니다.");
		book2.setCategory("IT모바일");
		book2.setPublisher("한빛아카데미");
		book2.setAuthor("우종중");
		book2.setTotalPages(308);
		book2.setUnitsInStock(2000);
		book2.setReleaseDate("2016/09/01");
		
		Book book3=new Book("Num3","스프링4 입문",27000);
		book3.setDescription("스프링은 단순히 사용 방법만 익히는것보다 아키텍쳐를 이해하는게 중요합니다!");
		book3.setCategory("IT모바일");
		book3.setPublisher("한빛미디어");
		book3.setAuthor("하세가와 유이치,오오노 와타루,토키 코헤이(권은철,전민수)");
		book3.setTotalPages(189);
		book3.setUnitsInStock(3000);
		book3.setReleaseDate("2019/05/03");
		listOfBooks.add(book1);
		listOfBooks.add(book2);
		listOfBooks.add(book3);
	}
	public ArrayList<Book> getAllProducts(){
		return listOfBooks;
	}
	public void addProduct(Book book)
	{
		listOfBooks.add(book);
	}
	public Book getBookById(String bookId)
	{
		Book bookByid=null;
		
		for(int i=0;i<listOfBooks.size();i++)
		{
			Book book=listOfBooks.get(i);
			if(book!=null&&book.getBookId()!=null&&book.getBookId().equals(bookId))
			{
				bookByid=book;
				break;
			}
		}
		return bookByid;
	}
}
3. processAddBook.jsp
<%@page import="java.util.concurrent.Flow.Publisher"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="dto.Book"%>
<%@ page import="dao.BookRepository"%>

<%
	request.setCharacterEncoding("utf-8");
	
	String bookId=request.getParameter("BookId");
	String name=request.getParameter("name");
	String unitPrice=request.getParameter("unitPrice");
	String author=request.getParameter("author");
	String publisher=request.getParameter("publisher");
	String releaseDate=request.getParameter("releaseDate");
	String totalPages=request.getParameter("totalPages");
	String description=request.getParameter("description");
	String category=request.getParameter("category");
	String unitsInStock=request.getParameter("unitsInStock");
	String condition=request.getParameter("condition");
	
	Integer price;
	
	if(unitPrice.isEmpty())
		price=0;
	else price=Integer.valueOf(unitPrice);
	
	long stock;
	if(unitsInStock.isEmpty())
		stock=0;
	else stock=Long.valueOf(unitsInStock);
	
	long pages;
	if(unitsInStock.isEmpty())
		pages=0;
	else pages=Long.valueOf(totalPages);
	
	
	BookRepository dao=BookRepository.getInstance();
	
	Book newProduct=new Book();
	newProduct.setBookId(bookId);
	newProduct.setName(name);
	newProduct.setUnitPrice(price);
	newProduct.setAuthor(author);
	newProduct.setPublisher(publisher);
	newProduct.setReleaseDate(releaseDate);
	newProduct.setTotalPages(pages);
	newProduct.setDescription(description);
	newProduct.setCategory(category);
	newProduct.setUnitsInStock(stock);
	newProduct.setCondition(condition);
	dao.addProduct(newProduct);
	response.sendRedirect("products.jsp");
	
%>

4. products.jsp

<%@page import="dao.BookRepository"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="dto.Book" %>
<jsp:useBean id="BookDAO" class="dao.BookRepository" scope="session"/>
<html>
<head>
<link rel="stylesheet"
	href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<title>Welcome</title>
</head>	
<body>

<nav class="navbar navbar-expand navbar-dark bg-dark">
	<div class="container">
		<div class="navbar-header">	
			<a class="navbar-brand" href="./welcome.jsp">Home</a>
		</div>
	</div>
</nav>

<%! String greeting="도서 목록";%>
<div class="jumbotron">
	<div class="container">
		<h1 class="display-3">
		<%=greeting %>
		</h1>
	</div>
</div>
<%
	BookRepository dao = BookRepository.getInstance();
	ArrayList<Book> listOfBooks = dao.getAllProducts();
%>
<div class="container">
		<div class="col" align="L">
			<%for(int i=0;i<listOfBooks.size();i++){
				Book book=listOfBooks.get(i);
			%>
			<div class="col-lg">
				<h4>[<%=book.getCategory() %>] <%=book.getName() %></h4><p>
				<p><%=book.getDescription()%>
				 <a href="./product.jsp?id=<%=book.getBookId() %>"
				class="btn btn-secondary rold="button">상세 정보 &raquo</a>
				<p><%=book.getAuthor() %>|<%=book.getPublisher() %>|<%=book.getUnitPrice() %>원
			</div>
			<hr>
			<%} %>			
		</div> 
<jsp:include page="footer.jsp"/>
</body>
</html>

5. product.jsp

<%@page import="dao.BookRepository"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="dto.Book" %>
<jsp:useBean id="productDAO" class="dao.BookRepository" scope="session"/>
<html>
<head>
<link rel="stylesheet"
	href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<title>상품 상세 정보</title>
</head>
<body>
	<jsp:include page="menu.jsp"/>
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-3">상품 정보</h1>
		</div>
	</div>
	<%
		String id=request.getParameter("id");
		BookRepository dao=BookRepository.getInstance();
		Book book=dao.getBookById(id);
	%>
	<div class="container">
		<div class="row">
			<div class="col-md-6">
				<h3>[<%=book.getCategory()%>] <%=book.getName()%></h3>
				<p><%=book.getDescription()%>
				<p><b>도서 코드:</b><span class="badge badge-danger">
				
				<%=book.getBookId() %></span>
				<p><b>출판사</b> : <%=book.getPublisher()%>
				<p><b>저자</b> : <%=book.getAuthor() %>
				<p><b>재고수</b> : <%=book.getUnitsInStock() %>
				<p><b>총 페이지수</b> : <%=book.getTotalPages() %>
				<p><b>출판일</b> : <%=book.getReleaseDate() %>
				<h4><%=book.getUnitPrice()%>원</h4>
				<p> <a href="#" class="btn btn-info"> 도서 주문&raquo</a>
				 <a href="./products.jsp" class="btn btn-secondary">도서 목록 &raquo</a>
			</div>
						
		</div> 
		<hr>
	</div>
	<jsp:include page="footer.jsp"/>
</body>
</html>
</body>
</html>




[6장 연습문제]


01. 폼 페이지에서 입력된 데이터를 전달하는 요청 파라미터 값을 JSP 페이지로 가져오는 내장 객체는 무엇인지, 그리고 관련된 메소드에 대해 간단히 설명하시오.

1. request 내장 객체

2. 자주 사용되는 메소드: getParameter(String name)

-> 요청 파라미터 이름이 name인 값을 전달받고, 요청 파라미터 값이 없으면 null을 반환합니다.


02. 서버에서 웹 브라우저에 다른 페이지로 강제 이동하도록 명령하는 내장 객체와 관련된 메소드는 무엇인가?


1.response 내장 객체

2. 메소드: sendRedirect(String url)

-> 설정한 URL 페이지로 강제 이동합니다.


03. 스크립트 태그의 표현문과 같이 데이터를 출력하는 내장 객체는 무엇인가?


out 내장 객체


04. request 내장 객체를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.


1. request.jsp 파일을 생성합니다.

- input 태그내에 text 유형을 이용하여 아이디, 비밀번호, 항목을 작성합니다.

- form 태그의 action 속성 값은 request_process.jsp로, method 속성 값은 get으로 작성합니다.

2. request_process.jsp 파일을 생성합니다.

- request 내장 객체의 getQueryString() 메소드를 이용하여 전송된 요청 파라미터와 값을 출력합니다.

3. 웹 브라우저에 http://localhost:8080/Exercise/ch05/request.jsp를 입력하여 실행 결과를 확인합니다.


<코드>

1. request.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Implicit Objects</title>
</head>
<body>
    <form action="request_process.jsp" method="get">
        <p> 아이디: <input type="text" name="id">
        <p> 비밀번호: <input type="text" name="password">
        <p> <input type="submit" value="전송">
    </form>
</body>
</html>
cs


2. request_process.jsp

getQueryString() 메소드를 이용하여 웹 브라우저 주소의 "?" 이후의 문자열을 출력합니다.

1
2
3
4
5
6
7
8
9
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Implicit Objects</title>
</head>
<body>
    전송된 요청 파라미터:<%=request.getQueryString() %>
</body>
</html>
cs


05. response내장 객체를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.

     

1. response.jsp 파일을 생성합니다.

- response 내장 객체의 setHeader() 메소드를 이용하여 5초마다 페이지를 갱신하도록 작성합니다.

- java.util.Calendar 클래스를 이용하여 현재 시간을 출력하도록 작성합니다.

- <Google 홈페이지로 이동하기>를 클릭하면 response_data.jsp 파일을 연결하도록 작성합니다.

2. response_data.jsp 파일을 생성합니다.

response 내장 객체의 sendRedirect() 메소드를 이용하여 구글 홈페이지로 이동하도록 작성합니다.

3. 웹 브라우저에 http://localhost:8080/Exercise/ch05/response.jsp를 입력하여 실행 결과를 확인합니다.


<코드>

1. response.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Implicit Objects</title>
</head>
<body>
<p> 현재 시간은 <%=java.util.Calendar.getInstance().getTime()%>
 
    <%
        response.setIntHeader("Refresh",5);
    %>
<p> <a href="./response_data.jsp"> Google 홈페이지로 이동하기</a>
</body>
</html>
cs


2. response_data.jsp

1
2
3
4
5
6
7
8
9
10
11
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Implicit Objects</title>
</head>
<body>
    <%
        response.sendRedirect("http://www.google.com");
    %>
</body>
</html>
cs


06. 다음 조건에 맞게 도서 웹 쇼핑몰을 위한 웹 애플리케이션을 만들고 실행 결과를 확인하시오.


1. 생성된 BookMarket 프로젝트를 사용합니다.

2. src폴더 내의 BookRepository 클래스에 도서 아이디와 일치하는 도서를 가져오는 getBookById()메소드를 작성합니다.

3. products.jsp 파일에 도서 아이디에 대한 도서 상세 정보 페이지가 연결되도록 <상세정보> 버튼을 작성합니다. 

4. 도서 상세 정보 페이지 product.jsp 파일을 생성합니다.

- request 내장 객체를 이용하여 도서 아이디를 전달받아 자바빈즈 BookRepository에서 도서 상세 정보를 얻어옵니다.

- 자바빈즈 BookRepository를 이용하여 도서 상세 정보를 출력합니다.

5. 웹 브라우저에 http://localhost:8080/BookMarket/books.jsp를 입력하고 해당 페이지에서 <상세정보>를 클릭하며 결과를 확인합니다. 


<코드 설명 전에>

*구현을 위해 4장연습문제에서의 몇 가지 사항들을 수정 및 추가 했습니다.


1. home화면 모듈화(menu.jsp, footer.jsp)

(home 버튼을 누르면 home화면이 출력되어야 합니다.)

2. BookRepository.jsp의 기본 세팅 값 중 재고수, 총 페이지수, 총판일 값 데이터 각각 추가

3. 상품 상세 정보를 가져오는 메소드 추가(BookRepository.jsp)

4. 도서 목록 페이지(products.jsp)에 책 설명서 옆에 "상세정보" 버튼 만들기

5. 제품 상세 정보 페이지(product.jsp) 만들기

6.request내장객체로 사용자가 요청한 도서id를 전달받아 자바빈즈BookRepository에서 도서정보를 얻어오는 코드작성(product.jsp)

7. 버튼 중 ">>" 특수 문자 생성 : "&raquo" 작성

ex) "상세 정보 >>" 버튼 생성

1
2
 <a href="./product.jsp?id=<%=book.getBookId() %>"
                class="btn btn-secondary rold="button">상세 정보 &raquo</a>
cs

<실행 화면>
1. 최초 실행 화면(products.jsp)



2. home 버튼 클릭 시 
3. 각 도서 목록의 상세 정보 페이지


4. 상세 도서 정보 페이지에서 "도서 주문" 버튼 클릭 시
-> 변화 없음(아직 구현 X)

5. 상세 도서 정보 페이지에서 "도서목록" 버튼 클릭 시
-> 최초 실행 화면

<코드>
수정, 추가한 사항이 많아서 모든 소스코드를 올렸습니다.

1. dao 패키지- BookRepository.java
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package dao;
import java.util.ArrayList;
import dto.Book;
public class BookRepository {
    ArrayList<Book>listOfBooks=new ArrayList<Book>();
    
    public BookRepository(){
        
        Book book1=new Book("Num1","HTML5+CSS",15000);
        book1.setDescription("워드나 PPT문서를 만들수 있나요? 그러면 문제 없습니다. 지금 바로 웹페이지에 도전하세요.");
        book1.setCategory("Hello Coding");
        book1.setPublisher("한빛미디어");
        book1.setAuthor("황재호");
        book1.setTotalPages(268);
        book1.setUnitsInStock(1500);
        book1.setReleaseDate("2018/03/07");
        
        Book book2=new Book("Num2","쉽게 배우는 자바 프로그래밍",27000);
        book2.setDescription("객체 지향의 핵심과 자바의 현대적 기능을 다루면서 초보자가 쉽게 학습할 수 있습니다.");
        book2.setCategory("IT모바일");
        book2.setPublisher("한빛아카데미");
        book2.setAuthor("우종중");
        book2.setTotalPages(308);
        book2.setUnitsInStock(2000);
        book2.setReleaseDate("2016/09/01");
        
        Book book3=new Book("Num3","스프링4 입문",27000);
        book3.setDescription("스프링은 단순히 사용 방법만 익히는것보다 아키텍쳐를 이해하는게 중요합니다!");
        book3.setCategory("IT모바일");
        book3.setPublisher("한빛미디어");
        book3.setAuthor("하세가와 유이치,오오노 와타루,토키 코헤이(권은철,전민수)");
        book3.setTotalPages(189);
        book3.setUnitsInStock(3000);
        book3.setReleaseDate("2019/05/03");
        listOfBooks.add(book1);
        listOfBooks.add(book2);
        listOfBooks.add(book3);
    }
    public ArrayList<Book> getAllProducts(){
        return listOfBooks;
    }
    public Book getBookById(String bookId)
    {
        Book bookByid=null;
        
        for(int i=0;i<listOfBooks.size();i++)
        {
            Book book=listOfBooks.get(i);
            if(book!=null&&book.getBookId()!=null&&book.getBookId().equals(bookId))
            {
                bookByid=book;
                break;
            }
        }
        return bookByid;
    }
}
 
cs

2. dto 패키지- Book.java
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package dto;
 
public class Book implements java.io.Serializable{
    private String bookId;//도서 id
    private String name; //도서이름
    private Integer unitPrice;// 가격
    private String description;//설명
    private String author;
    private String publisher;//출판사
    private String category;//분류
    private long unitsInStock;//재고 수
    private long totalPages;//페이지 수 
    private String releaseDate;//출판일(월/년)
    private String condition; //신상품 중고품 재생품 
    public Book() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    public Book(String booktId, String name, Integer unitPrice) {
        this.bookId = booktId;
        this.name = name;
        this.unitPrice = unitPrice;
    }
 
    public String getBookId() {
        return bookId;
    }
    public void setBookId(String booktId) {
        this.bookId = booktId;
    }
    
    public String getAuthor() {
        return author;
    }
 
    public void setAuthor(String author) {
        this.author = author;
    }
 
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getUnitPrice() {
        return unitPrice;
    }
    public void setUnitPrice(Integer unitPrice) {
        this.unitPrice = unitPrice;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getPublisher() {
        return publisher;
    }
    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }
    public String getCategory() {
        return category;
    }
    public void setCategory(String category) {
        this.category = category;
    }
    public long getUnitsInStock() {
        return unitsInStock;
    }
    public void setUnitsInStock(long unitsInStock) {
        this.unitsInStock = unitsInStock;
    }
    public long getTotalPages() {
        return totalPages;
    }
    public void setTotalPages(long totalPages) {
        this.totalPages = totalPages;
    }
    public String getReleaseDate() {
        return releaseDate;
    }
    public void setReleaseDate(String releaseDate) {
        this.releaseDate = releaseDate;
    }
    public String getCondition() {
        return condition;
    }
    public void setCondition(String condition) {
        this.condition = condition;
    }
    
}
 
cs

3. menu.jsp
1
2
3
4
5
6
7
<nav class="navbar navbar-expand navbar-dark bg-dark">
    <div class="container">
        <div class="navbar-header">    
            <a class="navbar-brand" href="./welcome.jsp">Home</a>
        </div>
    </div>
</nav>
cs

4. footer.jsp 
1
2
3
<footer class="container">
    <p>&copy; BookMarket</p>
</footer>
cs

5. welcome.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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
     <%@ page import="java.util.Date" %>
    
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Welcome</title>
</head>    
<body>
 
<%@ include file="menu.jsp" %>
<%! String greeting="웹 쇼핑몰에 오신 것을 환영합니다.";
String tagline="Welcome to Web Market!";
%>
<%-- 대형 전광판을 의미함 jumbtron --%>
<div class="jumbotron">
    <div class="container">
        <h1 class="display-3">
        <%=greeting %>
        </h1>
    </div>
</div>
<%--센터에  출력되는    --%>
<div class="container">
    <div class="text-center">
        <h3>
            <%=tagline %>
        </h3>
        <%
        response.setIntHeader("Refresh", 5);
    Date daynew java.util.Date();
    String am_pm;
    int hour=day.getHours();
    int min=day.getMinutes();
    int second=day.getSeconds();
    if(hour/12==0)
        am_pm="AM";
    else am_pm="PM";
    hour=hour-12;
    String CT=hour+":"+min+":"+second+" "+am_pm;
    out.println("현재 접속 시각:" +CT+"\n");
%>
    </div>
    <hr>
</div>
<%@ include file="footer.jsp" %>
</body>
</html>
cs

6. products.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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="dto.Book" %>
<jsp:useBean id="BookDAO" class="dao.BookRepository" scope="session"/>
<html>
<head>
<link rel="stylesheet"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<title>Welcome</title>
</head>    
<body>
 
<nav class="navbar navbar-expand navbar-dark bg-dark">
    <div class="container">
        <div class="navbar-header">    
            <a class="navbar-brand" href="./welcome.jsp">Home</a>
        </div>
    </div>
</nav>
 
<%! String greeting="도서 목록";%>
<div class="jumbotron">
    <div class="container">
        <h1 class="display-3">
        <%=greeting %>
        </h1>
    </div>
</div>
<%ArrayList<Book> listOfBooks=BookDAO.getAllProducts(); %>
<div class="container">
        <div class="col" align="L">
            <%for(int i=0;i<listOfBooks.size();i++){
                Book book=listOfBooks.get(i);
            %>
            <div class="col-lg">
                <h4>[<%=book.getCategory() %><%=book.getName() %></h4><p>
                <p><%=book.getDescription()%>
                 <a href="./product.jsp?id=<%=book.getBookId() %>"
                class="btn btn-secondary rold="button">상세 정보 &raquo</a>
                <p><%=book.getAuthor() %>|<%=book.getPublisher() %>|<%=book.getUnitPrice() %>원
            </div>
            <hr>
            <%} %>            
        </div> 
<jsp:include page="footer.jsp"/>
</body>
</html>
cs

7. product.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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="dto.Book" %>
<jsp:useBean id="productDAO" class="dao.BookRepository" scope="session"/>
<html>
<head>
<link rel="stylesheet"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<title>상품 상세 정보</title>
</head>
<body>
    <jsp:include page="menu.jsp"/>
    <div class="jumbotron">
        <div class="container">
            <h1 class="display-3">상품 정보</h1>
        </div>
    </div>
    <%
        String id=request.getParameter("id");
    Book book=productDAO.getBookById(id);
    %>
    <div class="container">
        <div class="row">
            <div class="col-md-6">
                <h3><%=book.getName()%></h3>
                <p><%=book.getDescription()%>
                <p><b>도서 코드:</b><span class="badge badge-danger">
                
                <%=book.getBookId() %></span>
                <p><b>출판사</b> : <%=book.getPublisher()%>
                <p><b>저자</b> : <%=book.getAuthor() %>
                <p><b>재고수</b> : <%=book.getUnitsInStock() %>
                <p><b>총 페이지수</b> : <%=book.getTotalPages() %>
                <p><b>출판일</b> : <%=book.getReleaseDate() %>
                <h4><%=book.getUnitPrice()%></h4>
                <p> <a href="#" class="btn btn-info"> 도서 주문&raquo</a>
                 <a href="./products.jsp" class="btn btn-secondary">도서 목록 &raquo</a>
            </div>
                        
        </div> 
        <hr>
    </div>
    <jsp:include page="footer.jsp"/>
</body>
</html>
</body>
</html>
cs







[4장 연습문제]


01. forward와 include 액션 태그의 차이점을 간단히 설명하시오.


forward: 외부파일이 실행되면 전에 출력버퍼의 저장 내용이 모두 삭제되고 forward태그로 설정된 페이지로 제어가 넘어간다.

include: 외부 파일이 실행된 후 원래의 JSP페이지로 제어를 반환함. 그리고 그 실행내용이 원래의 JSP페이지의 출력 버퍼에 저장되어 출력된다.


02. include 액션 태그와 include 디렉티브 태그의 차이점을 설명하시오.


include 액션 태그

- 화면 레이아웃의 일부분을 모듈화할 때 주로 사용한다.

- 동적 페이지에 사용한다.

- request 기본 내장 객체나 param 액션 태그를 이용하여 파라미터를 전달한다.


include 디렉티브 태그

- 다수의 JSP웹 페이지에서 공통으로 사용하는 코드나 저작권 같은 문장을 포함하는 경우 사용한다.

- 정적 페이지에 사용한다.

- 페이지 내의 변수를 선언한 후 변수에 값을 저장한다.


03. 자바빈즈를 작성하는 기법을 예를들어 설명하시오.

-> 06번


04. forward 액션 태그를 이용하여 다음 조건에 맞게 JSP애플리케이션을 만들고 실행 결과를 확인하시오.


1. forward.jsp파일을 생성합니다.

- <h4> 태그에 '구구단 출력하기'를 작성합니다.

- forward 액션 태그로 구구단을 출력하는 forward_data.jsp 파일로 이동하도록 작성합니다.

- param 액션 태그로 숫자 5를 출력하는 forward_data.jsp 파일에 전달하도록 작성합니다.

2. forward_data.jsp 파일을 생성합니다.

- 전달받은 숫자 5의 구구단을 출력하도록 작성합니다.

3. 웹 브라우저에 http://localhost:8080/Exercise/ch04/forward.jsp를 입력하여 실행 결과를 확인합니다.


코드

1. forward.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
<head>
<title>Action Tag</title>
</head>
<body>
    <h4>구구단 출력하기</h4>
    <!--위 문장이 나오지 않아야 정상 -->
    
    <jsp:forward page="forward_data.jsp">
        <jsp:param name="num" value="5"/>
        </jsp:forward>
</body>
</html>
cs

2. forward_data.jsp

파라미터를 넘길 때 정수형으로 넘겨주면 오류가 떠서 string으로 받고 형변환하여 구현했습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<
    String number=request.getParameter("num");    
    int num = Integer.parseInt(number);
    for(int i=1;i<=9;i++)
    {
        out.println(num+"*"+i+"="+num*i+"<br>");
    }
%>
    
</body>
</html>
cs

05. include 액션 태그를 이용하여 다음 조건에 맞게 JSP애플리케이션을 만들고 실행 결과를 확인하시오.


1. include.jsp파일을 생성합니다.

- <h4> 태그에 '구구단 출력하기'를 작성합니다.

- include 액션 태그로 구구단을 출력하는 include_data.jsp 파일로 이동하도록 작성합니다.

- param 액션 태그로 숫자 5를 출력하는 include_data.jsp 파일에 전달하도록 작성합니다.

2. include_data.jsp 파일을 생성합니다.

- 전달받은 숫자 5의 구구단을 출력하도록 작성합니다.

3. 웹 브라우저에 http://localhost:8080/Exercise/ch04/include.jsp를 입력하여 실행 결과를 확인합니다.


코드

1. include.jsp

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
    <h4>구구단 출력하기</h4>
    <jsp:include page="include_data.jsp" flush="false">
        <jsp:param name="num" value="5"/>
    </jsp:include>
</body>
</html>
cs

2. include_data.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page  contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<% 
    String number=request.getParameter("num");    
    int num = Integer.parseInt(number);
    for(int i=1;i<=9;i++)
    {
        out.println(num+"*"+i+"="+num*i+"<br>");
    }
%>
</body>
</html>
cs

06. 다음 조건에 맞게 JSP애플리케이션을 만들고 실행 결과를 확인하시오.


1. src폴더에 ch04.com.dao 패키지로 GuGuDan클래스를 생성하여 곱셈을 계산하는 process()메소드를 작성합니다.

2. useBean.jsp파일을 생성합니다.

- useBean 액션 태그에 GuGuDan 클래스를 사용하도록 작성합니다.

- <h4> 태그에 '구구단 출력하기'를 작성합니다.

- 숫자5에 대해 GuGuDan 클래스의 process() 메소드를 호출하여 구구단을 출력합니다.

- 웹 브라우저에 http://localhost:8080/Exercise/ch04/useBean.jsp를 입력하여 실행결과를 확인합니다.


코드

1. useBean.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
    <h4>구구단 출력하기</h4>
    <jsp:useBean id="func" class="ch04.com.dao.GuGuDan"/>
    <%int arr[]=func.process(5); 
        for(int i=0;i<9;i++)
        {
            out.println(5+"*"+(i+1)+"="+arr[i]+"<br>");
        }
    %>
    
    </body>
</html>
cs


2. ch04.com.dao 패키지

5을 인자로 받아서 배열에 구구단 결과값을 저장한 뒤 배열을 통 째로 반환했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
package ch04.com.dao;
 
public class GuGuDan {
    public int[] process(int n)
    {
        int arr[]=new int[9];
        for(int i=1;i<=9;i++)
            arr[i-1]=n*i;
        return arr;
    }
}
 
cs


07. 다음 조건에 맞게 도서 웹 쇼핑몰을 위한 웹 애플리케이션을 만들고 실행 결과를 확인하시오.


1. 생성된 BookMarket프로젝트를 사용합니다.

2. src 폴더에 dto 패키지를 생성하고 이 패키지에 Book 클래스를 생성합니다.

- 멤버 변수, 생성자, setter/getter() 메소드를 선언합니다.(146p참고)

3. src폴더에 dao패키지를 생성하고 이 패키지에 BookRepository 클래스를 생성합니다.

- 멤버변수 ArrayList<Book>객체 타입의 listOfBooks를 선언합니다.

- 기본 생성자를 생성하고 여기에 멤버 변수를 초기화하도록 값을 설정합니다.

- 상품 목록을 가져오는 ArrayList<Book> 객체 타입의 getAllBooks() 메소드를 작성합니다.

4. WebContent 폴더에 books.jsp 파일을 생성하고 자바빈즈 BookRepository 클래스를 이용하여 상품 목록을 출력합니다.

5. 웹 브라우저에 http://localhost:8080/BookMarket/books.jsp를 입력하여 실행결과를 확인합니다.


코드

1. dto 패키지- Book 클래스

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package dto;
 
public class Book implements java.io.Serializable{
    private String booktId;//도서 id
    private String name; //도서이름
    private Integer unitPrice;// 가격
    private String description;//설명
    private String author;
    private String publisher;//출판사
    private String category;//분류
    private long unitsInStock;//재고 수
    private long totalPages;//페이지 수 
    private String releaseDate;//출판일(월/년)
    private String condition; //신상품 중고품 재생품 
    public Book() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    public Book(String booktId, String name, Integer unitPrice) {
        this.booktId = booktId;
        this.name = name;
        this.unitPrice = unitPrice;
    }
 
    public String getBooktId() {
        return booktId;
    }
    public void setBooktId(String booktId) {
        this.booktId = booktId;
    }
    
    public String getAuthor() {
        return author;
    }
 
    public void setAuthor(String author) {
        this.author = author;
    }
 
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getUnitPrice() {
        return unitPrice;
    }
    public void setUnitPrice(Integer unitPrice) {
        this.unitPrice = unitPrice;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getPublisher() {
        return publisher;
    }
    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }
    public String getCategory() {
        return category;
    }
    public void setCategory(String category) {
        this.category = category;
    }
    public long getUnitsInStock() {
        return unitsInStock;
    }
    public void setUnitsInStock(long unitsInStock) {
        this.unitsInStock = unitsInStock;
    }
    public long getTotalPages() {
        return totalPages;
    }
    public void setTotalPages(long totalPages) {
        this.totalPages = totalPages;
    }
    public String getReleaseDate() {
        return releaseDate;
    }
    public void setReleaseDate(String releaseDate) {
        this.releaseDate = releaseDate;
    }
    public String getCondition() {
        return condition;
    }
    public void setCondition(String condition) {
        this.condition = condition;
    }
    
}
 
cs

2. dao패키지- BookRepository클래스

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 dao;
import java.util.ArrayList;
import dto.Book;
import dto.Product;
public class BookRepository {
    ArrayList<Book>listOfBooks=new ArrayList<Book>();
    
    public BookRepository(){
        
        Book book1=new Book("Num1","HTML5+CSS",15000);
        book1.setDescription("워드나 PPT문서를 만들수 있나요? 그러면 문제 없습니다. 지금 바로 웹페이지에 도전하세요.");
        book1.setCategory("Hello Coding");
        book1.setPublisher("한빛미디어");
        book1.setAuthor("황재호");
        
        Book book2=new Book("Num2","쉽게 배우는 자바 프로그래밍",27000);
        book2.setDescription("객체 지향의 핵심과 자바의 현대적 기능을 다루면서 초보자가 쉽게 학습할 수 있습니다.");
        book2.setCategory("IT모바일");
        book2.setPublisher("한빛아카데미");
        book2.setAuthor("우종중");
        
        Book book3=new Book("Num3","스프링4 입문",27000);
        book3.setDescription("스프링은 단순히 사용 방법만 익히는것보다 아키텍쳐를 이해하는게 중요합니다!");
        book3.setCategory("IT모바일");
        book3.setPublisher("한빛미디어");
        book3.setAuthor("하세가와 유이치,오오노 와타루,토키 코헤이(권은철,전민수)");
        
        listOfBooks.add(book1);
        listOfBooks.add(book2);
        listOfBooks.add(book3);
    }
    public ArrayList<Book> getAllProducts(){
        return listOfBooks;
    }
}
 
cs


3. welcome.jsp

4장 쇼핑몰 프로젝트의 코드를 응용하여 다음과 같이 작성할 수 있습니다.

반복문 대괄호 위치, 개행처리, 책 목록 간 간격의 "------"표시, 레이아웃 사이즈 조절 등 많은 문법 표현을 알 수 있었습니다. 

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
37
38
39
40
41
42
43
44
45
46
47
48
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="dto.Book" %>
<jsp:useBean id="BookDAO" class="dao.BookRepository" scope="session"/>
<html>
<head>
<link rel="stylesheet"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<title>Welcome</title>
</head>    
<body>
 
<nav class="navbar navbar-expand navbar-dark bg-dark">
    <div class="container">
        <div class="navbar-header">    
            <a class="navbar-brand" href="./welcome.jsp">Home</a>
        </div>
    </div>
</nav>
 
<%! String greeting="도서 목록";%>
<div class="jumbotron">
    <div class="container">
        <h1 class="display-3">
        <%=greeting %>
        </h1>
    </div>
</div>
<%ArrayList<Book> listOfBooks=BookDAO.getAllProducts(); %>
<div class="container">
        <div class="col" align="left">
            <%for(int i=0;i<listOfBooks.size();i++){
                Book book=listOfBooks.get(i);
            %>
            <div class="col-lg">
                <h4>[<%=book.getCategory() %>]</h4><p>
                <p><%=book.getDescription()%>
                <p><%=book.getAuthor() %>|<%=book.getPublisher() %>|<%=book.getUnitPrice() %>
            </div>
            <hr>
            <%} %>            
        </div> 
        
<footer class="container">
    <p>&copy; BookMarket</p>
</footer>
</body>
</html>
cs





 





[3장 연습문제]


01. 디렉티브 태그의 세 가지 유형에 대해 간단히 설명하시오.


1. page: JSP 페이지에 대한 정보(콘텐츠 유형, 사용할 자바 클래스, 오류 페이지 설정 등등)를 설정한다. 형식) <%@ page%>

2. include: 페이지의 특정영역에 다른문서를 포함하여 코드를 줄이고 재사용해 유지보수가 좋다. 형식) <%@ include%>

3. taglib: JSP 페이지에서 사용할 태그 라이브러리를 설정한다. 형식) <%@ taglib%>


02. JSP 페이지가 사용할 자바 클래스를 설정하기 위한 page 디렉티브 태그의 속성은 무엇인가?


-> import 속성

ex) <%@ page import="java.util.Date"%>


03. JSP 페이지의 특정 영역에 외부 파일의 내용을 포함하는 디렉티브 태그는 무엇인가?


-> include 태그

ex) 머리글, 바닥글 등에 include 태그를 이용하여 각각 작성해둔 외부 파일로 불러와서 사용한다.


04. page 디렉티브 태그를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.

1. page.jsp파일을 생성합니다.

- page 디렉티브 태그에 java.util.Date, java.lang.Math 클래스를 이용하여 현재 날짜와 5의 제곱을 출력합니다.

2. 웹 브라우저에 http://localhost:8080/Exercise/ch03/page.jsp를 입력하여 실행결과를 확인합니다.


코드

2개의 클래스를 import하여 10,11행처럼 작성하면됩니다. 두 문장 간 개행 처리는 <p></p> 또는 <br>을 사용합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.lang.Math" %>
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
    <% Date day=new java.util.Date();%>
    현재 날짜:<%=day %><br>
    5의 제곱:<%=Math.pow(5,2) %>
</body>
</html>
cs


05. include디렉티브태그를 이용하여 다음 조건에 맞게 JSP애플리케이션을 만들고 실행결과를 확인하시오.


1. header.jsp파일을 생성합니다.

- <h4> 태그를 이용하여 'Hello, Java Server Pages.'를 선언합니다.

2. include.jsp 파일을 생성합니다.

- include 디렉티브 태그를 이용하여 외부 파일 header.jsp의 내용을 포함합니다.

- java.util.Calendar 클래스를 이용하여 현재 시간을 출력합니다.(간단하게 Date클래스를 사용했습니다.)

3. 웹 브라우저에 http://localhost:8080/Exercise/ch03/include.jsp를 입력하여 실행결과를 확인합니다.


코드

1. header.jsp

1
2
3
<h4>
    Hello, Java Server Pages.
</h4>
cs

2. include.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<html>
<head>
<title>Directives Tag</title>
</head>
<body>
    <%@ include file="header.jsp" %>
    <% Date day=new java.util.Date();%>
    Current Time: <%=day %>
</body>
</html>
cs

06. taglib 디렉티브태그를 이용하여 다음 조건에 맞게 JSP애플리케이션을 만들고 실행 결과를 확인하시오.


1. /WEB-INF/lib 폴더에 JSTL 태그 라이브러리인 JSTL-1.2.jar 파일을 추가합니다.

2. taglib.jsp파일을 생성합니다.

- taglib 디렉티브 태그에 JSTL의 Core 태그를 설정하여 0부터 10까지의 짝수를 출력합니다.

3. 웹 브라우저에 http://localhost:8080/Exercise/ch03/taglib.jsp를 입력하여 실행 결과를 확인합니다.


코드

if문을 사용하여 k중 짝수만 판별하여 출력하는 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 
<html>
<head>
<title> Directives Tag</title>
</head>
<body>
    <c:forEach var="k" begin="0" end="10" step="1">
        <c:if test="${k%2==0}">
        <c:out value="${k}"/>
        </c:if>
    </c:forEach>
</body>
</html>
 
cs


07. 다음 조건에 맞게 도서 웹 쇼핑몰을 위한 웹 애플리케이션을 만들고 실행 결과를 확인하시오.

1. 생성된 BookMarket 프로젝트를 사용합니다.

2. WebContent 폴더의 머리글에 해당하는 menu.jsp파일을 생성합니다.

3. WebContent 폴더의 바닥글에 해당하는 footer.jsp파일을 생성합니다.

4. WebContent 폴더의 welcome.jsp파일을 수정합니다.

- include 디렉티브 태그를 이용하여 머리글 menu.jsp와 바닥글 footer.jsp파일의 내용을 포함합니다.

- page 디렉티브 태그의 contentType속성을 이용하여 한글을 출력합니다.

5. 웹 브라우저에 http://localhost:8080/BookMarket/welcome.jsp를 입력하여 실행 결과를 확인합니다.


코드

1. menu.jsp(머리글)

1
2
3
4
5
6
7
<nav class="navbar navbar-expand navbar-dark bg-dark">
    <div class="container">
        <div class="navbar-header">    
            <a class="navbar-brand" href="./welcome.jsp">Home</a>
        </div>
    </div>
</nav>
cs


2. welcome.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
29
30
31
32
33
34
35
36
37
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
     <%@ page import="java.util.Date" %>
    
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Welcome</title>
</head>    
<body>
 
<%@ include file="menu.jsp" %>
<%! String greeting="도서 웹 쇼핑몰";
String tagline="Welcome to Web Market!";
%>
<%-- 대형 전광판을 의미함 jumbtron --%>
<div class="jumbotron">
    <div class="container">
        <h1 class="display-3">
        <%=greeting %>
        </h1>
    </div>
</div>
<%--센터에  출력되는    --%>
<div class="container">
    <div class="text-center">
        <h3>
            <%=tagline %>
        </h3>
 
    </div>
    <hr>
</div>
<%@ include file="footer.jsp" %>
</body>
</html>
cs


3. footer.jsp(바닥글)

1
2
3
<footer class="container">
    <p>&copy; BookMarket</p>
</footer>
cs






[2장 연습문제]


01. 스크립트 태그의 세 가지 종류에 대해 간단히 설명하시오.


1. 선언문: 자바 변수나 메소드를 정의하는데 사용한다. 표기) <%! ---%>

2. 스크립틀릿: 자바 로직 코드를 작성하는 데 사용한다. 표기) <% ---%>

3. 표현문: 변수, 계산식, 메소드 호출 결과를 문자열 형태로 출력하는데 사용한다. 표기) <%= ---%>


02. 선언문 태그와 스크립틀릿 태그의 차이점을 설명하시오.


1. 선언문 태그로 선언된 변수는 전역 변수로, 스크립틀릿 태그로 선언된 변수는 지역 변수로 사용된다.

2. 선언문 태그로 변수 뿐만 아니라 메소드를 선언할 수 있지만 스크립틀릿 태그는 변수만 선언할 수 있다.


03. 애플리케이션 실행 결과에는 보이지 않는 JSP 주석 표기법은 무엇인가?

<%--내용--%>


04. 선언문 태그를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.


1. declaration.jsp 파일을 생성합니다.

- 선언문 태그에 문자형 전역변수를 선언하여 'Hello,Java Server Pages'를 저장합니다.

- 문자형 변수 값을 반환하는 전역 메소드 getString()을 작성합니다.

- getString()메소드를 호출하여 문자형 변수 값을 출력합니다.

2. 웹 브라우저에 http://localhost:8080/JSPBook/ch02/declaration.jsp 를 입력하여 실행결과를 확인합니다.


코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html>
<head>
<title>Scripting Tag</title>
<body>
    <%! String str="Hello,Java Server Pages" ;
    
        String getString(String data){
            return data;
    }%>
    <%out.println(str) %>
    
</body>
</head>
</html>
cs



05. 스크팁틀릿 태그를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.


1. scriptlet.jsp 파일을 생성합니다.

- 스크립틀릿 태그를 이용하여 java.util.Date형 지역변수에 현재 날짜를 저장합니다.

- 현재 날짜 값을 출력합니다.

2. 웹 브라우저에 http://localhost:8080/JSPBook/ch02/scriptlet.jsp 를 입력하여 실행 결과를 확인합니다.


코드


06. 표현문 태그를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.


1. expression.jsp 파일을 생성합니다.

- 표현문 태그에 java.util.Calendar 클래스를 이용하여 현재 시간을 출력합니다.(date 클래스 써도 됩니다.)

2. 웹 브라우저에 http://localhost:8080/JSPBook/ch02/expression.jsp을 입력하여 실행결과를 확인합니다.


07. 다음 조건에 맞게 도서 웹 쇼핑몰을 위한 웹 애플리케이션을 만들고 실행 결과를 확인하시오.


1. [Dynamic Web Project]로 프로젝트 이름 BookMarket을 생성합니다.

2. WebContent 폴더에 welcome.jsp 파일을 생성합니다.

- 선언문 태그를 이용하여 'Book Market Mall'과 'Welcome to Book Market!'을 저장하는 변수를 선언합니다.

- 표현문 태그를 이용하여 설정한 변수 값 'Book Market Mall'과 'Welcome to Book Market'을 출력합니다.

3. 부트스트랩 CSS를 적용하여 위 그림과 같이 출력합니다.

4. 웹 브라우저에 http://localhost:8080/BookMarket/welcome.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
29
30
31
32
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Welcome</title>
</head>    
<body>
<nav class="navbar navbar-expand navbar-dark bg-dark">
    <div class="container">
        <a class="navbar-brand" href="./welcome.jsp">Home</a>
    </div>
</nav>
<%! String greeting="Book Market Mall";
String tagline="Welcome to Book Market!";
%>
<div class="jumbotron">
    <div class="container">
        <h1 class="display-3">
        <%=greeting %>
        </h1>
    </div>
</div>
<div class="container">
    <div class="text-center">
        <h3>
            <%=tagline %>
        </h3>
    </div>
    <hr>
</div>
 
</body>
</html>
cs


[1장 연습문제 풀이]


01. 정적 웹 페이지와 동적 웹 페이지의 차이점을 설명하시오.


->정적 웹 페이지: 컴퓨터에 저장된 텍스트 파일을 그대로 보는 것, 예)HTML언어

->동적 웹 페이지: 저장된 내용을 다른 변수로 가공 처리하여 보여주는 것 예)JSP, 자바스크립트, PHP 등


02. 웹 프로그래밍 언어 JSP의 특징을 설명하시오.


1. JSP는 서블릿의 모든 기능을 활용할 수 있다.

-> 자바 API를 사용할 수 있고 내장 객체, 표현식 언어, 사용자 정의 태그를 사용할 수 있다.


2. 유지 관리가 용이하다.

-> 서블릿과 달리 프레젠테이션 로직과 비즈니스 로직을 분리할 수 있어 관리가 쉽다.


3. 빠른 개발이 가능하다.

-> 코드 수정 시 서블릿에서는 업데이트를 하고 다시 컴파일 해야하지만 JSP는 컴파일 하고 프로젝트를 배포할 필요가 없다.


4. 코드 길이를 줄일 수 있다.

-> 액션 태그, JSTL, 다양한 태그와 표현 언어, 내장 객체 등을 사용하여 서블릿보다 코드를 줄일 수 있다.


5. 배우기 쉽다.

-> 자바 기반의 언어인 서블릿의 개발 방식이 어렵고 JSP보다 진입장벽이 높은 반면 JSP는 서블릿보다 쉽고 사용하기 편한 장점이 있다.


03. JSP 페이지 처리 과정을 설명하시오.


-> 웹 브라우저가 웹 서버에 JSP를 요청한 후 JSP컨테이너가 다음 순서로 처리한다.

JSP페이지(.jsp) -> 서블릿 프로그램(.java)으로 변환-> 서블릿 프로그램 컴파일->서블릿 클래스로 변환(.class)-> 웹 서버에 전달->브라우저에 전달


04. 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.


1. HelloJSP라는 이름의 프로젝트를 생성합니다.

2. WebContent 폴더에 다음과 같은 hello.jsp 파일을 생성합니다.

 - <h1> 태그를 이용하여 'Hello! JSP Programming'을 출력합니다.

 - 'Welcome to JSP'를 출력합니다.

3. 서버를 실행하고 웹 브라우저에 'http://localhost:8080/HelloJSP/hello.jsp'를 입력하여 실행결과를 확인합니다.


코드


05. 자기소개 페이지를 만들기 위해 다음 조건에 맞게 JSP애플리케이션을 만들고 실행 결과를 확인하시오.


1. HelloJSP라는 이름의 프로젝트를 생성합니다.

2. WebContent 폴더에 hello.jsp 파일을 생성합니다.

- <h1> 태그를 이용하여 'Self-Introduction'을 출력합니다.

- 'Name: Hong Gil Son'과 'Department: MobileMedia'를 2행으로 출력합니다.

3. 서버를 실행하고 웹 브라우저에 'http://localhost:8080/JSPBook/HelloJSP/hello2.jsp'를 입력하여 실행결과를 확인합니다.


코드

엔터키 효과를 나타내는 <br>태그를 이용해서 두줄로 표현할 수 있습니다.



06. 프로젝트 구조를 이해하기 위해 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행결과를 확인하시오.



1. HelloJSP라는 이름의 프로젝트를 생성합니다.

2. WebContent 폴더에 JSP 폴더를 만들고 다음과 같은 hello3.jsp파일을 생성합니다.

- <h1> 태그를 이용하여 'Welcome to JSP'를 출력합니다.

- 'JSP is Dynamic Web Page.'와 'JSP is Java Server Pages.'를 2행으로 출력합니다.

3. 서버를 실행하고 웹 브라우저에 http://localhost:8080/JSPBook/HelloJSP/hello3.jsp'을 입력하여 실행결과를 확인합니다.


코드 












+ Recent posts