PC

블로그 이미지

DAVID

'Programming'에 해당되는 글 109건

제목 날짜
  • 160427: 32회차1 2016.04.27
  • 160426: 31회차1 2016.04.26
  • 160425: 30회차 2016.04.25
  • 160422: 29회차 2016.04.22
  • 160421: 28회차1 2016.04.21
  • 160420: 27회차 2016.04.20
  • 160419: 26회차2 2016.04.19
  • 160418: 25회차 2016.04.18
  • 160415: 24회차 2016.04.15
  • 160414: 23회차 2016.04.14

160427: 32회차

Programming 2016. 4. 27. 10:12

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:



3-1. 발표용


read.jsp


<%@ page contentType="text/html; charset=UTF-8"%>

<%@ page import="java.util.*, img.*, utility.*"%>

<jsp:useBean id="dao" class="img.ImgDAO" />

<%

request.setCharacterEncoding("utf-8"); 

int imgno = Integer.parseInt(request.getParameter("imgno"));

List list = dao.imgRead(imgno);

ImgDTO dto = dao.read(imgno);

%>


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<style type="text/css">

* {

font-family: gulim;

font-size: 20px;

}

</style>

<link href="../css/style.css" rel="Stylesheet" type="text/css">

</head>

<!-- *********************************************** -->

<body>

<jsp:include page="/menu/top.jsp" flush="false" />

<!-- *********************************************** -->


<DIV class="title">사진 목록</DIV>


<DIV class = "content">

<TABLE class='table'>

<TR>

<TH colspan="5"><img src="./storage/<%=dto.getFilename()%>"><%=dto.getFilename() %></TH>

</TR>


<TR>

<%for(int i = 5; i < 7; i++){ %>

<%if(list.get(i)!=null){ %>

<TD><A href='./read.jsp?imgno=<%=list.get(i-5)%>'><img src="./storage/<%=list.get(i)%>" width="200px" height ="200px"><%=list.get(i)%></a></TD>

<%}

else{%>

<TD><img src="./storage/imgfornull.jpg" width="200px" height ="200px"></TD> 

<% }} %>

<TD style="border-style: solid; border-width: 3px;  border-color: #de2125;"><img src="./storage/<%=dto.getFilename()%>" width="200px" height ="200px"><%=dto.getFilename() %></TD>

<%for(int i = 8; i < 10; i++){ %>

<%if(list.get(i)!=null){ %>

<TD><A href='./read.jsp?imgno=<%=list.get(i-5)%>'><img src="./storage/<%=list.get(i)%>" width="200px" height ="200px"><%=list.get(i)%></a></TD>

<%} else {%>

<TD><img src="./storage/imgfornull.jpg" width="200px" height ="200px"></TD>

<% }}%>




</TR>

</TABLE>

</DIV>

<DIV class='bottom'>

<input type='button' value='뒤로가기' onclick="history.back()">

<input type='button' value='목록' onclick="location.href='list.jsp'">

<input type='button' value='답변' onclick="location.href='replyForm.jsp?imgno=<%=dto.getImgno()%>'">

<input type='button' value='수정' onclick="location.href='updateForm.jsp?imgno=<%=dto.getImgno()%>&oldfile=<%=dto.getFilename()%>'">

<input type='button' value='삭제' onclick="location.href='deleteForm.jsp?imgno=<%=dto.getImgno()%>&oldfile=<%=dto.getFilename()%>'">

</DIV>



<!-- *********************************************** -->

<jsp:include page="/menu/bottom.jsp" flush="false" />

</body>

<!-- *********************************************** -->

</html>






ImgDAO.java



/**

* 6.read

* 

* @param dto

* @return

*/

public ImgDTO read(int imgno) {

ImgDTO dto = null;

Connection con = DBOpen.getConnection();

PreparedStatement pstmt = null;

ResultSet rs = null;


StringBuffer sql = new StringBuffer();

sql.append(" select * from img ");

sql.append(" where imgno = ?  ");

try {

pstmt = con.prepareStatement(sql.toString());

pstmt.setInt(1, imgno);


rs = pstmt.executeQuery();


if (rs.next()) {

dto = new ImgDTO();

dto.setImgno(rs.getInt("imgno"));

dto.setWname(rs.getString("wname"));

dto.setTitle(rs.getString("title"));

dto.setContent(rs.getString("content"));

dto.setPasswd(rs.getString("passwd"));

dto.setGrpno(rs.getInt("grpno"));

dto.setIndent(rs.getInt("indent"));

dto.setAnsnum(rs.getInt("ansnum"));

dto.setFilename(rs.getString("filename"));

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

DBClose.close(con, pstmt, rs);

}


return dto;

}


/**

* 9.imgRead

* 

* @param dto

* @return

*/

public List<String> imgRead(int imgno){

List<String> list = new ArrayList<String>();

Connection con = DBOpen.getConnection();

PreparedStatement pstmt = null;

ResultSet rs = null;

StringBuffer sql = new StringBuffer();


sql.append("  SELECT * FROM    ");

sql.append("    (    ");

sql.append("       select imgno, filename,     ");

sql.append("           lag(imgno,2)     over (order by imgno) pre_imgno2,     ");

sql.append("           lag(filename,2)  over (order by imgno) pre_file2,      ");

sql.append("           lag(imgno,1)     over (order by imgno ) pre_imgno1,     ");

sql.append("           lag(filename,1)  over (order by imgno ) pre_file1,     ");

sql.append("           lead(imgno,1)    over (order by imgno) nex_imgno1,     ");

sql.append("           lead(filename,1) over (order by imgno) nex_file1,   ");

sql.append("           lead(imgno,2)    over (order by imgno) nex_imgno2,     ");

sql.append("           lead(filename,2) over (order by imgno) nex_file2    ");

sql.append("           from (    ");

sql.append("                SELECT imgno, filename     ");

sql.append("                FROM img   ");

sql.append("                ORDER BY imgno DESC    ");

sql.append("           )    ");

sql.append("    )    ");

sql.append("    WHERE imgno = ?   ");

try {

pstmt = con.prepareStatement(sql.toString());

pstmt.setInt(1, imgno);

rs = pstmt.executeQuery();

if(rs.next()){

String [] arr = new String [10];

//01234 = imgno(2전 1전 자기자신 1다음 2다음)

//56789 = filename

arr[0] = rs.getString("pre_imgno2");

arr[5] = rs.getString("pre_file2");

arr[1] = rs.getString("pre_imgno1");

arr[6] = rs.getString("pre_file1");

arr[2] = rs.getString("imgno");

arr[7] = rs.getString("filename");

arr[3] = rs.getString("nex_imgno1");

arr[8] = rs.getString("nex_file1");

arr[4] = rs.getString("nex_imgno2");

arr[9] = rs.getString("nex_file2");

for(int i = 0; i<10; i++){

list.add(arr[i]);

}

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

DBClose.close(con, pstmt, rs);

}

return list;

}



4. 공부하는 것


Focus Input Box On Load


How can the cursor be focus on a specific input box on page load?

Is it posible to retain initial text value as well and place cursor at end of input?

<input type="text"  size="25" id="myinputbox" class="input-text" name="input2" value = "initial text" />


86down voteaccepted

There are two parts to your question.

1) How to focus an input on page load?

You can just add the autofocus attribute to the input.

<input id="myinputbox" type="text" autofocus>

However, this might not be supported in all browsers, so we can use javascript.

window.onload = function() {
  var input = document.getElementById("myinputbox").focus();
}

2) How to place cursor at the end of the input text?

Here's a non-jQuery solution with some borrowed code from another SO answer.

function placeCursorAtEnd() {
  if (this.setSelectionRange) {
    // Double the length because Opera is inconsistent about 
    // whether a carriage return is one character or two.
    var len = this.value.length * 2;
    this.setSelectionRange(len, len);
  } else {
    // This might work for browsers without setSelectionRange support.
    this.value = this.value;
  }

  if (this.nodeName === "TEXTAREA") {
    // This will scroll a textarea to the bottom if needed
    this.scrollTop = 999999;
  }
};

window.onload = function() {
  var input = document.getElementById("myinputbox");

  if (obj.addEventListener) {
    obj.addEventListener("focus", placeCursorAtEnd, false);
  } else if (obj.attachEvent) {
    obj.attachEvent('onfocus', placeCursorAtEnd);
  }

  input.focus();
}

Here's an example of how I would accomplish this with jQuery.

<input type="text" autofocus>

<script>
$(function() {
  $("[autofocus]").on("focus", function() {
    if (this.setSelectionRange) {
      var len = this.value.length * 2;
      this.setSelectionRange(len, len);
    } else {
      this.value = this.value;
    }
    this.scrollTop = 999999;
  }).focus();
});
</script>


출처: http://stackoverflow.com/questions/4331022/focus-input-box-on-load



자동으로 포커스 이동하기

마승
추천 수 71

자동으로 포커스 이동하기

 

//네이버 아이디/비밀번호 찾기 예 - 주민번호 입력시 자동으로 포커스이동.

 

//스크립트

<script language="JavaScript" type="text/JavaScript">
<!--
function IsEmpty(toString) {
 var str_tmp;      
          
 str_tmp = toString.replace(/ /g,'');
          
 if(str_tmp.length == 0 ){         
  return true;     
 }         
 return false;      
}


function chk() { //회원정보체크
 
 if(IsEmpty(document.fname.name.value)) {
     alert("한글이름을 입력하세요");
     document.fname.name.value="";
     document.fname.name.focus();
     return false;
 }

    if(IsEmpty(document.fname.jumin1.value)){
  alert("주민등록번호를 입력하십시오.");
        document.fname.jumin1.value="";
  document.fname.jumin1.focus();
  return false;
 }

 if(IsEmpty(document.fname.jumin2.value)){
  alert("주민등록번호를 입력하십시오.");
        document.fname.jumin2.value="";
  document.fname.jumin2.focus();
  return false;
 }  

    return true;

}


//숫자체크와 자동포커스

function go_next(arg, nextname,size){

 value = arg.value;
 len = value.length;
 is_num = Number(value);

 if(!is_num) {
  if((len > 0) && (value != '0') && (value != '00') && (value != '000')) {
   alert('숫자를 넣어주세요');
   arg.select();
   arg.focus();
   return false;
  }
 }

 if(len == size){
  if (nextname != null) nextname.focus();
  return true;
 }
}

//-->
</script>

 

//html 예...

<tr> 
                              <td class="bold brown"><img src="../images/member/bul_g.gif" align="absmiddle" > 
                                주민등록번호 </td>
                              <td class="pL5"> 
                                <input name="jumin1" type="text" class="in_beige" style="width:100px" size="6" maxlength="6" onkeyup="go_next(this, document.fname.jumin2, 6)"  TABINDEX="2">
                                <span class="font11 brown">-</span> 
                                <input name="jumin2" type="password" class="in_beige" style="width:100px" size="7" maxlength="7"    onkeyup="go_next(this, null , 7)"  >
                              </td>
                            </tr>

 

 

 

 

 

 

 

 

//우편번호 예

 

<html>
<head>
<title>자동으로 포커스 이동하기</title>
<script language="JavaScript">

function onlyNumber3(){
        if ((event.keyCode<48)||(event.keyCode>57)){
                event.returnValue=false;
        }
}

function onlyNumber4(){
        if ((event.keyCode<48)||(event.keyCode>57)){
                event.returnValue=false;
        }
}

function js_tab_order(arg,nextname,len) {  
    if (arg.value.length==len) {
        nextname.focus() ;
        return;
     }
}

</script>
</head>

<body bgcolor="white" onLoad="document.form_app.post_num1.focus();">
<center>
<H2> 자동으로 포커스 이동하기 </H2> <p>
<form name="form_app" method="post">
<div align="center">
<table border="1" bordercolor="#7AB4FC">
<tr>
<td width="80" bgcolor="#ACE4FC" bordercolor="#ACE4FC" align="center">우편번호</td>
<td width="330" bgcolor="#E9F3F4" bordercolor="#E9F3F4"><p>
<input type="text" name="post_num1" maxlength="3" size="3" 
       onkeyup="js_tab_order(this,document.form_app.post_num2,3);" onkeypress="onlyNumber3();"> 
-
<input type="text" name="post_num2" maxlength="3" size="3" 
       onkeyup="js_tab_order(this,document.form_app.post_num1,3);" onkeypress="onlyNumber4();">         
세글자를 치면 포커스가 자동으로 이동합니다.
</td>
</tr>
</table>
</form>
</center>
</body>
</html>


출처: http://www.gnujava.com/board/article_view.jsp?article_no=1104&board_no=11&table_cd=EPAR04&table_no=04



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



그리고 AND연산자로 짠 거는 - 자바 스크립트에서 - 2개까지밖에 비교가 안 되서 ㅡㅡ


var file = frm.filename.value;

var fileExt = file.substring(file.lastIndexOf('.') + 1); //파일의 확장자를 구합니다.

switch (fileExt){

case 'jpg':

break;

case 'png':

break;

case 'gif':

break;

case 'jpeg':

break;

case 'bmp':

break;

default:

alert("JPG,JPEG,GIF,PNG,BMP파일로 올려주세요");

return false;

}


스위치로 바꿨음...


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


[34][Cookie] 쿠키 객체의 사용, 쿠키의 타임 종료


쿠키 - 아주 작은 데이터를 클라이언트 쪽에 저장하는 것

(웹 서버가 아니라 클라이언트!)



1. Cookie 개요 
   - javax.servlet.http.Cookie 클래스를 이용합니다. 

   - Tomcat 서버가 접속자의 컴퓨터에 저장하는 텍스트 파일로 된 정보. 
    
   - 보안성이 없음으로 계정과 패스워드를 동시에 쿠키에 저장하면,  
     쿠키의 내용을 전부 편집기로 열어 볼 수 있음으로 보안에 
     문제가 될 수 있습니다. 



1. 보안에 문제가 안 되면서

2. 인식할 수 있을 정도로 작은 데이터!


가 필요할 때 쓰면 됨미다.




 예) 쿠키는 DB로 잠겨져 있어 볼 수 없음(Chrome), MSIE 파일이 잠겨있음. 
     예) 저장된 쿠키의 내용 
         c_count    <-- 쿠키 변수
         11         <-- 쿠기 값
         www.domain.com/www_jsp/cookie/ <-- 쿠키를 기록한 도메인 주소, 폴더 변경시 인식 안됨
         1536 
         1110161408 
         30152127 
         512501408 
         30152127 
         * 
         c_point 
         33 
         www.domain.com/www_jsp/cookie/ 
         1536 
         1110161408 
         30152127 
         512501408 
         30152127 
         * 

   - 4KB까지 저장할 수 있다.  

   - 쿠키는 웹페이지 접속시 서버로 자동으로 전송되고 서버에 
     의해서 클라이언트에 쓰여지므로 쿠키를 사용하지 않는 옵션을 
     브러우저에서 지정가능. 

   - 사용예: 하루동안 이벤트창 오픈하기, 
             ID/PASSWORD 자동으로 저장기능, 
             로그인 상태 유지등 입력된 값의 자동 출력 
    
   - setMaxAge() : 쿠키의 생존 기간 초 단위 지정, 12시간의 경우 12*60*60,  - 자동으로 접근 불가능해짐! :>
     브러우저는 시간이 지난 쿠키는 서버로 전송하지 않고 자동으로 
     삭제하며 사용자가 직접 삭제도 가능, 
     저장된 쿠키는 브러우저가 삭제가 가능한 데이터임, 수동으로 삭제 기능도 제공함. 

   - Cookie c_name = new Cookie("c_name", "Java");  
     -> Cookie cname = new Cookie(쿠키 변수명, 쿠키 값) 


쿠키도 객체넹


   - Cookie c_name = new Cookie("c_name", "Java");  
     -> Cookie cname = new Cookie(쿠키 변수명, 쿠키 값) 



request & response니까



2. 쿠키의 생성 
    Cookie cookie = new Cookie("id", id); 
    cookie.setMaxAge(1200);     // 초단위 
    response.addCookie(cookie); // 쿠키 출력 --> 접속자의 컴퓨터에 기록됨. 



3. 쿠키의 읽기 
Cookie[] cookies = request.getCookies();  //여러 개니까 쿠키 배열인것 이름이 귀여운것...
String c_id = "";     // 아이디 
String c_passwd = ""; // 패스워드 

if (cookies != null){  // 쿠키가 존재한다면  
  for(int i=0; i<cookies.length; i++){ // 쿠키의 갯수만큼 순환 
    Cookie item = cookies[i];        // 쿠키를 하나씩 추출  
    if (item.getName().equals("id") == true){ // 찾으려는 변수가 있는지 검사  
      c_id = item.getValue();  // 찾아진 쿠키의 값 추출      
    }else if (item.getName().equals("passwd") == true){ // 찾으려는 변수가 있는지 검사  
      c_passwd = item.getValue();  // 찾아진 쿠키의 값 추출      
    } 
  } 
} 


4. 쿠키의 삭제 
    Cookie cookie = new Cookie("id", ""); 
    cookie.setMaxAge(0);        // 수명을 0초로 지정 
    response.addCookie(cookie); // 쿠키 전송 

    시간이 지난 쿠키는 브러우저에 의해 자동으로 삭제됨. 


writecookie

readcookie 했음!


<%@ page contentType="text/html; charset=UTF-8" %> 

<% request.setCharacterEncoding("utf-8"); 

Cookie cookie = null;

//cookie = new Cookie(name, value);

cookie = new Cookie("name", "User1");

cookie.setMaxAge(30);

response.addCookie(cookie);

//30초의 생명을 만들고 보내주는거십니다.

cookie = new Cookie("kuk", "90");

cookie.setMaxAge(30);

response.addCookie(cookie);

cookie = new Cookie("eng", "90");

cookie.setMaxAge(30);

response.addCookie(cookie);





%> 

 

<!DOCTYPE html> 

<html> 

<head> 

<meta charset="UTF-8"> 

<title>쿠키 저장하기(Cookie객체의 사용)</title> 

<style type="text/css"> 

*{ 

  font-family: gulim; 

  font-size: 20px; 

} 

</style> 

<link href="../css/style.css" rel="Stylesheet" type="text/css">

</head> 

<!-- *********************************************** -->

<body>

<jsp:include page="/menu/top.jsp" flush="false"/>

<!-- *********************************************** -->

 

<DIV class="title"></DIV>

 

<div class ="content">

<p>성적을 쿠키로 저장 했습니다.</p>

<p><a href = "./readCookie.jsp">쿠키로 저장된 성적 읽어오기</a></p>

</div>

 

 

<!-- *********************************************** -->

<jsp:include page="/menu/bottom.jsp" flush="false"/>

</body>

<!-- *********************************************** -->

</html> 


이것은 라이트쿠키


<%@ page contentType="text/html; charset=UTF-8" %> 

<% request.setCharacterEncoding("utf-8"); 

Cookie[] cookies = request.getCookies(); 

Cookie cookie = null;

String name = null;

int kuk = 0;

int eng = 0;

for(int i = 0; i<cookies.length; i++){

cookie = cookies[i];

if(cookie.getName().equals("name")){

name = cookie.getValue();

}

else if(cookie.getName().equals("kuk")){

kuk = Integer.parseInt(cookie.getValue());

}

else if(cookie.getName().equals("eng")){

eng = Integer.parseInt(cookie.getValue());

}

}



%> 

 

<!DOCTYPE html> 

<html> 

<head> 

<meta charset="UTF-8"> 

<title>쿠키 읽어 오기(Cookie객체의 사용)</title> 

<style type="text/css"> 

*{ 

  font-family: gulim; 

  font-size: 20px; 

} 

</style> 

<link href="../css/style.css" rel="Stylesheet" type="text/css">

</head> 

<!-- *********************************************** -->

<body>

<jsp:include page="/menu/top.jsp" flush="false"/>

<!-- *********************************************** -->

 

<DIV class="content">

<%

if(name!= null){

out.println("성명: " + name + "<br>");

out.println("국어: " + kuk + "<br>");

out.println("영어: " + eng + "<br>");

out.println("총점: " + (kuk+eng) + "<br>");

out.println("평균: " + (kuk+eng)/2 + "<br>");

out.println("30초 후 쿠키는 인식이 되지 않습니다. "+ "<br>");


}

else{

out.println("쿠키를 읽어올 수 없습니다." + "<br>");

}


%>


</DIV>

 

 

 

<!-- *********************************************** -->

<jsp:include page="/menu/bottom.jsp" flush="false"/>

</body>

<!-- *********************************************** -->

</html> 


이것이 리드쿠키



<%@ page contentType="text/html; charset=UTF-8"%>

<% request.setCharacterEncoding("utf-8"); 


Cookie[] cookies = request.getCookies();

Cookie cookie = null;


String sw = null;


if(cookies!=null){

for(int i = 0; i< cookies.length; i++){

cookie = cookies[i];


if(cookie.getName().equals("sw")){

sw = cookie.getValue();

}

}

}


%>


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>접속 환영</title>

<style type="text/css">

* {

font-family: gulim;

font-size: 20px;

}

</style>

<link href="../css/style.css" rel="Stylesheet" type="text/css">

</head>

<!-- *********************************************** -->

<body>

<jsp:include page="/menu/top.jsp" flush="false" />

<!-- *********************************************** -->


<DIV class="content">

<%

if(sw!=null){

out.print("재접속을 환영합니다." + "<br>");

}

else{

out.print("처음 접속 하셨군요!" + "<br>");

Cookie wcookie = null;

wcookie = new Cookie("sw", "1");

wcookie.setMaxAge(60);

response.addCookie(wcookie);

}


%>

<br>

<br> <A href='./welcome.jsp'>Server 접속</A>


</DIV>



<!-- *********************************************** -->

<jsp:include page="/menu/bottom.jsp" flush="false" />

</body>

<!-- *********************************************** -->

</html>


이것은 웰컴





















5. 수업

진도: 

hw: 


6. 할것


Lag(expr) Over(Partition by 절) as ㅁ

Lead


계산 대상의 데이터들을 Partition by 절로 구분해서 expr에 명시된 값을 기준으로 이전/이후의 row값을 반환한다.


as는 생략 가능


Over함수는 Over(partition by  Column1 order by column2)

형식으로 


Column1이 같은 값을 기준으로 묶은 것을 Column2를 기준으로 정렬해서 표현식을 수행한다.







http://www.bionixwallpaper.com/downloads/Animated%20Desktop%20Wallpaper/index.html

이걸로 배경화면 바꿀 수 있음 ㅋㅋㅋㅋㅋ

넘나이쁜것


럭키 블루 스미스ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

http://luckybluegifs.co.vu/page/5


움짤 다모으면 이제 보느라 행복하겠지...


http://howways.blogspot.kr/2014/01/HTML-DIV-Position-Absolute-Relative-Fixed-and-top-bottom-left-right-attributes.html


요고 참고해서 뭐 만들었음




첨부파일에 쓸 거 있음

'Programming' 카테고리의 다른 글

160429: 34회차  (0) 2016.04.29
160428: 33회차  (0) 2016.04.28
160426: 31회차  (1) 2016.04.26
160425: 30회차  (0) 2016.04.25
160422: 29회차  (0) 2016.04.22
Posted by DAVID

160426: 31회차

Programming 2016. 4. 26. 18:26

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것




오늘 어제 팀 프로젝트 하던 거 3시 40분까지 고쳐서 별로 기운이 없으니 위안이 되는 럭키블루


6시 24분!






으아아 와장창





jsp_img.zip



LAG, LEAD

게시자: MyungJong Kim, 2011. 12. 14. 오후 3:21

- 하나의 쿼리에서 동시에 다른 로우의 값에 접근할 수 있는 함수

[구문 형식]
LAG ( expr, offset, default ) OVER ( PARTITION BY 절 )
LEAD ( expr, offset, default ) OVER ( PARTITION BY 절 )

- LAG : 계산 대상 데이터(로우)들을 PARTITION BY 절로 구분하여, expr에 명시된 값을 기준으로 이전 로우의 값을 반환
         off : 생략 가능한데, 생략할 경우 기본값(1)으로 설정됨 (바로 이전 로우의 값을 반환)
         default: offset에 지정된 로우가 존재하지 않을 경우 LAG 함수가 반환하는 기본 값. 이 역시 생략 가능
- LEAD : 이전 로우가 아닌 이후의 로우값을 반환


select hire_date
     , count(*)
     , LAG(count(*))        OVER (ORDER BY hire_date)   lag1  -- 이전 년도 사원수
     , LAG(count(*), 1, 0)  OVER (ORDER BY hire_date)   lag2  -- 이전 년도 사원수(상동)
     , LAG(count(*), 2, 0)  OVER (ORDER BY hire_date)   lag3  -- 2년전 사원수
     , LEAD(count(*))       OVER (ORDER BY hire_date)   lead1 -- 이후 년도 사원수
     , LEAD(count(*), 1, 0) OVER (ORDER BY hire_date)   lead2 -- 이후 년도 사원수(상동)
     , LEAD(count(*), 2, 0) OVER (ORDER BY hire_date)   lead3 -- 2년후 사원수
  from (select 100 id, '2011' hire_date from dual union all
        select 101 id, '2010' hire_date from dual union all
        select 102 id, '2011' hire_date from dual union all
        select 103 id, '2010' hire_date from dual union all
        select 104 id, '2009' hire_date from dual union all
        select 105 id, '2009' hire_date from dual union all
        select 106 id, '2009' hire_date from dual union all
        select 107 id, '2008' hire_date from dual union all
        select 108 id, '2007' hire_date from dual union all
        select 109 id, '2006' hire_date from dual union all
        select 100 id, '2006' hire_date from dual union all
        select 111 id, '2006' hire_date from dual          )
 group by hire_date ;

  ---------------------------------------------------------------------
  HIRE_DATE   COUNT(*)    LAG1    LAG2    LAG3    LEAD1   LEAD2   LEAD3
  ---------------------------------------------------------------------
  2006        3                   0       0       1       1       1
  2007        1           3       3       0       1       1       3
  2008        1           1       1       3       3       3       2
  2009        3           1       1       1       2       2       2
  2010        2           3       3       1       2       2       0
  2011        2           2       2       3               0       0
  ---------------------------------------------------------------------

https://sites.google.com/site/smcgbu/home/gongbu-iyagi/laglead

ORACLE LEAD() OVER() & LAG() OVER() FUNCTION

ORACLE 이야기 2012.10.04 12:43

현재 행의 이전 또는 이후의 행 값을 들고와야 할 때. 아래의 펑션을 이용하면 됨.

버전별로 지원하는지 안하는지는 확인 안했음.

 

/* LEAD() OVER() FUNCTION 
   현재 행의 다음 데이터에 접근.
   ACCESS_ROW_INDEX : 현재 행 기준 N 번째 행의 값을 들고 옴.
   1 : 현재 행의 바로 다음 행 값.
   2 : 현재 행의 2번째 행 값. 
   ...
*/
-- QUERY

SELECT LEAD([COLUMN_NANE], [ACCESS_ROW_INDEX]) OVER(ORDER BY [COLUMN_NAME])
  FROM [TABLE_NAME];


/* LAG() OVER() FUNCTION 
   현재 행의 이전 데이터에 접근.
*/

SELECT LAG([COLUMN_NANE], [ACCESS_ROW_INDEX]) OVER(ORDER BY [COLUMN_NAME])
  FROM [TABLE_NAME];

 

 

Ex)

 

SELECT A.*, LEAD(A.COLUMN1, 1) OVER(ORDER BY A.COLUMN2) AS NEXT_VALUE

    FROM TABLE A;

 

COLUMN1  COLUMN2

1               A

2               B

3               C

 

의 데이터가 존재하는 경우 위 쿼리를 실행하면,

 

COLUMN1  COLUMN2 NEXT_VALUE

1               A             2

2               B             3

3               C             (NULL)

 

--ACCESS_ROW_INDEX 가 2 인 경우

COLUMN1  COLUMN2 NEXT_VALUE

1               A             3

2               B             (NULL)

3               C             (NULL)

 

LAG 는 이전 데이터를 들고오며 LEAD와 문법은 동일.

 

 


http://nephrolepis.tistory.com/entry/Oracle-lead-over-lag-over-function

오라클 분석함수 lag(), lead()
1. LAG() OVER()
  가. 지정한 컬럼의 앞의 값을 가져온다.
  나. 문법

Description of lag.gif follows

  다. 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT LEVEL LVL
     , LAG(LEVEL) OVER(ORDER BY LEVEL ASC ) AS LAG_VALUE1
     , LAG(LEVEL, 2) OVER(ORDER BY LEVEL ASC ) AS LAG_VALUE2
     , LAG(LEVEL, 3, 100) OVER(ORDER BY LEVEL ASC) AS LAG_VALUE3
  FROM DUAL CONNECT BY LEVEL <= 10
;
       LVL LAG_VALUE1 LAG_VALUE2 LAG_VALUE3
---------- ---------- ---------- ----------
         1                              100
         2          1                   100
         3          2          1        100
         4          3          2          1
         5          4          3          2
         6          5          4          3
         7          6          5          4
         8          7          6          5
         9          8          7          6
        10          9          8          7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT LEVEL LVL
     , LAG(LEVEL, 1, 100) OVER(ORDER BY LEVEL DESC) AS LAG_VALUE3
  FROM DUAL CONNECT BY LEVEL <= 10
;
       LVL LAG_VALUE3
---------- ----------
        10        100
         9         10
         8          9
         7          8
         6          7
         5          6
         4          5
         3          4
         2          3
         1          2

2. LEAD() OVER()

  가. 지정한 컬럼의 뒤의 값을 가져온다.

  나. 문법

Description of lead.gif follows


  다. 예제

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
SELECT LEVEL LVL
     , LEAD(LEVEL) OVER(ORDER BY LEVEL ASC ) AS LAG_VALUE1
     , LEAD(LEVEL, 2) OVER(ORDER BY LEVEL ASC ) AS LAG_VALUE2
     , LEAD(LEVEL, 3, 100) OVER(ORDER BY LEVEL ASC) AS LAG_VALUE3
  FROM DUAL CONNECT BY LEVEL <= 10
;
 
       LVL LAG_VALUE1 LAG_VALUE2 LAG_VALUE3
---------- ---------- ---------- ----------
         1          2          3          4
         2          3          4          5
         3          4          5          6
         4          5          6          7
         5          6          7          8
         6          7          8          9
         7          8          9         10
         8          9         10        100
         9         10                   100
        10                              100
 
 
SELECT LEVEL LVL
     , LEAD(LEVEL, 1, 100) OVER(ORDER BY LEVEL DESC) AS LAG_VALUE3
  FROM DUAL CONNECT BY LEVEL <= 10
;
 
       LVL LAG_VALUE3
---------- ----------
        10          9
         9          8
         8          7
         7          6
         6          5
         5          4
         4          3
         3          2
         2          1
         1        100
http://www.jigi.net/4335


오라클 over() 함수



over 함수는 group by, order by 를 이용한 서브쿼리의 사용을 편리하게 하기 위해 사용하는 함수이다. 

보통 over 함수는 단독으로 사용하기 보다는

count(), max(), min(), sum(), avg(), rank(), row_number() 등과 같은 분석 함수와 함께 사용된다. 


?
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
-- OVER 함수 이용
SELECT
    NAME,
    NO,
    SUM(NO) over(PARTITION BY NAME ORDER BY NAME)
FROM (
SELECT 'A' AS NAME, '31' AS NO FROM dual UNION
SELECT 'B', '32' FROM dual UNION
SELECT 'B', '45' FROM dual UNION
SELECT 'D', '95' FROM dual UNION
SELECT 'D', '41' FROM dual UNION
SELECT 'D', '15' FROM dual)
 
/*
-- 결과
1   A   31  31
2   B   32  77
3   B   45  77
4   D   15  151
5   D   41  151
6   D   95  151
*/
-- GROUP BY 이용
SELECT
    NAME,
    NO,
    sum(NO)
FROM (
SELECT 'A' AS NAME, '31' AS NO FROM dual UNION
SELECT 'B', '32' FROM dual UNION
SELECT 'B', '45' FROM dual UNION
SELECT 'D', '95' FROM dual UNION
SELECT 'D', '41' FROM dual UNION
SELECT 'D', '15' FROM dual)
GROUP BY NAME, NO
ORDER BY NAME
 
/*
-- 결과
    NAME    NO  SUM(NO)
1   A   31  31
2   B   32  32
3   B   45  45
4   D   15  15
5   D   41  41
6   D   95  95
*/


위와같이 Name에 따른 No의 합을 구하려면 group by 를 이용하면 위와 같이 사용하면 안되고 서브쿼리를 이용하여 처리를 해야 한다. 

따라서 코드가 복잡해지고, 유지보수에 어려움이 생기게 될 것이다. 


이럴때 등장하는 것이 over() 함수 인 것이다. 

* partition by 는 group by 라고 생각하면 이해하기가 좀 더 쉬울 것 같다. 


http://118k.tistory.com/40








5. 수업

진도: 

hw: 


6. 할것


나 왜 내일 발표야~~~~~~


'Programming' 카테고리의 다른 글

160428: 33회차  (0) 2016.04.28
160427: 32회차  (1) 2016.04.27
160425: 30회차  (0) 2016.04.25
160422: 29회차  (0) 2016.04.22
160421: 28회차  (1) 2016.04.21
Posted by DAVID

160425: 30회차

Programming 2016. 4. 25. 20:07

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


세션 배우는 중

세션에 저장하는 것은 아주 중요한 것만 저장해야 함 ! (서버에 부담을 줌)


-client와 server간의 요청과 응답시 


request의 경우

요청이 이루어지면 서버는 클라이언트의 요청에 대한 정보 (브라우저에 대한 정보)를 얻은 뒤

응답할때 서버는 이 정보를 다 지운다!


★ 브라우저에 대한 정보가 있음


session의 경우

클라이언트의 요청이 이루어지면 [연결]이 된다.

그러면 SID(Session ID)객체를 생성한다.


그 다음에 20분 정도 연결을 하고 있는데

1) 계속 세션 작업을 하면 -> 계속 연결되어져 있다

2) 20분간 아무 작동을 안 하면 -> 끊어진다.


기본이 20분 정도인데 이걸 늘리거나 줄일 수 있음.

선생님 홈페이지는 1시간이래.


만약에 로그아웃을 한 상태여도

20분간은 세션이 연결되어져 있다. 2) 를 수행하는 것...


여러 개의 브라우저에서 요청을 하면 계정으로 구분해서 연결한다.



★ 브라우저에 대한 정보가 없음

★ 요청에 대한 ID 값이 있어서 로그인 상태를 인식한다.

★ 계정으로 구분해서 연결한다.








   - sendRedirect(): 데이터 처리를 한후 특정 페이지로 자동으로 주소 이동. 

이것도 다시 써봄

logout.jsp는
<%@ page contentType = "text/html; charset=UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
session.invalidate();//모든 세션변수 제거
response.sendRedirect("../index.jsp");
%>

이렇게 생겼는데

여기서 session.invalidate();말고
delete 기능 수행하는게 session.removeAttribute(여기 안에 파라미터); 넣으면
안에 파라미터 넣은 것만 지워주는 것인데

invalidate는 한번에 밀어준당 :>

그리고 나서 reponse.sendRedirect("url"); 하면
이런 데이터 처리를 다 한 뒤에 저 url로 자동으로 주소를 이동시켜준다.

저번에 그린 그림

request.getContextPath()와 request.getRequestURI()의 차이

Programming/JAVA 2011.04.22 16:57


request.getContextPath()는 프로젝트 path만 얻어온다.

요청 : http://localhost/ZESTINE/test.jsp 경우

→ /ZESTINE 경로만 얻는다


request.getRequestURI()는 프로젝트와 파일 경로까지 얻어온다.

요청 : http://localhost/ZESTINE/test.jsp 경우

→ /ZESTINE/test.jsp 까지 얻어온다.


출처: http://chogoon.tistory.com/entry/requestgetContextPath%EC%99%80-requestgetRequestURI%EC%9D%98-%EC%B0%A8%EC%9D%B4



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


으 1시간 날라가씀니다

넘나 심심한것...


그래서 이제 드디어 새걸 합니다

jsp_blog! - 다이나믹 웹 푸로잭트



오 close project 해도 이상한 거 안 생김 ㅋㅋㅋㅋㅋ



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


으 왜 팀프합니까


CREATE TABLE img ( 

  imgno   NUMBER(7)     NOT NULL,  -- 글 일련 번호, -9999999 ~ +9999999 

  wname   VARCHAR(20)   NOT NULL,  -- 글쓴이 

  title   VARCHAR(100)  NOT NULL,  -- 제목(*) 

  content VARCHAR(4000) NOT NULL,  -- 글 내용 

  passwd  VARCHAR(15)   NOT NULL,  -- 비밀 번호 

  grpno   NUMBER(7)     DEFAULT 0, -- 부모글 번호 

  indent  NUMBER(2)     DEFAULT 0, -- 답변여부,답변의 깊이

  ansnum  NUMBER(5)     DEFAULT 0, -- 답변 순서 

  filename VARCHAR(30) NOT NULL,

  PRIMARY KEY (imgno)  

)


으으으





 

5. 수업

진도: 

hw: 


6. 할것



아 미쳤어 진짴ㅋㅋㅋ

'Programming' 카테고리의 다른 글

160427: 32회차  (1) 2016.04.27
160426: 31회차  (1) 2016.04.26
160422: 29회차  (0) 2016.04.22
160421: 28회차  (1) 2016.04.21
160420: 27회차  (0) 2016.04.20
Posted by DAVID

160422: 29회차

Programming 2016. 4. 22. 17:56

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


금요일이니까 짤로 시작하는 하루



thug life


img source = tumblr





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


오라클 sql문 3중 query 같은거 만들고 있음


SELECT id, mname, tel, email, address1, address2, fname, r

FROM(

SELECT id, mname, tel, email, address1, address2, fname, rownum r

FROM(

SELECT id, mname, tel, email, address1, address2, fname

FROM member

WHERE id like '%' || '아이디' || '%'

ORDER BY id ASC

)

 )

 WHERE r >= 1 and r <=3


근뎅


WHERE id like '%' || '아이디' || '%'


이거를


WHERE '이부분을바꿀수있게' like '%' || '아이디' || '%'

고치는 중



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

자백하자면 카카오 계정 탈퇴하느라 복붙할 떄 넋을 놓았습니다



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


사진 업데이트시 - 기존 파일명과 새 파일명을 모두 가지고 있어야 하는데

그 이유는 기존 파일을 지워줘야 하기 때문에 'ㅅ')...


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



야호 3시 17분이다




FileItem 인터페이스는 multipart/form-data 형식으로  전송된 폼 데이터를 파일 도는 폼 아이템으로 표현하는 객체래


출처: http://blog.daum.net/question0921/654




   - FileItem 클래스가 제공하는 메소드 내역
     . boolean isFormField(): 일반적인 입력 파라미터인 경우 true를 리턴 합니다.
     . String getFieldName(): 파라미터의 이름을 구합니다.
     . String getString()   : 기본 캐릭터셋을 이용하여 파라미터의 값을 구합니다.
     . String getString(String encoding): 지정한 인코딩을 이용하여 파라미터값을 구함
     . String getName()     : 업로한 파일의 전체 경로를 포함한 이름을 구합니다.
     . long getSize()       : 업로드한 파일의 크기를 구합니다.
     . void write(File file): 업로드한 파일을 file이 나타내는 파일로 저장합니다.
     . InputStream getInputStream(): 업로드한 파일을 읽어오는 입력 스트림을 리턴합니다.
     . byte[] get()         : 업로드한 파일을 byte 배열로 구합니다.
     . boolean isInMemory() : 업로드한 파일이 임시 디렉토리에 저장된 상태인 경우 
                              true를 리턴하고, 임시 데렉토리에 저장된 경우 false를
                              리턴합니다.
     . void delete()        : 파일과 관련된 자원을 제거합니다.메모리가 사용되고 
                              있을 경우 메모리를 반환하고, 임시 디렉토리에 있는 
                              파일을 삭제합니다.

 출처: http://holecjh.tistory.com/13

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


질문 1)  JasperException이 정확히 무슨 뜻입니까?

질문 2) 어떻하여야 정상적으로 실행이 되겠습니까?


답변:
JasperException은 톰캣에서 발생하는 에러에 대한 일반적인 익셉션입니다. 그렇기 때문에 말씀하신 내용만으로는 문제의 원인이 무엇인지 알 수 없습니다. 책을 저술하고 마지막에 모든 예제를 테스트해보았고, 편집 도중에 발생한 예제에 관련된 몇몇 오탈자는 앞서 다른 독자 여러분이 지적해주셔서 표시해 두었는데 이 예제에는 그런 오탈자가 없었고, 확인을 위해 제가 지금 다시 실행해보았는데도 [그림 5-2]와 똑같은 결과가 나옵니다. 

그러므로 문제의 원인은 다른 곳에 있는 것 같습니다. 다음의 파일을 첨부해서 게시해주시면 문제의 원인을 찾는데 도움이 될 것 같습니다. 

- NewAdder.jsp 와 DataError.jsp의 소스 코드
- JasperException이 발생한 웹 브라우저의 화면 캡처

책의 내용 순서로 보았을 때는 아직 brain05 웹 애플리케이션 디렉터리 아래에 web.xml 파일을 만들지 않으셨겠지만 책과 다른 순서나 방법으로 테스트하고 있으시다면 WEB-INF 디렉터리에 web.xml 파일을 만들어두셨을지도 모르겠군요. 만들어두셨다면 그 파일도 첨부 바랍니다. 

그리고 이클립스 환경에서 테스트하고 있으시다면 그렇다고 말씀해주시기 바랍니다.

출처:http://www.hanbit.co.kr/brain/board/view.html?id=jsp&ma_id=15172&pg=6



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


오 이런 거 함!

if(id==null){

id=(String)session.getAttribute("id");

}

몬지모름! :D


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


function inputCheck(f){

if(f.passwd.value==""){

alert("비밀번호를 입력해 주세요");

f.passwd.focus();

return false; 

//onclick으로 하면 리턴만 줘야하고

//submit으로 하면 return false까지 줘야 한당 :D

}




피자아아아아아아아ㅏ아아아아아아ㅏ아아아아아아아아아ㅏ아아아아아아ㅑ아아아아아아ㅏㅏㅏㅏㅏㅏㅏ

피자피자


피자




짤.zip

를 모토로 모은 피자짤


움짤



주말에 할 지도 모르는 것


jsp_member.zip






5. 수업

진도: 

hw: 


6. 할것


오늘 집에 일찍 갈 것...;ㅅ;



'Programming' 카테고리의 다른 글

160426: 31회차  (1) 2016.04.26
160425: 30회차  (0) 2016.04.25
160421: 28회차  (1) 2016.04.21
160420: 27회차  (0) 2016.04.20
160419: 26회차  (2) 2016.04.19
Posted by DAVID

160421: 28회차

Programming 2016. 4. 21. 13:00

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


dynamic web project 생성함 - jsp_member

근데 이거 강제로 붙여넣기 말고 import 하는 법이 있던데

그거 써치해보기!


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

sql문에서


primary key랑 unique

1)                2)


중복은 1) 2) 둘 다 불가능

index는 1) 만 가지고 있다


그래서 primary key가 검색 속도가 빠르당.


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



파일 업로드


1. client 처리

: 파일 선택후 서버로 보낸다.


<form>

1) method가 반드시 "post" 여야 한다

2) enctype = "multipart/form-data" 를 선언 해줘야 한다.



2. server 

: client가 보낸 파일을 참조할 수 있는

외부 lib가 필요하다. (다운로드) 

//내가 요즘 쓰는 것 중에서 lib는 ㅁㅁㅁ.jar 파일을 뜻함


: <form>에서 모집한 client가 보내는 

parameter값을 받기 위한 BEANS가 필요하다.






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



[27][Member] 파일 업로드(jakarta FileUpload API), UploadSaveManager.java

[01] 전송된 File 저장(jakarta FileUpload API, 파일 업로드) 

     - 파일 전송 원리 
       파일 -> Web Browser -> 전송 -> Tomcat -> 디스크에 저장 
                                                --------------------- 
                                                cos.jar 
                                                smartupload.jar 
                                                commons-fileupload-1.3.jar(commons-io-2.4.jar, 공공 기관) 


   - http://commons.apache.org/fileupload/ -> commons-fileupload-1.3-bin.zip 
   - http://commons.apache.org/io/         -> commons-io-2.4-bin.zip 



먼저


http://archive.apache.org/dist/commons/fileupload/binaries/ 여기서

[   ] commons-fileupload-1.3-bin.zip           2013-03-27 16:54  840K 

이걸 다운받는다.


http://commons.apache.org/proper/commons-io/download_io.cgi

요기서도

commons-io-2.4-bin.zipmd5pgp

이거 다운받는다.


이게 뭐냐면 


: client가 보낸 파일을 참조할 수 있는

외부 lib가 필요하다. (다운로드) 


다운받는 중임





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


enctype="multipart/form-data"

이거 쓸 때는 파라메터 값을 받을 빈즈가 없으면 null값나옴




//---------------------------------------------------------------------------------- 

//업로드/다운로드 관련 폴더 정의 
//---------------------------------------------------------------------------------- 
//파일 업로드/다운로드 폴더 
String upDir = "/test/storage"; 
String downDir = "/test/storage"; 
 

파일이 임시 경로에 있다가 -> 실제 폴더로 가기 때문에

임시 폴더명을 지정해줘야함


업로드 안할거면 request로 써도 되는데


<%@ page contentType="text/html; charset=UTF-8" %> 

<%@ page import = "utility.*" %>

<% 

request.setCharacterEncoding("utf-8"); 

String upDir = "/test/storage"; //실제 파일이 업로드될 경로

String tempDir = "/test/temp"; //임시경로



UploadSave upload = new UploadSave(request, -1, -1, tempDir);



 

//폼의 값을 가져옵니다. 

String title = UploadSave.encode(upload.getParameter("title")); 

String content = UploadSave.encode(upload.getParameter("content")); 

String etc = UploadSave.encode(upload.getParameter("etc")); 

%> 

 

<!DOCTYPE html> 

<html> 

<head> 

<meta charset="UTF-8" /> 

<title>등록 처리</title> 

<style type="text/css"> 

*{ 

  font-family: gulim; 

  font-size: 20px; 

} 

</style> 

<link href='../css/style.css' rel='Stylesheet' type='text/css'>

</head> 

 

<body> 

<DIV CLASS='content'> 

  <% 

  out.println("title: " + title); 

  out.println("content: " + content); 

  out.println("etc: " + etc); 

%> 

 

</DIV> 

 

</body> 

</html> 

 


안 그러면 이런 거 해야함...

enctype="multipart/form-data"> 


으으 이거...!!



String upDir = application.getRealPath("/test/storage"); //실제 파일이 업로드될 경로


application.getRealPath를 해야 실제 경로를 찾아서 들어감







workspace.zip






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


출처: http://lanian.tistory.com/entry/Document-%EA%B0%9D%EC%B2%B4-JavaScript


Document 객체 JavaScript

from 분류없음
document객체는 브라우저에서 보여주는 문서에 관련된 정보에 접근할때 사용되고 자바

스크립트를 이용하여 브라우저에 출력할 때에도 사용된다.

document에는 문자열, 이미지, 폼, 링크 등 모든 페이지 상위 객체가 포함된다.

상위 객체는 window(Frame), 하위 객체에는 Applet, Area, Anchor, Link, Image, Form

등이 있다.

 

▷ 메 소 드

   ★ 공통

      * clear                : document의 내용을 삭제한다.

      * close               : open으로 시작한 document의 출력을 종료한다.

      * open               : document의 출력을 시작.

      * write               : document에 문자열을 출력한다.

      * writeln            : document에 문자열을 출력(줄바꿈 포함)한다.

 

   ★ 넷스케이브

      * getSelection    : 선택된 문자열을 반환한다.    

      * routeEvent      : 발생한 이벤트를 삭제하지 않고서 원래 상태로 되돌린다.

      * captureEvents : 특정 이벤트를 취득한다.

      * handleEvent    : 특정 이벤트 핸들러를 호출한다.

      * releaseEvents  : 특정 이벤트를 개방한다.

                                    (captureEvents로 지정한 이벤트를 개방한다.)

 

 

▷ 속  성

      * alinkColor        : 불러오는 중인 링크의 문자색을 설정.

      * bgColor           : 배경색을 설정.

      * cookie             : 쿠키 데이터.

      * domain            : 현재 문서가 포함된 도메인 이름으로 표시.

      * fgColor            : 글자색을 설정.

      * forms               : 문서에 있는 모든 입력양식 정보를 배열로 놓아놓은 변수.

      * LastModified    : 최종수정일.

      * linkColor          : 링크의 글자색을 참조 설정.

      * links                : 문서에 있는 모든 링크 객체들을 모아 놓은 배열.

      * location           : document의 URL을 설정 또는 참조한다.

      * referrer           : 이동하려는 페이지의 URL을 참조한다.

      * title                 : 페이지 제목.

      * URL                 : document의 페이지의 URL.

      * vlinkColor        : 방문한 적이 있는 링크의 글자색을 설정.

      * applets            : document에 있는 모든 애플릿 객체들을 모아놓은 배열

      * embeds           : document에 있는 모든 플러그인 객체들을 모아놓은 배열

      * images            : document에 있는 모든 이미지 객체들을 모아놓은 배열

 

 

▷ 이벤트 핸들러

      * onClick                : 버튼이나 링크, 도큐먼트, 윈도우를 클릭될때 발생.

      * ondblclick           : 버튼이나 링크, 도큐먼트, 윈도우를 더블클릭될 때 발생.

      * onkeydown        : 키를 눌렸을 때 발생.

      * onkeypress        : 키를 눌렀을 때 발생.

      * onkeyup             : 키를 눌렀다가 놓았을 때 발생.

      * onmousedown   : 마우스 버튼이 눌러질 때 발생.

      * onmouseseup   : 마우스 포인터가 벗어날 때 발생.


출처: http://html5ref.clearboth.org/doku.php?id=html5:attribute:enctype

enctype 속성

  • formenctype 속성
  • form 요소

정의

enctype 속성은 폼을 전송할때 사용할 인코딩 방법을 지정합니다.

속성 값

키워드설명
application/x-www-form-urlencoded(기본값) 모든 문자를 인코딩 합니다.
multipart/form-data어떠한 문자 인코딩도 하지 않습니다. 주로 파일 업로드 컨트롤을 제공하는 경우 사용합니다.
text/plain공백이 + 문자로 변환되며 특수 문자를 인코딩 하지 않습니다.

예제

<form enctype="키워드">
...
</form>



출처: http://runtoyourdream.tistory.com/211


 [자바스크립트]부모의 부모창을 컨트롤 하기 위해서... 
컴퓨터 자료실 | 2006/04/27 11:35 guriguriForever|icorea77

메인창에서 팝업화면을 호출 후 팝업창에서 또 다시 새로운 팝업창을 호출하였다. 
예시) 메인화면 --> 팝업1 --> 팝업2 

이때 팝업2 에서 메인화면을 컨트롤 하고자 하는 경우 parent 또는 opener..... 를 사용하게 되는데 
이렇게 될경우 팝업2 에서는 팝업1 을 인식하고 있으므로 script 오류가 발생하게 된다. 
parent는 iframe 또는 frame 구조를 사용시에 이용되고 opener. 은 팝업화면에서 부모창에 대한컨트롤시 사용된다. 
때문에 부모의 부모창을 컨트롤 하기 위해서는 

opener.opener. 이렇게 두번 사용하게되면 메인화면 에 대한 컨트롤이 가능하다. 

예를들어 

예시 :: 메인화면 --> 팝업1 --> 팝업2 

function goList(seq, name, date) { 
  opener.form1.elements["seq"].value = seq; 
  opener.form1.elements["name"].value = name; 
  opener.form1.elements["date"].value = date; 
  window.close(); 
} 

이렇게 사용할 경우 팝업2는 팝업1 에 대해 컨트롤을 하는것으로 인식하므로 스크립트 에러가 발생한다. 

팝업2 에서 메인화면으로 데이터전송 또는 컨트롤을 위해서는 

function goList(seq, name, date) { 
  opener.opener.form1.elements["seq"].value = seq; 
  opener.opener.form1.elements["name"].value = name; 
  opener.opener.form1.elements["date"].value = date; 
  window.close();            //현재화면(팝업2) 닫음 
  opener.window.close(); //팝업1 닫음 
} 

위와같이 스크립트를 사용할 경우 팝업2 에서는 메인화면에 대한 화면컨트롤이 가능하며 팝업1 과 팝업2는 스크립트가 실행되면서 자동으로 닫히게 된다. 만약 팝업화면을 닫고 싶지 않을 경우에는 window.close(); 이 부분을 주석처리하면된다. 

할수록 어려운게 자바스크립트네 쩝~~




5. 수업

진도: 

hw: 


6. 할것


왜인지 4만 쓰는 느낌이니까 템플릿 좀 수정할까

그리고 목요일! 금요일!


내일 점검한다거 마루타1 2 3이 다 우리조입니다


넘슬프다



'Programming' 카테고리의 다른 글

160425: 30회차  (0) 2016.04.25
160422: 29회차  (0) 2016.04.22
160420: 27회차  (0) 2016.04.20
160419: 26회차  (2) 2016.04.19
160418: 25회차  (0) 2016.04.18
Posted by DAVID

160420: 27회차

Programming 2016. 4. 20. 20:19

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


<script type="text/javascript">

function read(bbsno) {

var url = "read.jsp";

url += "?bbsno=" + bbsno;

url += "&col=<%=col%>";

url += "&word=<%=word%>";

location.href = url;


}

//var read = new Function("bbsno", "location.href=read.jsp;");


</script>


지금 리터럴 쪽이 혼돈스러워서 책을 보고 있는뎅

지금까지 function 생성자를 사용해서 코드 만드는 거를 배우고 있다?


근데 이 아저시는 리터럴 형식을 사용해서 함수를 정의하면 더 쉽고 에러가 발생할 확률이 줄어든대


이런 코드가 나와있음


function reflect(value){

return value;

}



var reflect = new Function("value", "return value;");


function을 권장하는 거군 ㅋㅋㅋㅋㅋㅋㅋ


이런 ㅋㅋㅋㅋㅋㅋㅋㅋ

두번만 더 고민하고 질문해야지...!!


리터럴 혼돈스러운것



질문했는데 그 일반적으로 쓰는 형태가 리터럴 형으로 쓰는 거고

저렇게 var reflect 형으로 쓰는 게 객체 생성자 이용해서 선언하는거임





----------------------킵해놓고------------------------------------------------------------------



10시 49분부터 리터럴을 접어놓고 다시 수업 듣기...


페이징!


잘라내기!


[23][BBS] PAGING의 원리, 구현, 사용 (page는 1부터 시작), SPAN 태그, 페이징 콤포넌트
[01] PAGING의 원리, 구현, 사용(page는 1부터 시작) 
     - 레코드가 많은 경우 레코드를 분할하여 가져오는 기술, 보통 
       10~20개가 하나의 페이지로 구성되어 있음. 
     - oracle은 rownum으로 지정 


지금까지는 그냥 잘라내기만 만듬 - 실제로 동작하지는 않음 'ㅅ')...

빼이징

베이징

북경오리

베이징 베이킹 덕


오리고기 먹고싶다

로스도


오리로스


치킨같이 튀긴 오리튀김

으으 영국요리인것


어쩄든 지금은 그냥 sql로 db에 인써트해줘씀 'ㅅ'


[02] 페이지 목록의 출력 

1. SPAN 태그를 이용한 상자 만들기 
   - SPAN: 특정 단어에 효과를 줄때 사용하며, DIV 처럼 라인이 변경되지 않음. 
   - SPAN 태그와 A 태그는 같은 라인에 붙일 것. 
     

<%@ page contentType="text/html; charset=UTF-8" %> 

<% request.setCharacterEncoding("utf-8"); %> 


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

<html> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

<title></title> 

<style type="text/css"> 

*{ 

  font-family: ; 

  font-size: 24px; 

} 

</style> 

</head> 

<body> 

  <span style='border: 1px; border-style: solid; padding:1px 5px; color: #888888'>1</span> 

  <span style='border: 1px; border-style: solid; padding:1px 5px; color: #888888'>2</span> 

  <span style='border: 1px; border-style: solid; padding:1px 5px; color: #888888'>3</span> 

  <span style='border: 1px; border-style: solid; padding:1px 5px; color: #888888'>4</span> 

  <span style='border: 1px; border-style: solid; padding:1px 5px; color: #888888'>5</span> 


</body> 

</html> 


이런거임미다

span은 한 라인을 나타낼 떄 씀



넘나이쁜것

아 이걸로 페이징 단추(...?) 만드는 것인가!



2. list.jsp 페이지 리스트 출력 
>>>>> /WebContent/test/page_list.jsp 
-----------------------------------------------------------------------

<%@ page contentType="text/html; charset=UTF-8" %> 
<% request.setCharacterEncoding("utf-8"); %> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title></title> 
<style type="text/css"> 
*{ 
  font-family: ; 
  font-size: 24px; 
} 
</style> 
</head> 
<body> 
<DIV style='text-align: center'> 
<% 
int totalRecord = 200; 
//얜 임의로 만든 거라서 200인데 사실 이거는 메소드 짜서 db에서 가져와야함

int totalPage = (totalRecord/10)+1; // 레코드가 1개 있어도 1페이지에 해당됨으로 +1을 함  
//한 페이지당 10개를 보여주려면 저런 식으로 하나 봄...
//근데 보통 +1 안하고 ㅁㅁ.얼마 하면 올려버리는 식으로 만드나봄... 
//만약에 나누기 해서 35.1 되면 올림 해줘서 36으로 가는걸식으로...?!?!

 
for(int i=1; i<totalPage; i++){ 
%>   
  <SPAN style='border: 1px; border-style: solid; padding:1px 5px; color: #888888; margin-left: 5px'><A href='./list.jsp?page=<%=i %>'><%=i %></A></SPAN> 
<% 
} 
%> 
</DIV> 
</body> 
</html> 

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


그리고 이제 paging.java 파일 복붙해서 뜯을거임


신남

으 오늘 커피 마셨더니 식은땀나고 안졸리고 좋군...

가슴이 뛰고...




아 -_-

주석 = remark


주석입력 단축키는 ALT + SHIFT + J

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


덜 해놓고 왜 안 되냐고 난리치지 말 것 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

집중을 해라 집중을!!


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


2시46분!


정신 통일 정진하는것...


그.... memo랑 notice쪽도 그거...그거....페이징 ㅋㅋㅋㅋㅋ추가할것



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


아나 sql문 한칸 띄어쓰기!!



[24][BBS] 새로운글에 new 이미지 표시, 페이지 변수의 유지(조회, 수정, 삭제)
[01]새로운글에 new 이미지 표시


이거 함 벌써 ㅋㅋㅋㅋㅋㅋㅋ

간신히 이해한 페이징...


한번에 import - ctrl + shift + o




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














5. 수업

진도: 

hw: 


6. 할것

홍차 티백을 찾아서 가져 오는 걸로 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

커피는 강력했다... 난 2일 못잘거심미다

'Programming' 카테고리의 다른 글

160422: 29회차  (0) 2016.04.22
160421: 28회차  (1) 2016.04.21
160419: 26회차  (2) 2016.04.19
160418: 25회차  (0) 2016.04.18
160415: 24회차  (0) 2016.04.15
Posted by DAVID

160419: 26회차

Programming 2016. 4. 19. 18:33

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


어제 create랑 reply 잔 것 메꾸기...

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

이제 search 기능도 추가할거임 'ㅅ;)


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


이거 끝내고 team 하는 중

jsp_bbs는 한번 처음부터 해봐야 될 거 같음 -_-)... 넘많이잤어...

졸려...



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

매크로처럼 같은 작업을 반복했더니 자면서도 외웠던 것은 바로 써치

http://gyh214.tistory.com/41


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

1. 리스트에 col이랑 word를 추가한다 (검색 관련 변수 선언)

String col = Utility.nullCheck(request.getParameter("col"));

String word = Utility.nullCheck(request.getParameter("word"));

2. 어 수업 ㅋㅋㅋㅋ


-생략하면 -> 리스트 -> DAO 수정해준다-

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


아 JSP_BBS 이거 list 정렬을 안 해줘서 ** 같이 나온거였음 ㅡㅡ



sql = new StringBuffer();

sql.append(" SELECT bbsno, wname, title, viewcnt, wdate, grpno, indent, ansnum, r    ");

sql.append(" FROM( ");

sql.append(" SELECT bbsno, wname, title, viewcnt, wdate, grpno, indent, ansnum, rownum r    ");

sql.append(" FROM( ");

sql.append("   SELECT bbsno, wname, title, viewcnt, wdate, grpno, indent, ansnum  ");

sql.append(" FROM bbs ");

if(word.trim().length() > 0)

sql.append(" WHERE "+col+" LIKE '%' || ? || '%' ");

sql.append(" ORDER BY grpno desc, ansnum ASC");

sql.append(" ) ");

sql.append(" ) WHERE r >= ? and r <= ? ");


저거같이 2번 정렬해줘야함.

1. 그룹 넘버는 역순으로

2. 부모와의 덧글 순서는 순차적으로




으으


넘나 재밌는 것...



notice.zip




5. 수업

진도: 

hw: 


6. 할것



'Programming' 카테고리의 다른 글

160421: 28회차  (1) 2016.04.21
160420: 27회차  (0) 2016.04.20
160418: 25회차  (0) 2016.04.18
160415: 24회차  (0) 2016.04.15
160414: 23회차  (0) 2016.04.14
Posted by DAVID

160418: 25회차

Programming 2016. 4. 18. 17:58

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


mysql = limit

oracle = rownum & 3중query


같은 것...limit를 잊어버렸다


mysql에서 잘라서 출력하는 법:

-우리의 친구들이 다 다르게 생겨서 얘 말고는 또 다름... -_-)



select * from team  

order by no desc  //구냥 순서대로 출력

limit 0, 3 // 이렇게 리미트 해주면 1부터 3까지 출력해줌

1,2,3 <- 이렇게


limit (시작위치-1),(몇개?) - 이렇게 생겼음 


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


connection 오류 뜬 것 dbopen의 문제였음.

스로우 디클레션 해줘서 그래슴니다


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



<TD><%=dto.getWdate().substring(0, 10)%></TD>

이거는 0부터 9까지임(10개)

2016-04-18

0 1 2 3  4  5 6 7 8 9

이렇게 자를 수 있음


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


a태그가 앵커태그였음 -_-


출처: http://blog.naver.com/PostView.nhn?blogId=jysaran&logNo=179028277



 Anchor Tag   앵커태그    <a>

 

오늘은 앵커태그에 대해 공부해 보도록 합시다 !

 

Anchor 태그는 이동할 때 사용되는 태그로 서로 다른 웹페이지로 이동하거나

웹페이제 내부에서 특정한 위치료 이동할 때 사용됩니다.

 

시작해 볼까요 ?ㅋㅋ

일단은 Html 기본 구조부터 작성을 해야겠죠?

 

 

 

▼ HRML 기본구조

 

<!doctype html>

<html>

<head>

<style></style>

</head>

<body>

</body>

</html>

 

 

 

 

오늘도 머라이어케리의 without you 가사를 가지고 공부를 해보도록 하겠습니다.

 

 

 

 

 ▼ 예제 1 : 외부이동

<!doctype html>

<html>

<head>

<style>머라이어케리-Without you</style>

</head>

<body>

<a href="http://music.naver.com">네이버 뮤직</a><br/>

<a href="http://naver.com">네이버</a><br/>

<hr>

<h3>머라이어케리-Without you</h3>

<p> No I can't forget this evening</p>
<p>or your face as you were leaving</p>
<p>But,I guess that's just the way The story goes </p>
<p>You always smile but in your eyes Your sorrow shows </p>
<p>yes it shows</p>
<p>No I can't forget tomorrow</p>
<p>when I think of all my sorrow</p>
<p>when I had you there But then I let you go</p>
<p>and now it's only fair that I should let you know</p>
<p>what you should know</p>

<p>*</p>
<p>I can't live</p>
<p>if living is without you</p>
<p>I can't live I can't give anymore</p>
<p>I can't live if living is without you</p>
<p>I can't give I can't give anymore</p>

<p>well I can't forget this evening</p>
<p>or your face as you were leaving</p>
<p>but I guess that's just the way</p>
<p>The story goes </p>
<p>You always smile but in your eyes</p>
<p>Your sorrow shows</p>

</body>

</html>

 

 

 

 

자~ 한번 실행해 볼까요 ?

 

 

 

 

 

 

 

 

 

완료 !!

 

상단에 네이버뮤직 , 네이버를 클릭하시면 외부 링크영역으로 이동합니다.

 

이번엔, 사이트 내에서 이동이 되도록 해 볼까요?

 

좀 전에 입력했던 태그에 몇가지 추가해 보도록 합시다.

 

 

 

 

▼ 예제 2 : 외부이동 + 내부이동

<!doctype html>

<html>

<head>

<style>머라이어케리-Without you</style>

</head>

<body>

<a href="http://music.naver.com">네이버 뮤직</a><br/>

<a href="http://naver.com">네이버</a><br/>

<hr>

<h3 id="top" >머라이어케리-Without you</h3>
<p> No I can't forget this evening</p>
<p>or your face as you were leaving</p>
<p>But,I guess that's just the way The story goes </p>
<p>You always smile but in your eyes Your sorrow shows </p>
<p>yes it shows</p>
<p>No I can't forget tomorrow</p>
<p>when I think of all my sorrow</p>
<p>when I had you there But then I let you go</p>
<p>and now it's only fair that I should let you know</p>
<p>what you should know</p>

<p>*</p>
<p>I can't live</p>
<p>if living is without you</p>
<p>I can't live I can't give anymore</p>
<p>I can't live if living is without you</p>
<p>I can't give I can't give anymore</p>

<p>well I can't forget this evening</p>
<p>or your face as you were leaving</p>
<p>but I guess that's just the way</p>
<p>The story goes </p>
<p>You always smile but in your eyes</p>
<p>Your sorrow shows</p>

<a href="#top">▲Top</a>

</body>

</html>

 

 

 

자~ 어떤 태그가 추가됬는지 눈치 채셨나요?

네 !     id 속성을 기존 a태그에 추가해 보았습니다.

잘 모르시겠다구요 ?  그럼.. 예쁜 분홍색 글씨를 다시 한 번 살펴봅시다.

 

예제2 처럼 이동하기를 원하는 태그에 Id 속성을 부여하고,

a 태그의 href 속성에 #아이디 형태의 문자열을 입력합니다.

 

즉, a 태그를 클릭하면 id속성을 갖은 위치로 이동합니다 !

 

 

 

 

▼ 결과물   :  맨~ 하단에 ▲Top  요걸 클릭하면

 

 

 

▼ 결과물  :  맨~ 성단에 네이버 뮤직,  네이버로 이동합니다.


 

 

 

 

앵커태그 <a> 생각보다 쉽죠??   

 

[출처] Anchor Tag, 앵커태그, <a> |작성자 이벤트같은 아공

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


as = alias

출처: http://gorakgarak.tistory.com/205


ORACLE ALIAS 쓰기

데이터베이스/Database 2014.09.11 10:44

Column Alias(컬럼명에 별칭을 주기 위해 사용한다)

컬럼명 as Alias

컬럼명 Alias

컬럼명 "Alias" => Alias자체에 공백을 포함하고 있는 경우에 대부분 쓴다. 공백이 없어서 당연히 쓸수있다.


오라클 DB에서 ""를 쓰는 경우는 Alias와 DB명을 지정할 경우 2가지 외에는 없다.

나머지 텍스트등은 쌍따옴표가 아닌 걍따옴표를 쓴다. Alias에 싱글코테이션을 쓰면 에러가 날것이다.


select first_name Name, salary as 연봉, commission_pct "커미션", hire_date "입사 연도" from employees





출처: http://www.gurubee.net/lecture/1018


Oracle SQL 강좌강좌목록
예명(Alias)
[2002-01-20] - 김정식 (47,647:Lv60)
62233
조회수
21
댓글수
12

 

테이블 예명(Alias)

  • - 테이블 Alias로 column을 단순, 명확히 할 수 있다.
  • - 현재의 SELECT 문장에 대해서만 유효하다.
  • - 테이블 Alias는 길이가 30자 까지 가능하나 짧을수록 더욱 좋다.
  • - 테이블 Alias는 의미가 있어야 한다.
  • - FROM절에 테이블Alias 설정시 해당 테이블 Alias는 SELECT 문장에서 테이블 이름 대신에 사용 한다.
 
-- 사원수가 3명이 넘는 부서의 부서명과 사원수 조회
SQL> SELECT a.dname, b.cnt
     FROM dept a, (SELECT deptno, COUNT(empno) cnt 
                   FROM emp 
                   GROUP BY deptno) b
     WHERE a.deptno = b.deptno
       AND b.cnt > 3     

DNAME             CNT
----------------- ----------
RESEARCH          5
SALES             6
    

  • 위 쿼리에선 총 3개의 Alias가 사용되었다.
  • 첫 번째로 dept테이블을 a라는 예명으로
  • 두 번째로 부서의 사원수인 COUNT(empno)를 cnt라는 예명으로
  • 세 번째로 부서별 사원수를 가져오는 쿼리를 b라는 예명을 사용했다
  • 위 예제와 같이 예명은 컬럼에만 주는 것이 아니라. 쿼리 문 및 테이블에도 사용할 수 있다.

태그

  • 예명 ALIAS

문서에 대하여

  • - 강좌 URL : http://www.gurubee.net/lecture/1018
  • - 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
  • - 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.



















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

출처: http://devyongsik.tistory.com/92



<jsp:include page=...>과 <@include file=...>의 차이

JSP 2008.06.13 23:18

<jsp:include page 는 자주 사용하지 않았습니다.
그냥 asp 때의 습관대로 <%@ include 를 많이 사용했죠.
<%@ include file 을 사용했을 때는 번번이 include 되는 파일이 변경된 때마다 서버의 캐시를 지웠다가 다시 로딩하고 해야했는데...즉 상위파일을 touch(변경) 시켜서 강제로 컴파일이 다시되게 해야함
<jsp:include page 는 매번 다시 컴파일 되어집니다.

<%@ include file="파일의 위치(url)" %>는 jsp 파일이 자바파일로 바꿀때 
자바문서에 삽입되어 컴파일 되는것이고
<jsp:include page=파일 />은 자바로 바뀌고 컴파일이후 실행중에 값이 들어간다
이 정도 입니다


include file 은 상위파일에서 쓰던 변수를 그대로 사용할 수 있고
include page 는 
<jsp:include page="a.jsp" flush="true">
<jsp:param name="abc" value="<%=abc%>"/>
</jsp:include>
이런식으로 useBean에서 파라미터 넘기는것 처럼.. 사용합니다..

해당 a.jsp 에서 받을때는 request.getParameter("abc")와 같이 받고요..



1. 정적인 include 지시문의 예 : <%@include file="/jsp/common/session.jsp"%>

정적이란 단어에 이미 모든 의미가 함축되어 있다. jsp 파일이 java 파일로 수정되기 전에 session.jsp 파일의 모든 내용이 부모의 jsp 로 include 된다. 그 후에 부모의 jsp 는  java -> class 파일-> html 문서 -> 웹 브라우저로 랜더링 된다. 따라서 session.jsp 파일 안에서 전역변수로 String greeting = "Hello Wordl"; 라고 정의했다면 session.jsp 를 사용하는 부모 jsp 에서는 서브릿 태그(<%%>) 에서 컴파일 에러 없이 바로 greeting 변수를 사용할 수 있다.


2. 동적인 include 지시문의 예 :

<jsp:include page="/jsp/common/uppermenu.jsp" flush="true">
</jsp:include>

동적이란 단어에 이미 모든 의미가 함축되어 있다. uppermenu.jsp 는 부모 jsp 가 java->class -> html 문서로 수정되어 실행되어질 시점에 삽입 된후 웹 브라우저로 랜더링 된다. 즉 정적 include  지시자 처럼 uppermenu.jsp 안에서 서브릿 태그를 선언하고 전역변수를 만든후에 부모 jsp 에서 그 변수를 사용할 수 없다. 동적 jsp 는 해당 파일이 수정되는 경우 다시 컴파일이 진행된다.




                  <%--@include file="/subject/include/applicationTitle.jsp"--%>
                  <jsp:include page="/subject/include/applicationTitle.jsp" flush="true">
                    <jsp:param name="btnNO" value="0"/>
                    <jsp:param name="subjectSN" value="<%=subjectSN%>"/>
                    <jsp:param name="subjectStatusCD" value="<%=subjectStatusCD%>"/>
                  </jsp:include>





출처: http://yongblog.tistory.com/entry/jspinclude-%EC%99%80-include-%EC%B0%A8%EC%9D%B4
jsp:include 와 <%@ include%> 차이
프로그래밍/Servlet & JSP 2012.09.13 10:00
I. <jsp:include>
1. 설명
-. 서버측 include가 아닌 클라이언트측의 include라 생각하면 간단하다
즉 출력 결과만(html코드)을 include 한다
-. include 되는 페이지와 변수를 같이 사용할 수 없다
2. 속성
① page
-. 포함시키고자 하는 문서의 위치를 명시한다
-. 상대경로뿐만 아니라 절대경로도 가능하다
-. 서블릿 컨테이너에 따라 HTML 페이지는 안될 수도 있다
-. get 방식으로 파라미터를 전달 할수 없다
-. 동적으로 페이지 할당이 가능하다
        즉 <jsp:include page="<%=variable%>" flush="true"/> 가 가능하다
② flush
    -. true : 문서의 출력 결과를 항상 버퍼내에서 갱신 하라는 의미이다
3. 예제
a.jsp
...
<jsp:include page="b.jsp" flush="true"/>
...

a.jsp 결과에 b.jsp 가 실행된 결과가 include 된다
즉 따로따로 실행 된 후 그 결과(html)만을 가지고 include 한다

II. <%@ include %>
1. 설명
-. 서버측 include 라고 생각하면 된다
즉 소스 실행전에 include가 된다고 보자
-. 소스 실행전 포함됨으로 변수를 같이 사용할 수 있다
-. 동적으로 페이지 할당을 할 수가 없다
2. 속성
① file
    -. 포함될 페이지를 명시한다
3. 예제
a.jsp
...
<%@ include file="b.jsp" %>
...
b.jsp 코드자체가 a.jsp에 포함된 후 실행된다.
jsp:include
<jsp:include page="/xxx.jsp" />
1. 요청시간에 처리
2. 별도의 파일로 요청 처리 흐름을 이동
3. 화면 레이아웃의 일부분을 모듈화 할 때 주로 사용된다.
@include
디렉티브
1. JSP파일을 자바 소스로 변환할 때 처리
2. 현재 파일에 삽입시킴
연결된 파일을 포함해서 같이 컴파일 한다.
include 지시어는 다른 JSP의 소스 코드를 해당 JSP에 그대로 포함시킨다
반면에 액션 태그의 <jsp:include> 태그는 다른 JSP의 소스 코드가 아니라,
다른 JSP의 실행 결과값을 해당 JSP 페이지에 포함시킨다.
또한, include는 주로 조각난 코드를 삽입을 하고자 할때 사용되고,
<jsp:include> 액션 태그는 페이지를 모듈화할때 사용된다.
즉 템플릿 페이지를 작성할때 사용된다.
<!-- 
정적인 페이지 할 때 사용한다.>
-->
<%@ include file="/include/top.jsp" %>
<hr></hr>
index.jsp입니다.<br></br><br></br>
<hr></hr>
<%@ include file="/include/bottom.jsp" %>
=============================================================================
<%-- 
동적인 페이지 할 때 사용한다.
--%>
<jsp:include page="top.jsp">
<jsp:param value="ok" name="flag"/>
</jsp:include>
<hr></hr>
main.jsp....
<hr></hr>
<jsp:include page="bottom.jsp"></jsp:include>
name - 이동할 페이지에 전달될 파라미터의 이름 ( 표현식 사용 불가 )
value - 이동할 페이지에 전달될 파라미터의 값( 표현식 사용 가능 )
받는곳에서 request.getParameter("flag");로 받는다.
=============================================================================

JSP내의 Java Code를 Designer나 HTML Coder가 보기쉽고(?), 수정하기 쉽게(?) Java Code를 HTML Tag과 같은 Tag 형태로 사용할 수 있도록 한 JSP Custom Tag.

그중에 가장 많이 쓰이는 Tag인 <jsp:include /> 하지만 이 <jsp:include /> Tag의 단점은 원격지의 JSP 페이지를 include 할 수 없는데 있다.

이처럼 <jsp:include /> Tag로 할 수 없는 것을 <c:import /> Tag는 가능하게 해준다.

그럼.. 어떻게 사용하는가?

우선... 아래의 URL에서 Taglib를 다운 받는다.

http://people.apache.org/builds/jakarta-taglibs/nightly/projects/standard/

에서 JSP 버전에 맞는 Taglib 를 다운 받는다.
다운 받은 파일을 압축을 풀면... 4개의 (doc, javadoc, lib, tld) 디렉토리와, LICENSE, NOTICE, README 파일 그리고 2개의 WAR 파일이 있다.

우리가 필요한건... 다름아닌... lib 폴더 아래의 jstl.jar , standard.jar 이다. 

이 두개의 jar 파일을 적용하고자 하는 JSP의 Container (WAS)의 /WEB-INF/lib/에 복사한다.

그리고는... JSP페이지에

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>을 추가하고,
<c:import />를 Tag를 사용하면 된다.

예)
<%
String url = http://xxx.xxx.xxx.xxx/naver/test.jsp;
%>
<c:import url="<%= url %>" charEncoding="EUC-KR">
<c:param name="query" value="민원" />
<c:param name="method" value="get" />
</c:import>

위와 같이 사용하면 원격지의 WEB 페이지를 include와 유사하게 사용할 수 있다.


----------------------------------------------------------------------------------------------------
위와 같은 환경에서 작업을 해야만 하는 이유가 있다.

WWW <---> [Firewall] <---> WEB <---> [Firewall] <---> WAS

와 같은 환경에서 WAS 서버에서는 외부망(인터넷망)으로 접속이 불가능하며, 오직 WAS와 WEB서버간의 특정 PORT를 열어서 둘간의 통신만 가능하는 경우가 있다.

그런데... 외부망 접속이 되지 않는 WAS에서 인터넷 상에 존재하는 데이터를 읽어와서 가공한 후
그 데이터를 JSP에 나타내야 하는 경우가 발생했다.

처음 시도는 RMI였다. RMI는 WAS와 WEB서버간 RMI Registry를 통해 원격 객체를 등록한 후 WAS에서 WEB의 JAVA Code를 로컬에 있는 객체처럼 사용할 수 있기 때문이었다.

하지만... RMI Code는 완성되었는데... WAS와 WEB서버간 열수있는 PORT가 최소 2개있어야 하는데... PORT를 추가로 OPEN할 수 없는 상황이었다. 즉, RMI로 프로그램을 작성했지만... 
환경적 문제로 인하여 RMI를 사용할 수 없게된거다. ToT

그러다가... 생각해낸 방법이 Http 통신이다.
WAS와 WEB서버간 RMI를 위한 PORT를 OPEN한 상태였기 때문에... WEB서버에 추가적으로 Tomcat을 설치하고, 그 Tomcat의 서비스 포트를 RMI 등록용 PORT로 맞춰서 WAS에서 처리해야 할 Java 및 JSP 코드를 WEB서버에 Tomcat을 설치하고 Tomcat을 통해 처리한 후 WAS에 있는 JSP에서 include 할 계획이었다.

앗! 그러나... <jsp:include /> 이 Tag는 원격지 파일 include가 안되는 거다. 또한번 좌절...
하지만... 결국 해결책을 찾았다. 바로 <c:import /> Tag였다.

이 번 일을 통해서.. 중요한 2가지를 배울 수 있었다.
하나는 RMI와 관련된 내용이고, 또 하나는 여기에 서술한 <c:import /> Tag

갈증을 해소하기 위해서 삽질 중이라면... 중간에 포기하지마라...
삽질이 결국 갈증을 해소해준다. 



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



----------------------------------------점심먹고 우유도 먹었음------------------------------

배부름

졸림

배부름

배부름배부름





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



게시판만드쉬는것


다만드심


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


  grpno   NUMBER(7)     DEFAULT 0, -- 부모글 번호 

  indent  NUMBER(2)     DEFAULT 0, -- 답변여부,답변의 깊이

  ansnum  NUMBER(5)     DEFAULT 0, -- 답변 순서 


이제 덧글 달 수 있게 만들거임!~~!~~~!!~~~~~~~!!


부모글: 원래 글 -_-? (답변이 달릴 수 있는 글)

근데 덧글의 grpno는 부모글의 grpno랑 서로 같다


indent = 이거 깊이인데

맨 첨 거는 인덴트가 0

그 다음 덧글은 인덴트가 1

그 담담애는 2

(들여쓰기 순서같은것)


ansnum - 새 글이 들어올 때 부모 글 바로 밑으로 들어가는뎅 그거를 인덱스 붙이는 건가봄...



그러니까 

ansnum = 순서 - 자기 부모보다 크면 됨(1)

맨 처음 부모 - 0

답변일때만 부모 + 1



indent = 깊이(답변아닌건 0임)

grpno - 이게뭐더라? ㅡㅡ 부모의 bbsno인가?


 

ansnum - 항상 새로운 글이 부모 밑에 달리게 하려고 쓰는 것

1. 업데이트 먼저 하고 -> 2. 인서트하는것


아! 내 부모의 grpno와 같으면서! 걔 보다 큰 ansnum이 있는 애가 있으면 걔를 update시킴! (아!)

그담에 insert!




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


이거 추가하려면 crud 다 바꿔야됨 ㅋㅋㅋㅋ잼

졸면서 했음...


분석할 것




jsp_bbs.zip




































5. 수업

진도: 

hw: 


6. 할것


OCP 6월에 보기로 한 것 체크했음.

jsp끝나기 전에 게시판을 안보고 10분안에 만드는걸 목표로 

-아니 목표가 아니라 시험을 본다닠ㅋㅋㅋㅋㅋㅋㅋ


아 지금 3시 42분인데

3시간남았군!



'Programming' 카테고리의 다른 글

160420: 27회차  (0) 2016.04.20
160419: 26회차  (2) 2016.04.19
160415: 24회차  (0) 2016.04.15
160414: 23회차  (0) 2016.04.14
160412: 22회차  (0) 2016.04.12
Posted by DAVID

160415: 24회차

Programming 2016. 4. 15. 13:24

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


어제 하던 거


<link href = "" rel "">

href 의 ../css/style.css 같은 경우 ..가 root 밖으로 나오는 것이라서 같은 폴더 내에 위치하면 안 써줘도 된다.

근데 보통 따로 만드니까 저렇게 많이 쓰나 봄


그리고 밑에 가져다가 쓸 떄는 <ㅁㅁㅁ class = "title"> 같이 가져다 씀


<jsp: include page = " "/>

/menu/top.jsp 

처음에 /는 root , 메뉴는 folder, top.jsp는 page... 

인클루드는 루트 경로 다 써주지 않아도 되어서 좀 편함맨임


이게 모델 1 스타일임

모든 페이지에 top bottom을 포함시키는 고인돌같은 것...

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

style.css에 이런 게 들어있습니다.


.title{

  font-size: 28px;

  text-align: center;

  border-style: solid;   /* 실선 */

  border-width: 1px;     /* 선 두께 */

  border-color: #AAAAAA; /* 선 색깔 */

  color: #000000;        /* 글자 색깔 */

  width: 30%;            /* 화면의 30% */ 

  padding: 10px;         /* 위 오른쪽 아래 왼쪽: 시간 방향 적용 */

  

  /* padding: 50px 10px;  50px: 위 아래, 10px: 좌우 */

  /* padding-top: 30px;  상단만 간격을 30px 지정   */

  

  margin: 20px auto; /* 가운데 정렬 기능, 20px: 위 아래, auto: 오른쪽 왼쪽*/

}

 

/* 내용 */

.content{

  font-size: 24px;

  text-align: center;

  width: 100%;

  padding: 10px;  /* 위 오른쪽 아래 왼쪽 */

  margin: 0 auto; /* 가운데 정렬 */

}

 

/* 하단 메뉴 */

.bottom{

margin: 20px auto;

  text-align: center;

  width: 100%;

  padding: 10px;  /* 위 오른쪽 아래 왼쪽 */

}

 

 

/* 테이블에 CSS 적용 */

TABLE{

  margin: 0 auto;            /* 테이블 가운데 정렬 */

  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 

  border-width: 1px;         /* 테이블 외곽선 두께 */ 

  border-style: solid;       /* 테이블 외곽선 스타일 */

  border-collapse: collapse; /* 컬럼의 외곽선을 하나로 결합 */

 

}

 

TH{

  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 

  border-width: 1px;         /* 테이블 외곽선 두께 */ 

  border-style: solid;       /* 테이블 외곽선 스타일 */

 

  color: #FFFFFF;            /* 글자 색 */ 

  background-color: #668db4; /* 배경 색 */

  padding: 5px;              /* 셀 내부 간격 */

}

 

 

td{

  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 

  border-width: 1px;         /* 테이블 외곽선 두께 */ 

  border-style: solid;       /* 테이블 외곽선 스타일 */

 

  color: #000000;            /* 글자 색 */ 

  background-color: #FFFFFF; /* 배경 색 */

  padding: 5px;              /* 셀 내부 간격 */  

}

 

 

.input{

  padding: 0px;

  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 

  border-width: 1px;         /* 테이블 외곽선 두께 */ 

  border-style: solid;       /* 테이블 외곽선 스타일 */

 

  border-top-style: none;

  border-right-style: none;

  border-left-style: none; 

}

 

.textarea{

  padding: 0px;

  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 

  border-width: 1px;         /* 테이블 외곽선 두께 */ 

  border-style: solid;       /* 테이블 외곽선 스타일 */

 

  border-top-style: none;

  border-right-style: none;

  border-left-style: none; 

}

 

A:link {     /* A 태그의 링크 속성 */

  text-decoration: none;     /* 문자열 꾸미기값을 지정하지 않음, 밑줄 삭제 */

  color: black;              /* 글자색깔 검정 */

}

 

A:hover{     /* A 태그에 마우스가 올라 갔을 경우 */

  text-decoration: none;     /* 문자열 꾸미기값을 지정하지 않음, 밑줄 삭제 */

  background-color: #E6F7FF; /* 배경 색 변경*/

  color: black;              /* 문자열 색깔 */ 

}

 

A:visited{     /* A 태그의 링크를 방문한 경우 */

  text-decoration: none;     /* 문자열 꾸미기값을 지정하지 않음, 밑줄 삭제 */

  color: black;              /* 글자색깔 검정 */

}


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


팀 짜는 것 얘기중... ★

으으 프로젝트! :<



------------------오후에는 list에 페이징 + 답변하기 처리 들어감! :>

수정 / 삭제시 password 검증도 들어감!



----------------------------------------------2시54분ㄷ임


dynamic web project 만들었음 - jsp_bbs


[14][BBS] 게시판, DBMS SQL, 사용 Query
[01] 게시판 

- Eclipse Setting 
          type: Dynamic Web Project 
          name: jsp_bbs 
       Package: bbs
                  utility 


   


------------------------------------------------------------------------------ 
1. 게시판 테이블 구조 
 
DROP TABLE bbs PURGE; 
 
CREATE TABLE bbs ( 
  bbsno   NUMBER(7)     NOT NULL,  -- 글 일련 번호, -9999999 ~ +9999999 
  wname   VARCHAR(20)   NOT NULL,  -- 글쓴이 
  title   VARCHAR(100)  NOT NULL,  -- 제목(*) 
  content VARCHAR(4000) NOT NULL,  -- 글 내용 
  passwd  VARCHAR(15)   NOT NULL,  -- 비밀 번호 
  viewcnt NUMBER(5)     DEFAULT 0, -- 조회수, 기본값 사용 
  wdate   DATE          NOT NULL,  -- 등록 날짜, sysdate 
  grpno   NUMBER(7)     DEFAULT 0, -- 부모글 번호 
  indent  NUMBER(2)     DEFAULT 0, -- 답변여부,답변의 깊이
  ansnum  NUMBER(5)     DEFAULT 0, -- 답변 순서 
  PRIMARY KEY (bbsno)  
); 
 
//오 grpno indent ansnum은 답변을 나타낼 때 필요한 것임ㅇㅇ
 
 
2. 글 추가(C: Create) 
 
- MAX(bbsno): bbsno 컬럼에서 최대값을 추출 
SELECT MAX(bbsno) as max FROM bbs; 
 
 MAX 
 ---- 
 NULL <- 값이 없는 경우 
 
 
SELECT MAX(bbsno)+1 as max FROM bbs; 
 
 MAX 
 ---- 
 NULL <- 사칙연산이 의미가 없음. 
 
  
- NVL(): null 값을 0으로 변경 가능함. 
SELECT NVL(MAX(bbsno), 0) as max FROM bbs; 
 
 MAX 
 --- 
   0 
   
 
- 새로운 번호의 생성   
SELECT NVL(MAX(bbsno), 0) + 1 as bbsno FROM bbs; 
 
BBSNO 
 ----- 
     1 
 
     
- 서브쿼리를 이용한 레코드 추가 
INSERT INTO bbs(bbsno, wname, title, content, passwd, wdate)  
VALUES((SELECT NVL(MAX(bbsno), 0) + 1 as bbsno FROM bbs), 
'왕눈이', '제목', '내용', '123', sysdate);                 
 
 
         
3. 전체 글 목록(S:Total Select List), 최신글 먼저 출력 
   - ASC: 오름 차순, DESC: 내림 차순 
SELECT bbsno, wname, title, content, passwd, viewcnt, wdate, grpno, indent, ansnum 
FROM bbs  
ORDER BY bbsno DESC; 
 
 BBSNO WNAME TITLE CONTENT PASSWD VIEWCNT WDATE                 GRPNO INDENT ANSNUM 
 ----- ----- ----- ------- ------ ------- --------------------- ----- ------ ------ 
     1 왕눈이   제목    내용      123          0 2013-10-31 20:46:18.0     0      0      0 
 
 
      
4. 조회수 증가 
UPDATE bbs 
SET viewcnt = viewcnt + 1 
WHERE bbsno=1; 
 
 
 
5. 1건의 글 보기(R:Read, PK 사용) 
SELECT bbsno, wname, title, content, passwd, viewcnt, wdate, grpno, indent, ansnum 
FROM bbs  
WHERE bbsno = 1; 
 
 PDSNO WNAME TITLE CONTENT PASSWD VIEWCNT WDATE                 GRPNO INDENT ANSNUM FILENAME FILESIZE 
 ----- ----- ----- ------- ------ ------- --------------------- ----- ------ ------ -------- -------- 
     1 왕눈이   제목    내용      123          0 2013-10-21 21:07:30.0     0      0      0 file.txt        0 
 
 
 
 
6. 글 수정(U:Update), PK는 레코드를 구분하는 고유 기능을 가지고 있음으로 
   수정하는 것은 권장하지 않음. 
    
-- PK 수정, PK는 중복 충돌이 발생 할 수 있음으로 변경을 권장하지 않음.  
   
-- 일반 컬럼의 변경, 일반적인 UPDATE임    
UPDATE bbs 
SET wname='왕눈이', title='비오는날', content='개구리 연못' 
WHERE bbsno = 1; 
 
 PDSNO WNAME TITLE CONTENT PASSWD VIEWCNT WDATE                 GRPNO INDENT ANSNUM  
 ----- ----- ----- ------- ------ ------- --------------------- ----- ------ ------  
     1 아로미   제목2   내용2     123          0 2013-10-21 21:07:30.0     0      0      0 
 
     
-- 패스워드 검사 
SELECT COUNT(bbsno) as cnt 
FROM bbs 
WHERE bbsno=1 AND passwd='123'; 
 
 CNT 
 --- 
   1 
      
      
 
7. 글 삭제(D:Delete)
-- 모든 레코드 삭제
DELETE FROM bbs; 
 
-- 1번 레코드만 삭제
DELETE FROM bbs WHERE bbsno=1; 
 
 
 
8. 답변 
 
1) 모든 레코드 삭제 
DELETE FROM bbs; 
 
 BBSNO  TITLE    GRPNO INDENT ANSNUM 
 -----   -----    ----- ------ ------ 
     1  부모글1     1      0      0 
 
      
 BBSNO  TITLE    GRPNO INDENT ANSNUM 
 -----  -----    ----- ------ ------ 
     2  부모글2      2      0      0 
     1  부모글1      1      0      0 
 
      
 BBSNO  TITLE            GRPNO INDENT ANSNUM 
 -----  -----            ----- ------ ------ 
     4  부모글4            4      0      0    
     3  부모글3            3      0      0      
     2  부모글2            2      0      0 
     1  부모글1            1      0      0 
       
 
4) 부모글(일반적인 글) 등록 
 
INSERT INTO bbs(bbsno, wname, title, content, passwd, wdate, 
grpno)  
VALUES((SELECT NVL(MAX(bbsno), 0) + 1 as bbsno FROM bbs), 
'왕눈이', '부모글3', '내용', '123', sysdate,
(SELECT NVL(MAX(grpno), 0) + 1 as grpno FROM bbs)
);                 
 
         
SELECT bbsno, title, grpno, indent, ansnum 
FROM bbs  
ORDER BY grpno DESC, ansnum ASC; 
  
     
5) 답변처리
--read(부모의 title,grpno,indent,ansnum) : 첫번째
select bbsno, title, grpno, indent, ansnum
from bbs
where bbsno=2 --부모의 글
 
 BBSNO TITLE   GRPNO INDENT ANSNUM
 ----- ----- - ---- ------ ------
     2 부모글1       2      0      0
     
--답변등록(부모의grpno,부모+1 -> indent,ansnum): 세번째
INSERT INTO bbs(bbsno, wname, title, content, passwd, wdate, 
grpno,indent,ansnum)  
VALUES((SELECT NVL(MAX(bbsno), 0) + 1 as bbsno FROM bbs), 
'아로미', '부모글1 답변글2', '내용', '123', sysdate,2,1,1);
 
     
--부모글의 2차이상의 답변인 경우 ansnum(답변의 순서) 재정렬 :두번째
UPDATE bbs 
SET ansnum = ansnum + 1 
WHERE grpno=2 AND ansnum > 0; 
 
 
--------------------------------------------------------------------      
 
  
9. 검색 글 목록(S:Search List), title 컬럼에 '제목'이란  
   단어가 들어가 있는 레코드 검색 
    
  
기타)  
- WHERE title LIKE '%독도%': 독도라는 문자열이 발견되면 전부 해당(*)  
- WHERE title LIKE '독도%' : 독도로 시작하는 문자열 검색 
- WHERE title LIKE '%독도' : 독도로 끝나는 문자열 검색 
- WHERE title LIKE '독도'  : 독도와 일치하는 문자열 검색 
- WHERE title = '독도'     : 독도와 일치하는 문자열 검색, LIKE '독도' 동일 
- WHERE title = '__독도'   : 한국독도, 동해독도와 같은 패턴의 문자열 검색 
 
 
1) 성명 검색 글 목록(S:Search List) 
SELECT bbsno, wname, title, content, passwd, viewcnt, wdate, grpno, indent, ansnum 
FROM bbs  
WHERE wname LIKE '%왕눈이%' 
ORDER BY bbsno DESC;  
 
 
2) 제목 검색 글 목록(S:Search List) 
SELECT bbsno, wname, title, content, passwd, viewcnt, wdate, grpno, indent, ansnum 
FROM bbs  
WHERE title LIKE '%독도%' 
ORDER BY bbsno DESC;  
 
 
 
3) 내용 검색 글 목록(S:Search List) 
SELECT bbsno, wname, title, content, passwd, viewcnt, wdate, grpno, indent, ansnum 
FROM bbs  
WHERE content LIKE '%독도%' 
ORDER BY bbsno DESC;  
 
 
 
4) 파이프 기호를 통한 SQL 결합 
SELECT ('A' || 'B' || 'C' || 'D') as "grade" 
FROM dual; 
 
 grade 
 ----- 
 ABCD 
  
 
SELECT ('등록자: ' || wname) as "wname"  
FROM bbs; 
 
 wname 
 --------- 
 등록자: 홍길동 
 등록자: 홍길동 
 등록자: 홍길동 
 등록자: 홍길동 
 


----------------------------------------------파워복붙


[15][BBS] Design Pattern, DBOpen.java, DBClose.java, DTO: BbsDTO.java
01] 설계 

1. Design Pattern 
   list.jsp -> BbsDAO.java -> DBOpen.java, DBClose.java -> Oracle/MySQL DBMS 
                                                         안끊어주면 안됨!!
   
       


'ㅅ')crud는 dao가 함 :>


   

   




----------------------------------------------또 파워복붙



[02] DTO(Data Transfer Object, VO: Value Object) 생성 

   - DTO(Data Transfer Object, Value Object, Bean, Domain) 
     . 하나의 레코드를 객체로 저장합니다. 레코드가 10개이면 DTO(VO)객체도  
       10개가 생성됩니다. 
     . 필드들은 접근 제한자를 전부 private으로 지정합니다. 
     . oracle의 char, varchar, varchar2, date는 String으로 선언합니다. 
     . number(5)는 int로 선언합니다. 
     . number(5, 1)은 float 또는 double로 선언합니다. 정수 4자리, 소수점 이하 1자리
       number(전체 자리수, 소수점 이하 자리수)  - 요럴 때 정수 자리수는 맞춰줘야 함 !!! 소수점은 ㄱㅊ


     . 멤버 변수(필드)의 접근 메소드는 public으로 선언합니다. 
     . 필드의 주석은 '/** */'의 형태로 DOC 주석을 지정합니다. 

//이예~ 자바독'ㅅ'


     . SELECT된 레코드가 많은 경우 오라클은 SubQuery, MySQL은 limit등을 

       이용해서 레코드를 분할해서 가져옵니다.(Paging) 
//어 홈페이지 호스팅을 할 때 mysql이 더 편하댕 'ㅅ' - oracle이 지원을 안함 (가격창렬)      

   - DTO 생성 과정 

     1) 멤버 변수(필드) 선언, 멤버 변수(필드) 주석 처리 

     2) getter, setter 선언 



복붙복붙



이클립스 패키지도 잘 만들어줌 짱짱맨


public class BbsDTO { 

  /** 번호 */ 

  private int bbsno; 

  /** 글쓴이 */ 

이런 식으로 doc 주석을 쓰면 나중에 javadoc같은걸로 뽑으면 이쁩니다



----------------------------------------------------------------------------------복붙해서 끗'ㅅ'




이렇게 만들고




이렇게 씁니다.




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

전송 완료하고 close 하기!



jsp_bbs.zip










5. 수업

진도: 

hw: 


6. 할것


금요일이니까 크롬 초기화하고 갈 것

'Programming' 카테고리의 다른 글

160419: 26회차  (2) 2016.04.19
160418: 25회차  (0) 2016.04.18
160414: 23회차  (0) 2016.04.14
160412: 22회차  (0) 2016.04.12
160408: 20회차  (1) 2016.04.08
Posted by DAVID

160414: 23회차

Programming 2016. 4. 14. 18:20

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것


notice 변경


select nvl(max(no),0)+1 from notice

↑nvl문


sysdate



oracle은 comma 관리를 잘 해야 한다.


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


4시 37분부터 수업 시작이쉰것



[12][메모장] 등록, 조회, 수정, 삭제, Action Tag(useBean, setProperty, getProperty) 변환

[01] 등록 

http 프로토콜을 이용해서 요청한다.

웹 컴포넌츠- jsp

자바빈 - 디애이오 디티오 부이오친구들



[02] Action Tag 

1.  <jsp:useBean  id="" class=""  scope=""/>

   - id와 scope 속성에 맞는 기존의 존재하는 객체를 먼저찾고 찾지 못했을
   경우에 새로운 객체를 생성한다.

//기존에 이름이 같은 애가 있으면 코드 이상해지는거십니다

   - id : 빈을 유일하게 구분하는 속성
   - class : 빈의 패키지를 포함한 이름
   - scope : application, session, request,page   
     자바빈즈의 유효범위(생명력이 다하는 때까지)를 나타내며, 기본값은 page


  application : 응용프로그램 모든 페이지에서 자바빈즈 객체 사용
  session      : 세션이 유효한 페이지까지 자바빈즈 이용가능   

//브라우저가 서버가 연결되어진 상태  
  request     : request 객체가 영향을 미치는 모든 JSP페이지 까지 자바빈즈
                  사용가능
  page        : 현재의 jsp페이지 내에서만 사용가능, 기본값으로 지정하지
                  않으면 이옵션 적용
페이지가 젤 작은 유효범위
애플리케이션이 제일 큰 유효범위



2. <jsp:useBean>  
   <jsp:setProperty name=""  property="" />

  - parameter의 값을 bean의 필드에 저장
 
  - name:bean name
  - property : 빈 필드명

조기다가 * 넣으면 모든 setter를 다 사용 가능 :>


3. <jsp:getProperty name=""  property="" />
  
 -  bean의 필드에서 값을 가져옴


얘는 표현식 없이 getter 안쓰고 바로 출력 가능 :> - 이긴 한데 *을 못쓰니까 그게 그거야... -.-

길이상으로 그게 그거여서 그냥 <%=dto.getPop() %> 같이 쓰는 게 짧음


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

[13] CSS의 사용, Action TAG를 이용한 Template 페이지의 제작 실습

[01] CSS(Cascading Style Sheet)의 사용 


인클루드 액션태그!


     - HTML은 구조 및 데이터 출력의 목적을 갖으며 CSS는 출력되는 HTML을
       시각적인 효과를 적용하는 기능을 함.

 

     - HTML에서 시각적인 부분을 CSS로 분리하면 유지보수성이 향상된
       웹사이트 개발가능. - 디자인 쪽은 따로 분리하는 것이 좋음...
       . HTML이 간결해짐.


 

     - SELECTOR{속성:값}의 형태, SELECTOR(태그 선택자)는
       어느 태그에 CSS를 적용할지를 지정
 
       예)
          BODY{         <-- BODY 태그에 적용
              font-size: 20px;
          }
 
          OL LI{        <-- OL태그안의 LI 태그
              font-size: 20px;
          }
 
          *{            <-- 모든 태그
              font-size: 20px;
          }
 
          #menu LI{     <-- id가 menu인 태그안의 LI 태그
              font-size: 20px;
          }

          .title{       <-- class 속성으로 사용
              text-align: center;
          }
 

- 주석: /* */

 
     - 태그에 class 속성과 style 속성이 있으면 style속성이 우선 적용 됩니다.
      <td width="500" class="td_left" style="height:250px" >
         <%=content%>
       </td>


- 스타일 속성 - 클래스 속성은 보통 생각하는 거랑 반대임


 

1. 태그에 직접 스타일을 주는 경우
  - 태그 발생시마다 스타일을 적용하여 주어야 함으로 반복 코드가 많이 발생되.

    <DIV style='font-size: 24px'></DIV>




2. <HEAD>태그안에 스타일을 주는 경우
   - 태그안에 직접 명시한 것보다 우수하나 다른 파일에서는 CSS 가져다 사용이 어려움.
  

    <style type="text/css"> 

    *{ 
      font-family: gulim; 
      font-size: 24px; 
    } 
    </style> 





3. CSS 파일에 스타일을 주는 경우(권장)
   - CSS를 독립 파일로 만들어두어 프로젝트에 경로 설정만으로 재사용이 가능.
   - CSS 파일의 사용: <link href="../css/style.css" rel="Stylesheet" type="text/css">
                            //얘네를 빠트리면 인식이 안된다 ! href + rel + type

>>>>> /WebContent/css/style.css 

/* 제목 */
.title{
  font-size: 28px;
  text-align: center;
  border-style: solid;   /* 실선 */
  border-width: 1px;     /* 선 두께 */
  border-color: #AAAAAA; /* 선 색깔 */
  color: #000000;        /* 글자 색깔 */
  width: 30%;            /* 화면의 30% */ 
  padding: 10px;         /* 위 오른쪽 아래 왼쪽: 시간 방향 적용 */
  
  /* padding: 50px 10px;  50px: 위 아래, 10px: 좌우 */
  /* padding-top: 30px;  상단만 간격을 30px 지정   */
  
  margin: 20px auto; /* 가운데 정렬 기능, 20px: 위 아래, auto: 오른쪽 왼쪽*/
}
 
/* 내용 */
.content{
  font-size: 24px;
  text-align: center;
  width: 100%;
  padding: 10px;  /* 위 오른쪽 아래 왼쪽 */
  margin: 0 auto; /* 가운데 정렬 */
}
 
/* 하단 메뉴 */
.bottom{
margin: 20px auto;
  text-align: center;
  width: 100%;
  padding: 10px;  /* 위 오른쪽 아래 왼쪽 */
}
 
 
/* 테이블에 CSS 적용 */
TABLE{
  margin: 0 auto;            /* 테이블 가운데 정렬 */
  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 
  border-width: 1px;         /* 테이블 외곽선 두께 */ 
  border-style: solid;       /* 테이블 외곽선 스타일 */
  border-collapse: collapse; /* 컬럼의 외곽선을 하나로 결합 */
 
}
 
TH{ //th만의 배경색 지정 가능
  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 
  border-width: 1px;         /* 테이블 외곽선 두께 */ 
  border-style: solid;       /* 테이블 외곽선 스타일 */
 
  color: #FFFFFF;            /* 글자 색 */ 
  background-color: #668db4; /* 배경 색 */
  padding: 5px;              /* 셀 내부 간격 */
}
 
 
td{
  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 
  border-width: 1px;         /* 테이블 외곽선 두께 */ 
  border-style: solid;       /* 테이블 외곽선 스타일 */
 
  color: #000000;            /* 글자 색 */ 
  background-color: #FFFFFF; /* 배경 색 */
  padding: 5px;              /* 셀 내부 간격 */  
}
 
 
.input{
  padding: 0px;
  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 
  border-width: 1px;         /* 테이블 외곽선 두께 */ 
  border-style: solid;       /* 테이블 외곽선 스타일 */
 
  border-top-style: none;
  border-right-style: none;
  border-left-style: none; 
}
 
.textarea{
  padding: 0px;
  border-color: #AAAAAA;     /* 테이블 외곽선 색깔 */ 
  border-width: 1px;         /* 테이블 외곽선 두께 */ 
  border-style: solid;       /* 테이블 외곽선 스타일 */
 
  border-top-style: none;
  border-right-style: none;
  border-left-style: none; 
}
 
A:link {     /* A 태그의 링크 속성 */
  text-decoration: none;     /* 문자열 꾸미기값을 지정하지 않음, 밑줄 삭제 */
  color: black;              /* 글자색깔 검정 */
}
                                             
A:hover{     /* A 태그에 마우스가 올라 갔을 경우 */
  text-decoration: none;     /* 문자열 꾸미기값을 지정하지 않음, 밑줄 삭제 */
  background-color: #E6F7FF; /* 배경 색 변경*/
  color: black;              /* 문자열 색깔 */ 
}
 
A:visited{     /* A 태그의 링크를 방문한 경우 */
  text-decoration: none;     /* 문자열 꾸미기값을 지정하지 않음, 밑줄 삭제 */
  color: black;              /* 글자색깔 검정 */
}

memo -> webcontent -> css 폴더 -> style.css


좀 졸았음.
http://lectureblue.pe.kr/reqtiles/read.jsp?bbsno=82&nowPage=2&col=&word=&code=7
다시 읽을 것


이건 css_test.jsp


<%@ page contentType="text/html; charset=UTF-8" %> 

<% request.setCharacterEncoding("utf-8"); %> 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

<html> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

<title></title> 

<style type="text/css"> 

*{ 

  font-family: gulim; 

  font-size: 24px; 

} 

 

#idcss{

  color: #FF0000;             /* 빨간색 */

  background-color: #FFFF00;  /* 노란색 */

  font-size: 50px;

  text-align: center;

  width: 35%;

  margin: 0 auto;

}

</style> 

<!-- <link href="./style.css" rel="Stylesheet" type="text/css"> -->

</head> 

<body> 

  <DIV class='title'>게시판 version 2.0</DIV>

  

  <DIV class='content'>내용</DIV>

  

  <TABLE class='table'>

    <TR>

      <TH>번호</TH>

      <TH>제목</TH>

      <TH>내용</TH>

    </TR>

    <TR>

      <TD align='center'>1</TD>

      <TD align='center'>월요일</TD>

      <TD>첫눈</TD>

    </TR>

    <TR>

      <TD align='center'>2</TD>

      <TD align='center'>화요일</TD>

      <TD>메모장 제작</TD>

    </TR>

    <TR>

      <TD align='center'>3</TD>

      <TD align='center'>수요일</TD>

      <TD>메모장 테스트</TD>

    </TR>

  </TABLE>

 

  <DIV class='content'>

    <A href='http://www.kma.go.kr'>기 상 청</A><br>

  </DIV>  

  

  <DIV id='idcss'>

    <br>

    고유한 CSS 적용

    <br><br>

  </DIV>

  <DIV class='bottom'>하단 메뉴</DIV>

</body> 

</html> 

 


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


[02] Action TAG를 이용한 Mneu 페이지의 제작 실습

     - <%@ include file="./ssi.jsp" %>
@ 들어가는 스크립틀릿은 지시자!
       ssi.jsp의 JSP 소스가 그대로 복사되어 원본 파일에 추가됨.    

차이점: 한꺼번에 파싱 - 한꺼번에  컴파일한다



     - <jsp:include page="/menu/top.jsp" flush="false"/>
이건 액션 태그

       top.jsp가 처리가 되고 나서 HTML로 변경된 결과가 포함.
flush를 true로 놓으면 오류가 많이 남 (기존 값 인정하고 뭐시기)
false로 놓으면 기존에 가던 거 취소하고 그냥 자기 자신을 보냄 - false가 나음
그래서 기본값이 false임
차이점: 각자 파싱 - 각자 컴파일한다 

 
     - menu는 jsp:include Action 태그를 사용해야 페이지간 간섭을
       피할 수 있습니다. 
       include file을 사용하면 같은 변수가 2번이상 선언될 경우 소스 충돌로
       에러 발생.

     - menu Layout(스마트폰 편리)


       ──────────────────────
                        상단 주메뉴                 
                          top.jsp                   
       ──────────────────────
                                                    
                                                    
                            내 용                  
                                                         
                                                        
        ─────────────────────       
                         하단 메뉴                   
                         bottom.jsp                  
        ─────────────────────
 


이런 애들은 include action tag로 만들면 항상 위 아래 보여줌

// 중복되어지는 것들은 파일로 한번에 컴파일해서 실행! :>

// 항상 보이는 것들은 각각 파일로 따로 만들어서 실행

















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

Include 지시자와 Include action태그의 차이점을

http://khquasar.egloos.com/673282

★ Include 지시자

JSP 페이지내부에 다른 파일을 포함하고자 할 때 사용하며 포함된 파일의 내용이 지시자로 지정된 위치에 놓이게 한다.

즉, 해당 JSP page로 복사된 형태로 들어가 같이 번역(서블릿 파일로 변환)되고 컴파일되어 하나의 JSP 파일을 생성한다

★ Include action

JSP 페이지 수행시점에 해당 URL을 실행시켜서 결과를 포함시킨다.

Include 지시자와는 달리 실행시점에 동적/정적인 개념이 포함된다.


==================================================================


include 에는 크게 2가지가 있습니다. 잘 아시는 <%@ include file="" %> 과 조금은 낯선 <jsp:include page="" flush="true"/> 입니다. 일단 3개의 파일을 먼저 보겠습니다. 

  



ok.jsp

<%@ page contentType="text/html;charset=euc-kr"%><%

String ab="파일 ok.jsp 입니다.";

%><%=ab%>

<br>

<%@ include file="okD.jsp" %>

<br>

<jsp:include page="okA.jsp" flush="true"/>



  


unix 계열에서 돌아갈 경우 소스입니다. 한글 때문에 한번더 꽈줍니다. 


okD.jsp

<%

String abc="파일 okD.jsp 입니다.";

%><%=new String(abc.getBytes("8859_1"),"euc-kr")%>

<br><%=new String("HTML 텍스트입니다.".getBytes("8859_1"),"euc-kr")%>

<br>



  


환경(jsp엔진)에 따라 아래처럼 인코딩을 없애줘도 됩니다. 재수가 좋은 경우죠 


(okD.jsp)

<%

String abc="파일 okD.jsp 입니다.";

%><%=abc%>

<br>HTML 텍스트입니다.

<br>



  


page Directive로 charset을 정해주어야 한글이 깨지지 않습니다. 

okA.jsp

<%@ page contentType="text/html;charset=euc-kr"%><%

String abc="파일 okA.jsp 입니다.";

%><%=abc%>

<br>

<br>



  


파일 3개를 저장하시고, 브라우저에서 http://localhost:8080/ok.jsp 로 실행해보십시오. 물론 기본디렉토리에 위치시켜야죠. 이거 질문하는 분들 장난아니게 많습니다. tomcat 의 경우 server.xml 을 변경하지 않고 bin/startup.bat (startup.sh) 를 실행하셨다면 webapps/ROOT/ 가 기본디렉토리입니다. resin 의 경우는 doc 디렉토리가 기본 디렉토리겠죠. apache 랑 연동했을 경우 apache의 DocumentRoot 를 톰캣의 c:/jakarta-tomcat/webapps/ROOT 로 맞춰주시는 것이 헷갈리지 않을 겁니다. 

  


include Directive 는 <%@ ... %> 로 싸여있습니다. @은 Directive 라는 의미죠. 포함하는 문서에 정적으로 컴파일 됩니다. 포함하는 파일(ok.jsp)에서 사용한 변수를 따로 선언하지 않고 바로 사용할 수 있습니다. 물론 여기(okD.jsp)에서 선언된 변수도 포함하는 파일(ok.jsp)에서 따로 선언하지 않고 사용할 수 있습니다. 대신 이 파일(okD.jsp)을 변경할 경우 포함하는 파일(ok.jsp)의 시스템 날짜를 변경해서 재컴파일을 유도해야 이 파일(okD.jsp)의 변경사항이 적용되는 것을 볼 수 있습니다. 

  


include Action은 xml 형식으로 <jsp:include page=... flush="true" /> 를 사용합니다. flush="true" 는 그냥 쓰십시오 false로 바꾼다거나 빼먹거나 하면 안됩니다. 묻지 마십시오. 다칩니다. (==O%TT; 퍽!) 

  


include Action은 동적이라고 합니다. 처음엔 저도 이해가 안 갔습니다. 하지만 쓰면서 이 넘이 얼마나 독립적인지 아주 잘 알게 되었고, 왠만한 경우 저는 directive 보다는 action 을 사용합니다. 이 넘은 포함하는 파일과 상관없이 실행이 됩니다. directive 의 경우 ok.jsp와 okD.jsp 의 소스가 합져져서 하나로 컴파일되어 동작하는 것과 같지만 action 의 경우 ok.jsp 컴파일하고 okA.jsp 따로 컴파일되어서 ok.jsp가 okA.jsp를 호출해서 사용하고 다시 ok.jsp가 동작하는 구조라고 생각하시면 될 것입니다. (죄송합니다만 제가 경험상 체득한 것이라 검증이 필요한 부분입니다.) 

  


include Action 에는 page directive가 있습니다. include directive 에는 Page directive 가 없습니다. 만일 okD.jsp 에 <%@ page contentType="text/html;charset=euc-kr"%> 를 넣는다면 contentType="text/html;charset=euc-kr" 가 두개가 되기 때문에 Page directive: can't have multiple occurrences of contentType 라고 Exception 메시지를 보실 수 있습니다. import 속성이 틀리다면 contentType="text/html;charset=euc-kr" 만 삭제해주시면 될 것입니다. (이것도 자주 질문 하시는 것 중의 하나입니다.) 

  


파일을 변경해보겠습니다. (ok.jsp) 는 

ok.jsp

<%@ page contentType="text/html;charset=euc-kr"%><%

String ab="파일 ok.jsp 입니다.";

%><%=ab%>

<br>HTML 텍스트입니다.

<br>

<br>

<%@ include file="okD.jsp" %>

<br>

<jsp:include page="okA.jsp" flush="true">

  <jsp:param name="ab" value="<%=ab%>"/>

</jsp:include>



  



okD.jsp

<%

String abc="파일 okD.jsp 입니다."+"###"+ab;

%><%=new String(abc.getBytes("8859_1"),"euc-kr")%>

<br><%=new String("HTML 텍스트입니다.".getBytes("8859_1"),"euc-kr")%>

<br>



  



okA.jsp

<%@ page contentType="text/html;charset=euc-kr"%><%

String ab =request.getParameter("ab");

String abc="파일 okA.jsp 입니다."+"###"+ab;

%><%=abc%>

<br>

<br>



  


이해가 가실라나요? 변수전달방법입니다. Action 에 대해서 좀더 살펴봐야 할 것이 있습니다. 


출처: http://egloos.zum.com/khquasar/v/673282





지시자와 액션태그(2)

01087129057 | 2009.05.23 12:04목록크게

댓글쓰기

선도부 : 자..이번에는 include에 대해서 배워볼까.

            일단 include는 그냥 include와 include액션태그로 나눠서 생각할수있어.

           

            먼저 네가 메인으로 나가는 페이지를 하나 만들었다고 생각하자

            메인페이지의 상단과 하단부분에 각각 다른내용이 들어가겟지?

            이것을 하나의 페이지에 전부 표현한다면 페이지의 길이가 많이 길어지고

            수정하기도 어려을거야.

 

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

                                             상단

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

                                             중단

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

                                             하단

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

 

            만약 중단 부분만 메인페이지로 정하고 상단과 하단을 다른 페이지로 작성후

            중단페이지가 상단페이지와 하단페이지를 끌어와서 하나의 페이지로 보여주는거지

            보여지는건 하나의 페이지지만 실제로는 3개의 페이지가 합쳐져서 보여지는거지

 

현뚝 : 확실히 그렇게 작성한다면 나중에 소스 수정하기도 편하겠네요.

 

선도부 : 3개의 페이지가 하나로 묶여서 합쳐진 하나의 페이지로 컴파일이 되는거야.

            일단 예제를 보도록할까?

 

예제1 )------------------------------------------------------------

<h1>Directive Example4</h1>
<%@ page contentType="text/html;charset=euc-kr"%>
<%@ include file = "DirectiveTop.jsp"%>
include 지시자의 body부분입니다.
<%@ include file = "DirectiveBottom.jsp" %>

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

이게 중단인 메인페이지 부분이야.

<%@ include file = "DirectiveTop.jsp"%>

<%@ include file = "DirectiveBottom.jsp" %>

에서 메인페이지의 상단과 하단부분을 가져와서 쓰고있지?

그렇다면 상단과 하단의 내용을 보도록 하자.

예제1-1) -------------------------------------------------------

<%@ page contentType="text/html;charset=euc-kr"%>
<html>
<body>
include지시자의 top부분입니다.
<hr>
</html>

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

 

예제 1-2 ) -------------------------------------------------------

<%@ page contentType="text/html;charset=euc-kr"%>
<%@ page import="java.util.*" %>
<%
Date date = new Date();
%>
<hr>
include지시자의 Botton부분입니다.<p>
<%=date.toLocaleString() %>

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

 

1-1은 상단

1-2는 하단부분이야.

1-2경우 시간을 표현해주기 위해 java.util.*을 임포트시키고

Date date = new Date(); 로 객체를 만들어

<%=date.toLocaleString() %>로 시간을 표현해주고 있어.

 

결과 ) -----------------------------------------------------------

 

Directive Example4

include지시자의 top부분입니다.

include 지시자의 body부분입니다.

include지시자의 Botton부분입니다.

2007. 4. 9 오후 4:55:04

 

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

 

같이 나오게 되겠지?

보여지는 페이지는 한개의 페이지지만 다른2군데에서 가져와 쓰고 있지.

근데 그냥 include지시자의 경우 단순히 소스만 가져와서 쓰는거야.

하지만 include액션지시자의 경우 다른페이지의 결과를 포함해서 가져오는거야.

한마디로

include지시자 : 소스의 내용을 텍스트로

include액션태그 : 포함시킬 페이지의 처리결과를 포함
이라는 거지

 

액션태그의 양식은

<jsp:include page ="원하는 페이지경로" flush="true" />

로 사용해

 

예제1 )-----------------------------------------------------------------

<h1>Action Example1</h1>
<FORM METHOD=POST ACTION="includeTag.jsp">
이름 : <INPUT TYPE="text" NAME="name"><p>
<INPUT TYPE="submit" VALUE="보내기">
</FORM>

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

html문서로 name의 값을 입력받고 'includeTag.jsp'로 보내고 있군

 

예제 1-2) --------------------------------------------------------------

<html>
<h1>ActionTag Example1</h1>
<%@ page contentType="text/html;charset=euc-kr" %>
<%
 request.setCharacterEncoding("euc-kr");
 
String name= "japan football";
%>
<body>
<jsp:include page="includeTagTop1.jsp"/>
include action의 body입니다.<p>
<hr>
</body>
</html>

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

includeTag.jsp부분으로 중간에

 String name= "japan football"; 

로 선언된 부분이 있긴 하지만 이미 앞의 html부분에서 입력받은 값으로 처리되어

왔기때문에 실제로 이부분은 사용되지 않아.

 

그렇다면 <jsp:include page="includeTagTop1.jsp"/> 하는 top부분을 볼까

 

예제 1-3 ) ------------------------------------------------------

<%@ page contentType="text/html; charset=EUC-KR" %>
<% 
 request.setCharacterEncoding("euc-kr");
%>
<%
 String name = request.getParameter("name");
%>
include ActionTag의 Top부분입니다.<p>
<b><%=name%>Fighting!!</b>
<hr>

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

 

 String name = request.getParameter("name");

이부분은 앞의 html에서 넘겨받은 값을 말하고 있어.

 

그리고 그것을 아래 <b><%=name%>Fighting!!</b>로 보여주고있네.

결과를 본다면

결과 ) -----------------------------------------------------------

Action Tag1 Example1

include ActionTag의 Top부분입니다.

명숙이Fighting!!

include ActionTag의 Body입니다.

 

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

이렇게 나오게 되지.

중요한것은 includeTagTop1.jsp를 include시키면서 그 값이 그대로 따라와서

includeTag1.jsp로 와서 출력이 되는거지.

출처: http://m.blog.daum.net/eduiso/169

--------------------------------------------------------------------------------------------------------
 
1. 페이지를 분할하지 않은 통합 소스

    



memo -> webcontent -> menu에 top이랑 bottom .jsp만들고

memo -> webcontent에다가 index.jsp만든다.


근데 index를


<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<h1>기본 페이지 입니다.</h1>


</body>

</html>


이런 식으로 만들고 memo 자체에서 run on server하면


http://localhost:8000/memo/


기본 페이지가 생겨서 이제 404 안뜬당...


잠시 잠....


----------------------------------------5시 42분----------------


top.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



<%

String root = request.getContextPath();

%>


<html>

<head>

<style type="text/css">

ul#menu li {

display: inline; //가로로 보여주기

}


ul#menu li a {

background-color: black;

color: white;

pading: 10px 20px;

text-decoration: none;

border-radius: 4px 4px 0 0;

}


ul#menu li a:hover { //올려놨을 때 색깔

background-color: orange;

}

</style>

</head>

<body>

<!-- 상단 메뉴 -->

<div style="background-color: #EEEEEE;">

<table style="width: 100%">

<tr>

<td><img src="<%=root%>/menu/images/main-03.jpg" width='100%'

height='40%'></td>

</tr>


<tr>

<td>

<ul id="menu">

<li><a href="<%=root%>/index.jsp">홈</a></li>

<li><a href="<%=root%>/memov3/list.jsp">메모목록</a></li>

<li><a href="<%=root%>/memov3/createForm.jsp">메모등록</a></li>

<li><a href="">메뉴1</a></li>

<li><a href="">메뉴2</a></li>

<li><a href="">메뉴3</a></li>

<li><a href="">메뉴4</a></li>

</ul>

</td>

</tr>


</table>

</div>

<!-- 상단 메뉴 끝 -->



bottom.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">




<!-- 하단 메뉴 시작 -->

<div

style="width: 100%; background-color: #EEEEEE; text-align: center; margin-top: 2em;">

2016 SOLDESK JSP Developer</div>

<!-- 하단 메뉴 끝 -->



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

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:include page = "/menu/top.jsp" ></jsp:include>
<br><br><br><br><br><br><br>

<h1>기본 페이지 입니다.</h1>
<br><br><br><br><br><br><br>
<jsp:include page = "/menu/bottom.jsp" ></jsp:include>


</body>
</html>



memov3의 list.jsp 수정


<title>Insert title here</title>

<link href="../css/style.css" rel = "stylesheet">
 
<style>
* {
font-family: gulim;
font-size: 24px;
}
</style>
<script type="text/javascript">
function read(memono){
var url = "./read.jsp";
url = url + "?memono=" + memono;
location.href = url; //자바스크립트에서 -get 방식- 링크 보내기
}

</script>

</head>
<body>

<jsp:include page = "/menu/top.jsp" />



<DIV class = 'title'>
메모 목록</DIV>

<Table>
<TR>
<TH>번호</TH>
<TH>제목</TH>
<TH>날짜</TH>
<TH>조회수</TH>
</TR>

<%
if (list.size()==0) {
%>
<TR>
<TD colspan='4'>등록된 메모가 없습니다.</TD>
</TR>
<%
} // end if
else {
for(int i = 0; i<list.size(); i++){
MemoVO vo = list.get(i);
//list 안에서 rs.next로 MemoVO 에다가 저장해줬었음 (희미한 기억)
%>
<TR>
<TD><%=vo.getMemono()%></TD>
<TD><a href = "javascript:read('<%=vo.getMemono()%>')"><%=vo.getTitle() %></a></TD>
<TD><%=vo.getWdate()%></TD>
<TD><%=vo.getViewcnt()%></TD>

</TR>

<%
} //end for
} //end else
%>
</Table>

<DIV class = 'bottom'>
<input type="button" value='등록'
onclick="location.href='./createForm.jsp'">
</DIV>


<jsp:include page = "/menu/bottom.jsp"/>




</body>
</html>















5. 수업

진도: 

hw: 


6. 할것


파일보관함에 editplus 도우미 있음

배포는 안함


ocjp랑 ocp 월요일까지 생각할 것 ★- 생각 다 하면 별 지우기 :>

'Programming' 카테고리의 다른 글

160418: 25회차  (0) 2016.04.18
160415: 24회차  (0) 2016.04.15
160412: 22회차  (0) 2016.04.12
160408: 20회차  (1) 2016.04.08
160407: 19회차  (1) 2016.04.07
Posted by DAVID
이전페이지 다음페이지
블로그 이미지

by DAVID

공지사항

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • 더 보기

태그

글 보관함

«   2025/08   »
일 월 화 수 목 금 토
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

링크

카테고리

PC (112)
Programming (109)

카운터

Total
Today
Yesterday
방명록 : 관리자 : 글쓰기
DAVID's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

PC

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • PC (112)
    • Programming (109)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바