레이블이 자바인 게시물을 표시합니다. 모든 게시물 표시
레이블이 자바인 게시물을 표시합니다. 모든 게시물 표시

2013년 10월 21일 월요일

[자바 상수 객체, Java Constant Object] 상수 객체란 final변수와 같이...

[자바 상수 객체, Java Constant Object]
 
상수 객체란 final변수와 같이 객체의 내용을 변경 할수 없는 객체를 말한다.
 
객체의 내용을 외부에서 수정하지 못하게 하기 위해서는 인스턴스 변수는 모두 final로 선언하거나, private으로 선언한다.
 
인스턴스 변수를 수정하는 메쏘드는 외부에서 접근하지 못하게 private으로 선언
예) String, Integer 등은 그 내용을 수정 할 수 없도록 위와 같이 만들어져 있다.
 
final로 선언된 변수가 참조형 일 경우에는 그 변수의 참조 값을 바꿀 수는 없으나 그 변수가 참조하고 있는 객체나 배열의 내용은 수정 가능하다.

[예제, ConstObjectTest.java]
 
package onj;
class ConstClass
{
    final int v1;
    private int v2;
    
    ConstClass( int value1, int value2 )
    {
        v1 = value1;
        v2 = value2;
    }
    int getV2()
    {
        return v2;
    }
}
class NonConstClass
{
    int v=999;
}
class ConstObjectTest
{
    public static void main( String[] args )
    {
        ConstClass obj = new ConstClass(1, 2);
        
        System.out.println( "obj.v1 = " + obj.v1 );
        System.out.println( "obj.getV2() = " + obj.getV2() );
        // obj.v1 = 3;  // 오류: 화이널 변수이므로 대입 불가
        // obj.v2 = 4;  // 오류: private 변수이므로 접근 불가
        final NonConstClass obj2 = new NonConstClass();
        // obj2 = new NonConstClass(); // 오류: 화이널 참조 변수이므로 수정 불가
     // 화이널 참조값을 통하여 객체의 내용 수정 가능하다,
        obj2.v = 3;            
    }
}
 
[결과]
 
obj.v1 = 1
obj.getV2() = 2
 

2013년 10월 19일 토요일

스프링MultipartFile멀티(다중 파일 업로드[Spring Framework3.X MVC multiple file upload]

스프링MultipartFile멀티(다중 파일 업로드[Spring Framework3.X MVC multiple file upload]

1. fileupload 라는 spring mvc 프로젝트 생성
 
[전체구조]
 

 
[pom.xml]
 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>onj.springframework.samples</groupId>
 <artifactId>springmvc</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <properties>
  <!-- Generic properties -->
  <java.version>1.7</java.version>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  <!-- Spring -->
  <spring-framework.version>3.2.3.RELEASE</spring-framework.version>
  <!-- Logging -->
  <logback.version>1.0.13</logback.version>
  <slf4j.version>1.7.5</slf4j.version>
  <!-- Test -->
  <junit.version>4.11</junit.version>
 </properties>
 <dependencies>
  <!-- Spring and Transactions -->
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>${spring-framework.version}</version>
  </dependency>
  
  <!-- Apache Commons file upload -->
  <dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.2.2</version>
  </dependency>
  <!-- Apache Commons IO -->
  <dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-io</artifactId>
   <version>1.3.2</version>
  </dependency>
  <!-- JSTL for c: tag -->
  <dependency>
   <groupId>jstl</groupId>
   <artifactId>jstl</artifactId>
   <version>1.2</version>
  </dependency>
 </dependencies>
</project>

2. 모델 작성
 
fileupload.jsp에서 넘기는 폼 데이터를 받기 위한 객체
 
[FileForm.java]
 
package onj.spring.fileupload.model;
import java.util.List;
import org.springframework.web.multipart.MultipartFile;

public class FileForm {
 private List<MultipartFile> files;
 public List<MultipartFile> getFiles() {
  return files;
 }
 public void setFiles(List<MultipartFile> files) {
  this.files = files;
 }

}

3. 컨트롤러 작성
 
[OnjController.java]
 
package onj.spring.fileupload.controller;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import onj.spring.fileupload.model.FileForm;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class OnjController {

 @RequestMapping(value = "/view", method = RequestMethod.GET)
 public String displayForm() {
  return "fileupload";
 }
 @RequestMapping(value = "/save", method = RequestMethod.POST)
 public String save(@ModelAttribute("uploadForm") FileForm uploadForm,
   Model map) throws Exception {
  List<MultipartFile> files = uploadForm.getFiles();
 
  //success.jsp 로 보낼 파일 이름 저장
  List<String> fileNames = new ArrayList<String>();
  if (null != files && files.size() > 0) {
   for (MultipartFile multipartFile : files) {
    String fileName = multipartFile.getOriginalFilename();
    String path = "c:/java/project/upload/" + fileName;
   
    File f = new File(path);
   
    multipartFile.transferTo(f);
      
    fileNames.add(fileName);
   }
  }
  map.addAttribute("files", fileNames);
  return "success";
 }
}

4.  /src/main/webapps/jsp/fileupload.jsp
 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<html>
<head>
    <title>스프링 멀티 파일 업로드</title>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script>
<!-- jquery로 파일 첨부 추가 -->
$(document).ready(function() {
    //add more file components if Add is clicked
    $('#addFile').click(function() {
        var fileIndex = $('#fileview tr').children().length;     
        $('#fileview').append(
                '<tr><td>'+
                '   <input type="file" name="files['+ fileIndex +']" />'+
                '</td></tr>');
    });    
});
</script>
</head>
<body>
<h3>SpringMVC Muli File Upload example(oraclejavanew.kr)</h3>

<form:form method="post" action="save.html"
      modelAttribute="uploadForm" enctype="multipart/form-data">

    <input id="addFile" type="button" value="File Add" />
    <table id="fileview">
        <tr>
            <td><input name="files[0]" type="file" /></td>
        </tr>
        <tr>
            <td><input name="files[1]" type="file" /></td>
        </tr>
    </table>
    <br/><input type="submit" value="Upload" />
</form:form>
</body>
</html>

5. /src/main/webapps/jsp/success.jsp
 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
    <title>Spring MVC Multiple File Upload</title>
</head>
<body>
    <p>upload ok!!</p>
    <ol>
        <c:forEach items="${files}" var="file">
            <li>${file}</li>
        </c:forEach>
    </ol>
</body>
</html>

6. /WEB-INF/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_2_5.xsd"
 id="WebApp_ID" version="2.5">
 <!-- 디스패처 서블릿 정의 설정 -->
 <servlet>
  <servlet-name>springmvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <url-pattern>*.html</url-pattern>
 </servlet-mapping>
</web-app>
 
7. /WEB-INF/springmvc-servlet.xml
 
 <context:annotation-config />
 <context:component-scan base-package="onj.spring.fileupload.controller" />
 <bean id="multipartResolver"
  class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
 <bean id="jspViewResolver"
  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass"
   value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/jsp/" />
  <property name="suffix" value=".jsp" />
 </bean>
</beans>

8. 실행(context명/view.html)
 
실행하면 파일은 c:\java\project\upload 폴더에 생성된다.

스프링MultipartFile멀티(다중 파일 업로드[Spring Framework3.X MVC multiple file upload]

스프링MultipartFile멀티(다중 파일 업로드[Spring Framework3.X MVC multiple file upload]

1. fileupload 라는 spring mvc 프로젝트 생성
 
[전체구조]
 

 
[pom.xml]
 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>onj.springframework.samples</groupId>
 <artifactId>springmvc</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <properties>
  <!-- Generic properties -->
  <java.version>1.7</java.version>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  <!-- Spring -->
  <spring-framework.version>3.2.3.RELEASE</spring-framework.version>
  <!-- Logging -->
  <logback.version>1.0.13</logback.version>
  <slf4j.version>1.7.5</slf4j.version>
  <!-- Test -->
  <junit.version>4.11</junit.version>
 </properties>
 <dependencies>
  <!-- Spring and Transactions -->
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>${spring-framework.version}</version>
  </dependency>
  
  <!-- Apache Commons file upload -->
  <dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.2.2</version>
  </dependency>
  <!-- Apache Commons IO -->
  <dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-io</artifactId>
   <version>1.3.2</version>
  </dependency>
  <!-- JSTL for c: tag -->
  <dependency>
   <groupId>jstl</groupId>
   <artifactId>jstl</artifactId>
   <version>1.2</version>
  </dependency>
 </dependencies>
</project>

2. 모델 작성
 
fileupload.jsp에서 넘기는 폼 데이터를 받기 위한 객체
 
[FileForm.java]
 
package onj.spring.fileupload.model;
import java.util.List;
import org.springframework.web.multipart.MultipartFile;

public class FileForm {
 private List<MultipartFile> files;
 public List<MultipartFile> getFiles() {
  return files;
 }
 public void setFiles(List<MultipartFile> files) {
  this.files = files;
 }

}

3. 컨트롤러 작성
 
[OnjController.java]
 
package onj.spring.fileupload.controller;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import onj.spring.fileupload.model.FileForm;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class OnjController {

 @RequestMapping(value = "/view", method = RequestMethod.GET)
 public String displayForm() {
  return "fileupload";
 }
 @RequestMapping(value = "/save", method = RequestMethod.POST)
 public String save(@ModelAttribute("uploadForm") FileForm uploadForm,
   Model map) throws Exception {
  List<MultipartFile> files = uploadForm.getFiles();
 
  //success.jsp 로 보낼 파일 이름 저장
  List<String> fileNames = new ArrayList<String>();
  if (null != files && files.size() > 0) {
   for (MultipartFile multipartFile : files) {
    String fileName = multipartFile.getOriginalFilename();
    String path = "c:/java/project/upload/" + fileName;
   
    File f = new File(path);
   
    multipartFile.transferTo(f);
      
    fileNames.add(fileName);
   }
  }
  map.addAttribute("files", fileNames);
  return "success";
 }
}

4.  /src/main/webapps/jsp/fileupload.jsp
 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<html>
<head>
    <title>스프링 멀티 파일 업로드</title>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script>
<!-- jquery로 파일 첨부 추가 -->
$(document).ready(function() {
    //add more file components if Add is clicked
    $('#addFile').click(function() {
        var fileIndex = $('#fileview tr').children().length;     
        $('#fileview').append(
                '<tr><td>'+
                '   <input type="file" name="files['+ fileIndex +']" />'+
                '</td></tr>');
    });    
});
</script>
</head>
<body>
<h3>SpringMVC Muli File Upload example(oraclejavanew.kr)</h3>

<form:form method="post" action="save.html"
      modelAttribute="uploadForm" enctype="multipart/form-data">

    <input id="addFile" type="button" value="File Add" />
    <table id="fileview">
        <tr>
            <td><input name="files[0]" type="file" /></td>
        </tr>
        <tr>
            <td><input name="files[1]" type="file" /></td>
        </tr>
    </table>
    <br/><input type="submit" value="Upload" />
</form:form>
</body>
</html>

5. /src/main/webapps/jsp/success.jsp
 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
    <title>Spring MVC Multiple File Upload</title>
</head>
<body>
    <p>upload ok!!</p>
    <ol>
        <c:forEach items="${files}" var="file">
            <li>${file}</li>
        </c:forEach>
    </ol>
</body>
</html>

6. /WEB-INF/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_2_5.xsd"
 id="WebApp_ID" version="2.5">
 <!-- 디스패처 서블릿 정의 설정 -->
 <servlet>
  <servlet-name>springmvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <url-pattern>*.html</url-pattern>
 </servlet-mapping>
</web-app>
 
7. /WEB-INF/springmvc-servlet.xml
 
 <context:annotation-config />
 <context:component-scan base-package="onj.spring.fileupload.controller" />
 <bean id="multipartResolver"
  class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
 <bean id="jspViewResolver"
  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass"
   value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/jsp/" />
  <property name="suffix" value=".jsp" />
 </bean>
</beans>

8. 실행(context명/view.html)
 
실행하면 파일은 c:\java\project\upload 폴더에 생성된다.