절대경로

http://localhost:8080/이부분부터 시작되는 경로
                            /context명/파일명

  : 경로가 바뀌어도 전체경로를 기술하기 때문에 유리할때도 있다.                     
  : context명은 request.getContextPath() 로 가져와서 기술한다.




상대경로

- WEB-INF 밑에 동일한 경로인 경우 
     <a href='a.jsp'>...

- 폴더존재 시 다른 폴더의 파일 참조 시
     <a href='../A/a.jsp' >   : ..상위로 이동 후 해당 경로이 이동한다.

- 폴더 상위 파일
      < a href='../1.jsp' >  : ..상위로 이동. 

'WEB > JSP' 카테고리의 다른 글

21. EL( Expression Language )  (0) 2013.04.23
20. <jsp:forward /> 액션태그  (0) 2013.04.23
18. Cookie & session  (0) 2013.04.23
17. Thumbnail 이미지  (0) 2013.04.23
16. <jsp:useBean> 태그  (0) 2013.04.23

1. 쿠키


1) 서버가 클라이언트에 남기는 정보 부스러기


2) 제한 크기 : 4kb


3) 제한 갯수 : 300개


4) 종류

 - 클라이언트의 하드디스크에 저장되는 쿠키(파일형태로 저장)

 - 클라이언트의 메모리상에 저장되는 쿠키(웹브라우저를 닫으면 사라짐)

   setMaxAge()메소드로 유효시간을 저장하지 않으면 웹브라이저를 닫을때까지 유효


5) 한글은 지원되지 않는다. 한글을 저장하려면 인코딩을 설정해야 한다.


6) 클라이언트가 최초에 서버에 접속했을때는 쿠키는 전송되지 않고 두번째 요청시마다 쿠키가 자동전송된다.


7) 쿠기생성

  Cookie cook=new Cookie("쿠키이름","쿠키값");

  cook.setMaxAge(유지시간);

  response.addCookie(cook);


8) 쿠키수정

 - 동일한 이름의 쿠키를 만들어 response객체에 담는다.

   Cookie cooks = new Cookie("쿠키이름","수정값");

   cook.setMaxAge(유지시간);

   response.addCookie(cook);


9) 쿠키삭제

 - 동일한 이름의 쿠키를 만들어 유지시간을 0으로 준다.

  Cookie cook = new Cookie("쿠키이름","쿠키값");

  cook.setMaxAge(0);//쿠키유지시간을 0으로

  response.addCookie(cook); 





2. 세션


1) http프로토콜은 무상태프로토콜이기 때문에 상태를 저장할 수 없다.

  세션이라는 기술은 그 상태정보를 유지할수 있도록 하는 기술이다.


2) 원리

 - 클라이언트가 최초의 요청을 하면 서버측 메모리에 세션방이 만들어지고 JSESSIONID라는 ID로 해당 세션방에 접근할 수 있다. 클라이언트가 두번째 이상 요청시마다 JSESSIONID가 쿠키에 담겨 전송된다. 서버는 이 ID로 클라이언트를 식별해  세션방을 사용할 수 있도록 한다.  




EX1 >

로그인/아이디 입력 ( id/pwd ) --> 쿠키 생성  --> 쿠키 확인


login.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!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=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<form method="post" action="loginOk.jsp">

아이디<input type="text" name="id"/><br/>

비밀번호<input type="password" name="pwd"/><br/>

<input type="submit" value="로그인"/>

</form>

</body>

</html>



loginOk.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!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=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<%

//전송된 파라미터 얻어오기

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

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

// 전송된 파라미터를 쿠키에 담기

// 쿠키생성

Cookie cook1= new Cookie("id",id);


//쿠키유지시간 설정 (1분간 유효)

cook1.setMaxAge(60*1) ;

Cookie cook2 = new Cookie("pwd",pwd);

cook2.setMaxAge(60*2);

//응답객체에 쿠키를 담아서 클라이언트에 보내기

response.addCookie(cook1);

response.addCookie(cook2);

%>

쿠키가 생성되었습니다.<br/>

<a href="getCookie.jsp">다른 페이지로 이동하기</a><br/>

</body>

</html>



getCookie.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!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=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<h2>쿠키 얻어오기</h2>

<%

//request객체를 통해 서버로 전달된 쿠키를 얻어온다.

//(쿠기는 무조건배열로 얻어옴.)

Cookie[] cook=request.getCookies();

//쿠키는 클라이언트가 최초로 서버에 요청할때는 전송되지 않으므로 

// 반드시 null 인지 체크해야 한다.

if(cook!=null){

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

//쿠키이름 얻어오기

String cookieName=cook[i].getName();

//쿠키값 얻어오기

String cookieValue=cook[i].getValue();

out.println("쿠키이름:" + cookieName + " 쿠키값:" + cookieValue + "<br/>");

}

}else{

%>

쿠키가 없어요.!!

<%

}

%>

</body>

</html>



EX2>

쿠키를 이용해서 최근 본 상품 보여주기



list.jsp 

<%@page import="java.net.URLDecoder"%>

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!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=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<h2>판매제품목록</h2>

<ul>

<li><a href="1.jsp">냉장고</a></li>

<li><a href="2.jsp">컴퓨터</a></li>

<li><a href="3.jsp">핸드폰</a></li>

</ul>

<hr/>

<h5>최근 본 상품</h5>

<div>

<%

//쿠키 얻어오기

Cookie[] cook = request.getCookies();

if(cook!=null){

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

//전송된 쿠키이름 얻어오기

String name=cook[i].getName();

//쿠키이름에 item이 포함되어 있다면

if(name.indexOf("item")!=-1){

//해당 value얻어오기

String value=cook[i].getValue();

//euc-kr로 인코딩되어 있으므로 다시 euc-kr로 디코딩하여야 한다.

String item=URLDecoder.decode(value, "euc-kr");

out.println(item+"<br/>");

}

}

}else{

out.println("최근에 본 상품이 없습니다.");

}

%>

</div>

</body>

</html>





; 리스트에서 냉장고를 클릭하고 "제품목록페이지"로 다시 이동하면 [ 최근 본 상품 ]에 냉장고가 보인다.





1.jsp 냉장고

<%@page import="java.net.URLEncoder"%>

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!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=EUC-KR">

<title>Insert title here</title>

</head>

<body>

냉장고에 대한 상세 페이지입니다.<br/>

모델명 : xxx<br/>

제품가격:xxx원<br/>

<%

//상품에 대한 정보를 쿠키에 담기

//쿠키에 한글은 저장되지 않으므로 encode함수로 인코딩해야 한다.

Cookie cook = new Cookie("item1", URLEncoder.encode("냉장고","euc-kr"));

cook.setMaxAge(60*60);//1시간동안 유지

response.addCookie(cook);

%>

<a href="list.jsp">제품 목록 페이지</a><br/>

</body>

</html>


2.jsp 컴퓨터

<%@page import="java.net.URLEncoder"%>

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!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=EUC-KR">

<title>Insert title here</title>

</head>

<body>

컴퓨터에 대한 상세 페이지입니다.<br/>

모델명 : xxx<br/>

제품가격:xxx원<br/>

<%

//상품에 대한 정보를 쿠키에 담기

//쿠키에 한글은 저장되지 않으므로 encode함수로 인코딩해야 한다.

Cookie cook = new Cookie("item2", URLEncoder.encode("컴퓨터","euc-kr"));

cook.setMaxAge(60*60);//1시간동안 유지

response.addCookie(cook);

%>

<a href="list.jsp">제품 목록 페이지</a><br/>

</body>

</html>



3.jsp 핸드폰

<%@page import="java.net.URLEncoder"%>

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!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=EUC-KR">

<title>Insert title here</title>

</head>

<body>


핸드폰에 대한 상세 페이지입니다.<br/>

모델명 : xxx<br/>

제품가격:xxx원<br/>

<%

//상품에 대한 정보를 쿠키에 담기

//쿠키에 한글은 저장되지 않으므로 encode함수로 인코딩해야 한다.

Cookie cook = new Cookie("item3", URLEncoder.encode("핸드폰","euc-kr"));

cook.setMaxAge(60*60);//1시간동안 유지

response.addCookie(cook);

%>

<a href="list.jsp">제품 목록 페이지</a><br/>

</body>

</html>




EX 3>

페이지 시작 시 팝업창 보여주고, 팝업창 닫기 체크 시 쿠키에 저장하고, 지정 시간 만큼 안보여 주기



   


main.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!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=EUC-KR">

<title>Insert title here</title>

<script type="text/javascript">

function showPopup(){

<%

boolean check=false;

Cookie cook[]=request.getCookies();//전송된 쿠키 얻어오기

if(cook!=null){

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

String name=cook[i].getName();//쿠키이름 얻어오기

String value=cook[i].getValue();//쿠키값 얻어오기

if(name.equals("pop") && value.equals("no")){

check=true;

break;

}

}

}

if(!check){

%>

window.open("popup1.jsp","","width=300,height=200");

<%

}

%>

}

</script>

</head>

<body onload="showPopup()">

<div style="width:900px;height:600px;background-color: pink ">

<h2>우리우리 홈쇼핑</h2>

</div>

</body>

</html>



popup1.jsp

; 자신 페이지로 이동

; 쿠키에 담기

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!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=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<div style="width:300px;height: 300px;background-color: yellow;">

<h3>많은 이벤트가 진행중이예요</h3>

<form method="post" action="popup1.jsp" name="frm">

<input type="checkbox" name="ck1" id="ck1" value="no"

onclick="document.frm.submit()"/>24시간동안 창보이지 않기

<hr/>

<a href="javascript:self.close()">닫기</a>

</form>

</div>

<%

//전송된 체크박스 얻어오기

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

if(ck1!=null){//체크박스가 체크된 경우

%>

<script type="text/javascript">

//체크된 상태 유지시키키

document.getElementById("ck1").checked=true;

</script>

<%

//쿠키에 담기

Cookie cook=new Cookie("pop","no");

cook.setMaxAge(60*60*24);//유지시간 24시간 설정

response.addCookie(cook);

}

%>

</body>

</html>



'WEB > JSP' 카테고리의 다른 글

20. <jsp:forward /> 액션태그  (0) 2013.04.23
19. 경로  (0) 2013.04.23
17. Thumbnail 이미지  (0) 2013.04.23
16. <jsp:useBean> 태그  (0) 2013.04.23
15. 파일 첨부  (0) 2013.04.20

1. JAI download 


Java Advanced Imaging API 1.1.3 Download Page 에서 다운.  

압축 해제 후 jai_codec.jar, jai_core.jar  lib에 복사.



jai_codec.jar


jai_core.jar




ex>

...


MultipartRequest mr=new MultipartRequest(

request,  //request객체

dir, //파일을 저장할 폴더

1024 * 1024 * 5,  // 최대업로드 크기 설정(5mb설정)

"euc-kr", //인코딩방식

new DefaultFileRenamePolicy()//동일한 파일명이 존재하면 파일명뒤에 일련번호 부여해 파일생성.

);

...


Enumeration files = mr.getFileNames();

String file = (String)files.nextElement();

filename=mr.getFilesystemName(file);

//System.out.println("thumbnail file:" + file + "  filename:" + filename);

ParameterBlock pb=new ParameterBlock();

pb.add(dir + File.separator + filename);

RenderedOp rOp = JAI.create("fileload", pb);

BufferedImage bi = rOp.getAsBufferedImage();

BufferedImage thumb=new BufferedImage(50,50,BufferedImage.TYPE_INT_RGB);

Graphics2D g = thumb.createGraphics();

g.drawImage(bi, 0, 0, 50, 50, null);

File file2 = new File(dir + File.separator + "sm_" + filename );

ImageIO.write(thumb, "jpg", file2);

..





2. thumbnailator-0.4.3.jar

; Thumbnails 사용하는 방법

; lib에 복사 

; 파일 경로, size(이미지 파일 크기 w, h ), toFile( 실제 저장파일 경로/파일명 )


ex>

Thumbnails.of(upload + File.separator + savefilename).size(80, 80).toFile(upload + File.separator + "tn_" + savefilename );

Thumbnails.of(upload + File.separator + savefilename).size(150, 200).toFile(upload + File.separator + "fr_" + savefilename ); 


thumbnailator-0.4.3.jar





















'WEB > JSP' 카테고리의 다른 글

19. 경로  (0) 2013.04.23
18. Cookie & session  (0) 2013.04.23
16. <jsp:useBean> 태그  (0) 2013.04.23
15. 파일 첨부  (0) 2013.04.20
14. DBCP  (0) 2013.04.20

1. <jsu:useBean/>태그


<jsp:useBean id="빈이름" class="자바빈 클래스 명" scope="사용범위"/>


scope : request, page(기본), session, applicaion



BeanTest.java

package test;


public class BeanTest{

private String name="HongJilDong";


public String getName(){

return name;

}

public void SetName(String name){

this.name = name;

}

}



BeanTest.jsp

...

<jsp:useBean id="beantest" class="test.BeanTest" scope="page"/>

..

<h3><%=beantest.getName() %></h3>

...






2. <jsp:setProperty/>태그

; 자바빈 클래스의 속성값을 설정하기 위한 태그

; setter메소드와 동일


<jsp:setProperty name="빈이름" property="속성명" value="설정할 속성값"/>


<jsp:setProperty/>태그는 자바빈 객체의 멤버변수를 직접수정하는 것이 아니라(private로 선언) set메소드를 호출하여 멈버변수를 수정한다.


예>

<jsp:setProperty name="beantest" property="name" value="Mike"/>


==>

//name에 Mike 를 넣은것과 동일.

public void setName(String name){

this.name = name;

}




3. 클라이언트에서 전송된 파라미터값을 속성값으로 할당할때는 value 대신 param을 이용.


예>

<form action="test.jsp">

Name:<input type="text" name="name"/>

<input type="submit" value="send"/>

</form>


==>


<jsp:useBean id="beantest" class="test.BeanTest" scope="page"/>

<jsp:setProperty name="beantest" property="name" param="name"/>

...

<h3><%=beantest.getName() %></h3>







4. <jsp:getProperty/> 태그

; 자바빈 클래스의 속성값을 가져오기 위한 태그

; getter 메소드와 동일


<jsp:getProperty name="빈이름" property="속성명"/>





'WEB > JSP' 카테고리의 다른 글

18. Cookie & session  (0) 2013.04.23
17. Thumbnail 이미지  (0) 2013.04.23
15. 파일 첨부  (0) 2013.04.20
14. DBCP  (0) 2013.04.20
13. JSP 간단한 예제 ( 목록, 입력, 수정, 삭제 )-model1  (0) 2013.04.19

* 라이브러리 등록 및 파일 upload /download 테스트


* WEB-INF밑에 upload폴더 생성. ( 파일 저장 폴더, 이클립스에서 생성. )
 : 이클립스 개발 시 실제 파일이 upload되는 경로는 따로 있다
 해당 workspace 경로밑에
\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0

\wtpwebapps\day06_fileupload\upload
에 파일이 저장되어 있다.


<< 설정 >>
http://servlets.com/cos/ 사이트 이동


* 파일 업로드 라이브러리. (cos 사용 )
  - servlet software
       - Download the package
            - cos-26Dec2008.zip 다운.
* lib/cos.jar파일을 WEB-INF/lib/cos.jar로 복사.

* upload시 동일한 이름의 파일이 존재하면 파일명 뒤에 숫자가 붙는다.
예를 들어 a.jpg가 존재하면 a.jpg, a(1).jpg,.. 이런식으로 증가된다. 실제 저장되는 파일명과 사용자가 올린 파일명 2개가 존재한다.

* enctype="multipart/form-data"으로 전송.

* 받을때도 MultipartRequest mr=new MultipartRequest (...)로 받아 사용한다.




파일업로드 테스트






[[ 테이블 ]]

; 원본 파일명 - 사용자가 올린 파일명.

; 실제저장된 파일명 - 서버에 저장된 파일명.


create table fileinfo(
 filenum number primary key,--파일고유번호
 writer varchar2(20),--작성자
 title varchar2(20),--제목
 content varchar2(50),--내용
 orgfilename varchar2(100),--원본파일명
 savefilename varchar2(100),--실제저장된파일명
 filesize number -- 파일크기
);

create sequence fileinfo_seq;



web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

id="WebApp_ID" version="3.0">

<display-name>day06_dbcp</display-name>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

<welcome-file>default.html</welcome-file>

<welcome-file>default.htm</welcome-file>

<welcome-file>default.jsp</welcome-file>

</welcome-file-list>

<!-- dbcp 설정 -->

<resource-ref>

<description>Oracle Datasource example</description>

<res-ref-name>jdbc/myoracle</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>

</web-app>





META-INF > context.xml

<?xml version="1.0" encoding="UTF-8"?>

<Context>

<Resource name="jdbc/myoracle" auth="Container"

              type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"

              url="jdbc:oracle:thin:@127.0.0.1:1521:xe"

              username="scott" password="tiger" maxTotal="20" maxIdle="10"

              maxWaitMillis="-1"/>

</Context>











[[  main.html  ]]

<!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=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<a href="file1/fileupload.jsp">파일업로드하기</a><br/>
<a href="file1/filelist.jsp">파일목록보기</a>
</body>
</html>





[[  fileupload.jsp  ]]

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!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=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="fileuploadOk.jsp"   enctype="multipart/form-data">
<table border="1" width="500">
    <tr>
        <td>작성자</td>
        <td><input type="text" name="writer"/></td>
    </tr>
    <tr>
        <td>제목</td>
        <td><input type="text" name="title"/></td>
    </tr>
    <tr>
        <td>내용</td>
        <td><textarea rows="5" cols="50" name="content"></textarea></td>
    </tr>
    <tr>
        <td>첨부파일</td>
        <td><input type="file" name="file1"/></td>
    </tr>
    <tr>
        <td colspan="2" align="center">
            <input type="submit" value="전송"/>
            <input type="reset" value="취소"/>
        </td>
    </tr>
</table>
</form>
</body>
</html>







[[  fileuploadOk.jsp  ]]

;

public MultipartRequest(javax.servlet.http.HttpServletRequest request,

                        java.lang.String saveDirectory,

                        int maxPostSize,

                        java.lang.String encoding,

                        FileRenamePolicy policy)

                 throws java.io.IOException

<%@page import="test.file.FileinfoDao"%>
<%@page import="java.io.File"%>
<%@page import="test.file.FileinfoVo"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!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=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
    //upload폴더의 실제경로를 얻어옴
    String dir=application.getRealPath("/upload");

    MultipartRequest mr=new MultipartRequest(
         request,//request객체
         dir,//파일을 저장할 폴더
         1024*1024*5, //최대 업로드크기 설정(5MB설정) 
         "euc-kr",//인코딩방식
          new DefaultFileRenamePolicy()//동일한파일명이 존재하면 파일명뒤에 일련번호 부여해서파일생성
        );

    //request객체가 아닌 MultipartRequest객체로 파라미터 읽어와야 함!!!
    String writer=mr.getParameter("writer");
    String title=mr.getParameter("title");
    String content=mr.getParameter("content");

    //전송된 파일명 읽어오기
    String orgfilename=mr.getOriginalFileName("file1");


    //실제저장된 파일명 읽어오기
    String savefilename=mr.getFilesystemName("file1");

   
    ////////////  전송된 정보를 DB에 저장하기  ////////////////
    //전송된 파일크기 구하기
    File f=new File(dir + File.separator + savefilename);
    long filesize=f.length();

    //전송된 정보를 vo에 담기
    FileinfoVo vo=new FileinfoVo(0,writer,title,content,
                                   orgfilename,
                                   savefilename,
                                   filesize);
    //DB에 데이터 추가하기
    FileinfoDao dao=new FileinfoDao();
    int n=dao.insert(vo);
    if(n>0){
        out.println(" 데이터 전송 성공!<br/>");
    }else{
        out.println(" 데이터 전송 실패!<br/>");
    }   
%>

작성자 :<%=writer %><br/>
제목 :<%= title %><br/>
내용 : <%=content %><br/>
전송된 파일명:<%=orgfilename %><br/>
실제저장된 파일명:<%=savefilename %><br/>
</body>
</html>



Table >







[[  filelist.jsp  ]]


; <jsp:useBean id="빈이름" class="자바빈 클래스" scope="사용범위" />

     scope : request, page, session, application,  기본값은 page


<%@page import="java.util.ArrayList"%>

<%@page import="test.file.FileinfoVo"%>

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!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=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<jsp:useBean id="dao" class="test.file.FileinfoDao"/>

<table border="1" width="600">

<caption><h2>파일목록</h2></caption>

<tr>

<th>작성자</th>

<th>제목</th>

<th>파일명</th>

<th>파일크기</th>

<th>다운로드</th>

<th>삭제</th>

</tr>

<%

ArrayList<FileinfoVo> list = dao.getList();

for(int i=0;i<list.size();i++){

FileinfoVo vo = list.get(i);

%>

<tr>

<td><%=vo.getWriter() %></td>

<td><%=vo.getTitle() %></td>

<td><%=vo.getOrgfilename() %></td>

<td><%=vo.getFilesize() %></td>

<td><a href="filedownload.jsp?filenum=<%=vo.getFilenum() %>">다운로드</a></td>

<td><a href="filedelete.jsp?filenum=<%=vo.getFilenum() %>">삭제</a></td>

</tr>

<%

}

%>

</table>

</body>

</html>




 


[[  filedelete.jsp  ]]

; 파일 삭제


<%@page import="java.io.File"%>

<%@page import="test.file.FileinfoVo"%>
<%@page import="test.file.FileinfoDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!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=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
////////// 1. 파일 삭제 하기 //////////////////////
int filenum=Integer.parseInt(request.getParameter("filenum"));
FileinfoDao dao=new FileinfoDao();
FileinfoVo vo=dao.getInfo(filenum);
//실제저장된 파일명 얻어오기
String savefilename=vo.getSavefilename();
//upload폴더의 실제 경로 얻어오기
String dir=application.getRealPath("/upload");
//삭제할 파일정보를 갖는 File객체 생성
File f=new File(dir+File.separator+savefilename);
if(!f.delete()){
    out.println("삭제 오류!");
}
/////////  2. DB에서 파일정보 삭제하기 ////////////////
int n=dao.delete(filenum);
if(n>0){
    out.println("삭제성공!");
}else{
    out.println("삭제 오류!");
}
%>
</body>
</html>



[[  filedownload.jsp  ]]

<%@page import="java.io.File"%>

<%@page import="java.io.OutputStream"%>

<%@page import="java.io.BufferedInputStream"%>

<%@page import="java.io.BufferedOutputStream"%>

<%@page import="java.io.FileInputStream"%>

<%@page import="test.file.FileinfoDao"%>

<%@page import="test.file.FileinfoVo"%>

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<%

//파일번호얻어오기

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

//파일에 대한 정보를 db에서 얻어오기.

FileinfoDao dao = new FileinfoDao();

FileinfoVo vo = dao.getInfo(filenum);

String savefilename=vo.getSavefilename();

String orgfilename=vo.getOrgfilename();

long filesize = vo.getFilesize();

// 다운로드 창 설정(한글파일명이 깨지지 않도록)----------------------------------

// euc-kr로 변환한 파일명 만들기

String filename=new String(orgfilename.getBytes("euc-kr"),"8859_1");


//다운로드창으로 응답하기

response.setContentType("application/octet-stream");

//파일크기 설정하기

response.setContentLength((int)filesize);

//다운로드창에 보일 파일명(euc-kr로 변환된) 설정하기

response.setHeader("Content-Disposition", "attachment;filename=" + filename);

// 실제로 다운로드(클라이언트에 복사) 하기 --------------------------------------

OutputStream os = response.getOutputStream();

//파일이 저정된 경로 얻어오기

String dir=application.getRealPath("/upload");

//서버에 저장된 파일을 얻어오기 위한 스트림 객체

FileInputStream fis = new FileInputStream( dir + File.separator + savefilename );

//성능향상을 위해 버퍼기능을 갖는 스트림객체로 반환하기

BufferedOutputStream bos = new BufferedOutputStream(os);

BufferedInputStream bis = new BufferedInputStream(fis);

//서버의 파일을 클라이언트에 복사하기

int n=0;

byte[] b=new byte[1024];

while((n=bis.read(b))!=-1){

bos.write(b, 0, n);

}

bis.close();

bos.close();

%>


** Filedownload.jsp 파일을 Servlet으로 사용해도 된다.

[[ FiledownloadServlet.java ]]

package test.file;


import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.OutputStream;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


public class FiledownloadServlet extends HttpServlet {

@Override

protected void service(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//파일번호얻어오기

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

//파일에 대한 정보를 db에서 얻어오기.

FileinfoDao dao = new FileinfoDao();

FileinfoVo vo = dao.getInfo(filenum);

String savefilename=vo.getSavefilename();

String orgfilename=vo.getOrgfilename();

long filesize = vo.getFilesize();

// 다운로드 창 설정(한글파일명이 깨지지 않도록)----------------------------------

// euc-kr로 변환한 파일명 만들기

String filename=new String(orgfilename.getBytes("euc-kr"),"8859_1");


//다운로드창으로 응답하기

response.setContentType("application/octet-stream");

//파일크기 설정하기

response.setContentLength((int)filesize);

//다운로드창에 보일 파일명(euc-kr로 변환된) 설정하기

response.setHeader("Content-Disposition", "attachment;filename=" + filename);

// 실제로 다운로드(클라이언트에 복사) 하기 --------------------------------------

OutputStream os = response.getOutputStream();

//파일이 저정된 경로 얻어오기

String dir= getServletContext().getRealPath("/upload"); //application.getRealPath("/upload");

//서버에 저장된 파일을 얻어오기 위한 스트림 객체

FileInputStream fis = new FileInputStream( dir + File.separator + savefilename );

//성능향상을 위해 버퍼기능을 갖는 스트림객체로 반환하기

BufferedOutputStream bos = new BufferedOutputStream(os);

BufferedInputStream bis = new BufferedInputStream(fis);

//서버의 파일을 클라이언트에 복사하기

int n=0;

byte[] b=new byte[1024];

while((n=bis.read(b))!=-1){

bos.write(b, 0, n);

}

bis.close();

bos.close();

}

}



[[  DbcpBean.java  ]]

package test.dbcp;


import java.sql.Connection;

import java.sql.SQLException;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import javax.sql.DataSource;


public class DbcpBean {

private DataSource ds;

public DbcpBean(){

try{

Context initContext = new InitialContext();

Context envContext  = (Context)initContext.lookup("java:/comp/env");

ds = (DataSource)envContext.lookup("jdbc/myoracle");

}catch(NamingException ne){

System.out.println(ne.getMessage());

}

}

public Connection getCon(){

Connection con = null;

try{

con = ds.getConnection();

return con;

}catch(SQLException se){

System.out.println(se.getMessage());

return null;

}

}

}



[[  FileinfoVo  ]]

package test.file;


public class FileinfoVo {

private int filenum;

private String writer ;

private String title ;

private String content ;

private String orgfilename ;

private String savefilename ;

private long filesize;

public FileinfoVo(){}


public FileinfoVo(int filenum, String writer, String title, String content,

String orgfilename, String savefilename, long filesize) {

super();

this.filenum = filenum;

this.writer = writer;

this.title = title;

this.content = content;

this.orgfilename = orgfilename;

this.savefilename = savefilename;

this.filesize = filesize;

}

public int getFilenum() {

return filenum;

}


public void setFilenum(int filenum) {

this.filenum = filenum;

}


public String getWriter() {

return writer;

}


public void setWriter(String writer) {

this.writer = writer;

}


public String getTitle() {

return title;

}


public void setTitle(String title) {

this.title = title;

}


public String getContent() {

return content;

}


public void setContent(String content) {

this.content = content;

}


public String getOrgfilename() {

return orgfilename;

}


public void setOrgfilename(String orgfilename) {

this.orgfilename = orgfilename;

}


public String getSavefilename() {

return savefilename;

}


public void setSavefilename(String savefilename) {

this.savefilename = savefilename;

}


public long getFilesize() {

return filesize;

}


public void setFilesize(long filesize) {

this.filesize = filesize;

}

}



[[  FileInfoDao.java  ]]

package test.file;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import test.dbcp.DbcpBean;

public class FileinfoDao {
    private DbcpBean dbcp;
    public FileinfoDao() {
        dbcp=new DbcpBean();
    }
    public int delete(int filenum){
        Connection con=null;
        PreparedStatement pstmt=null;
        try{
            con=dbcp.getCon();
            String sql="delete from fileinfo where filenum=?";
            pstmt=con.prepareStatement(sql);
            pstmt.setInt(1,filenum);
            int n=pstmt.executeUpdate();
            return n;
        }catch(SQLException se){
            System.out.println(se.getMessage());
            return -1;
        }finally{
            try{
                if(pstmt!=null) pstmt.close();
                if(con!=null) con.close();
            }catch(SQLException se){}
        }
    }
   
    //파일번호에 해당하는 파일정보 반환하는 메소드
    public FileinfoVo getInfo(int filenum){
        Connection con=null;
        PreparedStatement pstmt=null;
        ResultSet rs=null;
        try{
            con=dbcp.getCon();
            String sql="select * from fileinfo where filenum=?";
            pstmt=con.prepareStatement(sql);
            pstmt.setInt(1,filenum);
            rs=pstmt.executeQuery();
            if(rs.next()){
                FileinfoVo vo=new FileinfoVo(
                        rs.getInt("filenum"),
                        rs.getString("writer"),
                        rs.getString("title"),
                        rs.getString("content"),
                        rs.getString("orgfilename"),
                        rs.getString("savefilename"),
                        rs.getLong("filesize"));
                return vo;
            }
            return null;
        }catch(SQLException se){
            System.out.println(se.getMessage());
            return null;
        }finally{
            try{
                if(rs!=null) rs.close();
                if(pstmt!=null) pstmt.close();
                if(con!=null) con.close();
            }catch(SQLException se){}
        }
    }
    public ArrayList<FileinfoVo> getList(){
        Connection con=null;
        PreparedStatement pstmt=null;
        ResultSet rs=null;
        try{
            con=dbcp.getCon();
            String sql="select * from fileinfo order by filenum desc";
            pstmt=con.prepareStatement(sql);
            rs=pstmt.executeQuery();
            ArrayList<FileinfoVo> list=new ArrayList<>();
            while(rs.next()){
                FileinfoVo vo=new FileinfoVo(
                        rs.getInt("filenum"),
                        rs.getString("writer"),
                        rs.getString("title"),
                        rs.getString("content"),
                        rs.getString("orgfilename"),
                        rs.getString("savefilename"),
                        rs.getLong("filesize"));
                list.add(vo);
            }
            return list;
        }catch(SQLException se){
            System.out.println(se.getMessage());
            return null;
        }finally{
            try{
                if(rs!=null) rs.close();
                if(pstmt!=null)pstmt.close();
                if(con!=null) con.close();
            }catch(SQLException se){}
        }        
    }  
    
    public int insert(FileinfoVo vo){
        Connection con=null;
        PreparedStatement pstmt=null;
        String sql="insert into fileinfo " +
                   "values(fileinfo_seq.nextval,?,?,?,?,?,?)";
        try{
            con=dbcp.getCon();//dbcp에서 컨넥션 객체 얻어오기
            pstmt=con.prepareStatement(sql);
            //?에 대응되는 값 설정하기
            pstmt.setString(1,vo.getWriter());
            pstmt.setString(2,vo.getTitle());
            pstmt.setString(3,vo.getContent());
            pstmt.setString(4,vo.getOrgfilename());
            pstmt.setString(5,vo.getSavefilename());
            pstmt.setLong(6,vo.getFilesize());
            int n=pstmt.executeUpdate();
            return n;
        }catch(SQLException se){
            System.out.println(se.getMessage());
            return -1;
        }finally{
            try{
                if(pstmt!=null) pstmt.close();
                if(con!=null) con.close();
            }catch(SQLException se){}
        }
    }
}




EX> 파일여러개 upload


fileupload.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!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=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<%

request.setCharacterEncoding("euc-kr");


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

int icnt=0;

if(cnt!=null){

icnt=Integer.parseInt(cnt);

}

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

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

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

if(writer==null) writer="";

if(title==null) title="";

if(content==null) content="";

%>

<form method="post" action="fileupload.jsp">

<table border="1" width="500">

<tr>

<td>작성자</td>

<td><input type="text" name="writer" value="<%=writer %>"/></td>

</tr>

<tr>

<td>제목</td>

<td><input type="text" name="title" value="<%=title %>"/></td>

</tr>

<tr>

<td>내용</td>

<td><textarea rows="5" cols="50" name="content"><%=content %></textarea></td>

</tr>

<tr>

<td>첨부파일갯수</td>

<td><input type="text" name="cnt" value="<%=cnt %>"/>

<input type="submit" value="확인"/>

</td>

</tr>

</table>

</form>

<form method="post" action="fileuploadOk.jsp" enctype="multipart/form-data">

<input type="hidden" name="writer"  value="<%=writer %>"/>

<input type="hidden" name="title"   value="<%=title %>"/>

<input type="hidden" name="content" value="<%=content %>"/>

<table border="1" width="500">

<%

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

%>

<tr>

<td>첨부파일<%=i+1 %></td>

<td><input type="file" name="file<%=i%>"></td>

</tr>

<%

}

%>

<tr>

<td colspan="2" align="center">

<input type="submit" value="전송"/>

</td>

</tr>

</table>

</form>

</body>

</html>








fileuploadOk.jsp

<%@page import="java.util.Enumeration"%>

<%@page import="com.oreilly.servlet.MultipartRequest"%>

<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!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=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<%

String dir=application.getRealPath("/upload");

MultipartRequest mr = new MultipartRequest(

request,

dir,

1024*1024*5,

"euc-kr",

new DefaultFileRenamePolicy()

);

String writer = mr.getParameter("writer");

String title = mr.getParameter("title");

String content=mr.getParameter("content");

%>

작성자:<%=writer %><br/>

제목:<%=title %><br/>

내용:<%=content %><br/>

<%

//전송된 파일명을 얻어옴.

Enumeration<String> em=mr.getFileNames();

while(em.hasMoreElements()){

//전송된 file의 name속성(파라미터이름) 얻어오기

String fileName=em.nextElement();

//전송된 파일의 원본파일명 얻어오기;

String orgfilename=mr.getOriginalFileName(fileName);

//실제로 저장된 파일명 얻어오기

String savefileString=mr.getFilesystemName(fileName);

%>

전송된 파일명:<%=orgfilename %><br/>

저장된 파일명:<%=savefileString %><br/>

<%

}

%>

</body>

</html>








<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>




Insert title here


<%
	request.setCharacterEncoding("euc-kr");

	String cnt=request.getParameter("cnt");
	int icnt=0;
	if(cnt!=null){
		icnt=Integer.parseInt(cnt);
	}
	
	String writer=request.getParameter("writer");
	String title=request.getParameter("title");
	String content=request.getParameter("content");
	if(writer==null) writer="";
	if(title==null) title="";
	if(content==null) content="";
%>
작성자
제목
내용
첨부파일갯수
<% for(int i=0;i <% } %>
첨부파일<%=i+1 %>

'WEB > JSP' 카테고리의 다른 글

17. Thumbnail 이미지  (0) 2013.04.23
16. <jsp:useBean> 태그  (0) 2013.04.23
14. DBCP  (0) 2013.04.20
13. JSP 간단한 예제 ( 목록, 입력, 수정, 삭제 )-model1  (0) 2013.04.19
12. JSP 스코프  (0) 2013.04.19

+ Recent posts