[JAVA]filter multpart

JAVA 2017. 11. 16. 11:33

filter multpart


public class SecurityFilter extends org.springframework.web.filter.OncePerRequestFilter {

위는 HttpServletRequest를 받습니다.

고로 multPaet 캐스팅이 쉽습니다.


public class HTMLTagFilter implements Filter{
위는 ServletRequest 받다.

 




'JAVA' 카테고리의 다른 글

[JAVA]Filter sendRedirect  (0) 2017.11.16
[JAVA]Filter responseWrapper  (0) 2017.11.16
[JAVA]Filter HttpServletResponseWrapper HTML 소스 컨트롤  (0) 2017.11.16
[JAVA]Filter HTML 태그 제거  (0) 2017.11.08
[JAVA] extends T  (0) 2017.11.07
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

Filter HttpServletResponseWrapper HTML 소스 컨트롤


package keis.user.comm;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;


public class ResponseFilter implements Filter{

public void destroy() {
  
 }

       public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
  
            System.out.println("Filter.doFilter()");
        

HelloWorldResponse myResponse = new HelloWorldResponse((HttpServletResponse)res); 
chain.doFilter(req, myResponse);

// ----------- FilterChain의 호출이 끝나고 Servlet의 Service의 호출까지 끝난시점 --

// 이후에는 Response의 데이터를 캡쳐해 처리가 가능합니다
        
        res.setContentType("text/html");
        res.setCharacterEncoding("ksc5601");
        
        PrintWriter out = res.getWriter();
        String str = myResponse.toString();
        out.println("<root>");
        out.println("<value>");
        out.println(str.replaceAll("<", "&lt;").replaceAll(">", "&gt;"));
        out.println("</value>");
        out.println("</root>");  
 }

 public void init(FilterConfig arg0) throws ServletException {
  
 }

}
==============================================


package keis.user.comm;

import java.io.CharArrayWriter;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

public class HelloWorldResponse extends HttpServletResponseWrapper{
    private CharArrayWriter buffer;

    public HelloWorldResponse(HttpServletResponse response) {
        super(response);
        buffer = new CharArrayWriter();
    }
    
    public PrintWriter getWriter() {
        return new PrintWriter(buffer);
    }
    
    public String toString() {
        return buffer.toString();
    }
}


'JAVA' 카테고리의 다른 글

[JAVA]Filter responseWrapper  (0) 2017.11.16
[JAVA]filter multpart  (0) 2017.11.16
[JAVA]Filter HTML 태그 제거  (0) 2017.11.08
[JAVA] extends T  (0) 2017.11.07
[JAVA] 에러정의 web.xml  (0) 2017.11.07
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

Filter HTML 태그 제거


chain.doFilter(new HTMLTagFilterRequestWrapper((HttpServletRequest)request), response);


package egovframework.rte.ptl.mvc.filter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class HTMLTagFilterRequestWrapper extends HttpServletRequestWrapper
{

    public HTMLTagFilterRequestWrapper(HttpServletRequest request)
    {
        super(request);
    }

    public String[] getParameterValues(String parameter)
    {
        String values[] = super.getParameterValues(parameter);
        if(values == null)
            return null;
        for(int i = 0; i < values.length; i++)
            if(values[i] != null)
            {
                StringBuffer strBuff = new StringBuffer();
                for(int j = 0; j < values[i].length(); j++)
                {
                    char c = values[i].charAt(j);
                    switch(c)
                    {
                    case 60: // '<'
                        strBuff.append("&lt;");
                        break;

                    case 62: // '>'
                        strBuff.append("&gt;");
                        break;

                    case 38: // '&'
                        strBuff.append("&amp;");
                        break;

                    case 34: // '"'
                        strBuff.append("&quot;");
                        break;

                    case 39: // '\''
                        strBuff.append("&apos;");
                        break;

                    default:
                        strBuff.append(c);
                        break;
                    }
                }

                values[i] = strBuff.toString();
            } else
            {
                values[i] = null;
            }

        return values;
    }

    public String getParameter(String parameter)
    {
        String value = super.getParameter(parameter);
        if(value == null)
            return null;
        StringBuffer strBuff = new StringBuffer();
        for(int i = 0; i < value.length(); i++)
        {
            char c = value.charAt(i);
            switch(c)
            {
            case 60: // '<'
                strBuff.append("&lt;");
                break;

            case 62: // '>'
                strBuff.append("&gt;");
                break;

            case 38: // '&'
                strBuff.append("&amp;");
                break;

            case 34: // '"'
                strBuff.append("&quot;");
                break;

            case 39: // '\''
                strBuff.append("&apos;");
                break;

            default:
                strBuff.append(c);
                break;
            }
        }

        value = strBuff.toString();
        return value;
    }
}


'JAVA' 카테고리의 다른 글

[JAVA]filter multpart  (0) 2017.11.16
[JAVA]Filter HttpServletResponseWrapper HTML 소스 컨트롤  (0) 2017.11.16
[JAVA] extends T  (0) 2017.11.07
[JAVA] 에러정의 web.xml  (0) 2017.11.07
[JAVA] error  (0) 2017.11.06
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

[JAVA] extends T

JAVA 2017. 11. 7. 15:40

extends T


extends T


'JAVA'의 제너릭은 단순히 클래스 형을 전달하는 것 이상의 기능을 제공하기 때문에, 목적에 따라 응용하는 것이 가능합니다.

제너릭으로 전달받는 클래스형이 '특정 클래스를 상속'받거나, '특정 인터페이스를 구현'하는 클래스형으로 제한할 수 있습니다.


>> 방법 1 : 제너릭을 클래스 기술에 사용.

class [Class name] <T extends [Name of class or interface]>{

제너릭을 이용한 클래스 기능 명세.

}


>> 방법 2 -1 : 클래스의 범위를 한정하기 위해 사용.

class [Class name] <? extends [Name of class or interface]>{

제너릭을 사용하지 않고 클래스 기능 명세.

}


>> 방법 2 -2 : 클래스의 범위를 한정하기 위해 사용.

class [Class name] <? super T>{

제너릭을 사용하지 않고 클래스 기능 명세.

}


제너릭을 사용하는 방법은 < ~ > 내부에 클래스형을 넣는 것입니다. 이것 조차도 상당히 복잡해보이는 구조입니다.


[T extends G]

->> 인터페이스인 'G'를 구현하거나, 클래스인 'G'를 상속받는 데이터형 만을 제너릭 'T'로 수용합니다. 인터페이스난 클래스 모두 

'extends'를 사용합니다.


[T super G]

->> 상속 계층에서 'G 이상의 상위 계층에 속하는 데이터형' 만을 제너릭 'T'로 수용합니다.


[?]

->> 대상을 어떠한 것으로 명확하게 지정하지 않는다는 의미입니다.

'? extends X'는 'X'를 상속받거나 구현하는 어떤 것이든 가능하다는 의미입니다.

또한, '? super T'는 T 클래스형 혹은 그보다 상위 계층의 클래스형이라면 어떤 것이든 가능하다는 의미입니다.


※ Generics in Collection


ex) public static <T extends Comparable<? super T>> void         sort(List<T> list)


1. Comparable<? super T> => X

->> T와 같은 계층 혹은 그 이상의 클래스 형을 제너릭으로 받는 'Comparable'이라는 인터페이스를 의미합니다.


2. <T extends X>

->> T는 위에서 언급한 인터페이스를 구현하는 클래스형으로 제한됩니다.



'JAVA' 카테고리의 다른 글

[JAVA]Filter HttpServletResponseWrapper HTML 소스 컨트롤  (0) 2017.11.16
[JAVA]Filter HTML 태그 제거  (0) 2017.11.08
[JAVA] 에러정의 web.xml  (0) 2017.11.07
[JAVA] error  (0) 2017.11.06
[JAVA]EncodingFilter 구현  (0) 2017.11.06
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

[JAVA] 에러정의 web.xml

JAVA 2017. 11. 7. 15:21

에러정의 web.xml 



<!-- 에러 페이지 -->

<error-page>

<error-code>400</error-code>

<location>/WEB-INF/jsp/common/error/400error.jsp</location>

</error-page>

<error-page>

<error-code>404</error-code>

<location>/WEB-INF/jsp/common/error/404error.jsp</location>

</error-page>

<error-page>

<error-code>403</error-code>

<location>/WEB-INF/jsp/common/error/403error.jsp</location>

</error-page>

<error-page>

<error-code>500</error-code>

<location>/WEB-INF/jsp/common/error/500error.jsp</location>

</error-page>

<error-page>
    <exception-type>java.lang.Throwable</exception-type>
     <location>/WEB-INF/jsp/common/error/error.jsp</location>
</error-page>

</web-app>



'JAVA' 카테고리의 다른 글

[JAVA]Filter HTML 태그 제거  (0) 2017.11.08
[JAVA] extends T  (0) 2017.11.07
[JAVA] error  (0) 2017.11.06
[JAVA]EncodingFilter 구현  (0) 2017.11.06
[JAVA]Download outOfMemory  (0) 2017.11.03
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

[JAVA] error

JAVA 2017. 11. 6. 11:21

ERROR


CharConversionException : 문자 변환의로 발생하는 예외의

base class입니다.


EOFException : 입력의 도중에, 예상외의 파일의 종료, 또는 예상외의 Stream의 종료가 있던 것을 나타내는 시그널입니다.


FileNotFoundException : 지정된 패스명으로 나타나는 파일이 열리지 않았던 것을 통지합니다.


InterruptedIOException : 입출력 처리로 세치기가 발생한 것을 통지하는 시그널을 발생시킵니다.


InvalidClassException : 직렬화 런타임이, 클래스에 도착해 다음의 문제의 어떤 것인지를 검출했을 때에 슬로우 됩니다.  


InvalidObjectException : 1 개(살) 이상의 직렬화 복원 오브젝트가 검증을 패스하지 않았던 것을 나타냅니다.  


IOException : 하등의 입출력 예외의 발생을 통지하는 시그널을 발생시킵니다.  


NotActiveException : 직렬화 또는 직렬화 복원이 액티브하지 않는 경우에 슬로우 됩니다.  


NotSerializableException : 인스턴스가 직렬화 가능 인터페이스를 가질 필요가 있는 경우에 슬로우 됩니다.  


ObjectStreamException : 오브젝트 Stream 클래스에 고유의 예외 모든 슈퍼 클래스입니다.  


OptionalDataException : 원시적 데이터가 읽히지 않은지, 또는 데이터의 마지막이 Stream내의 직렬화 오브젝트에 있기 (위해)때문에, 오브젝트의 read 조작이 실패한 것을 나타내는 예외입니다.  


StreamCorruptedException : 오브젝트 Stream로부터 읽힌 제어 정보가, 내부 정합성 검사에 위반하고 있었을 경우에 슬로우 됩니다.  


SyncFailedException : 동기 (sync) 오퍼레이션이 실패한 것을 통지합니다.  


UnsupportedEncodingException : 문자의 인코딩이 서포트되고 있지 않습니다.  


UTFDataFormatException : 부정한 구조를 가지는 UTF-8 스트링이, 데이터 입력 Stream내에 읽혔는지, 또는 데이터 입력 인터페이스를 구현하는 클래스에 의해 읽힌 것을 나타냅니다. 

 

WriteAbortedException : 기입 오퍼레이션중에 ObjectStreamException 가 슬로우 된 것을 통지합니다. 


java.lang


Java 프로그램 언어의 설계해 기본적인 클래스를 제공합니다. 무엇보다 중요한 클래스는 클래스 계층 루트 Object 와 실행시의 클래스를 나타내는 인스턴스 Class 입니다 

원시적형의 값을 오브젝트와 같이 나타내는 경우에는 자주(잘) 필요하게 됩니다. 래퍼 클래스 Boolean,Character,Integer,Long,Float, 및 Double 가 이 목적으로 사용됩니다. 

예를 들어,Double 형의 오브젝트는 double 형의 필드를 포함해, 참조형의 변수에 격납되는 앞에의 참조라고 하는 방법으로 값을 나타냅니다. 이 클래스는 원시적치의 사이에 변환하는 메소드를 제공하는 것과 동시에,equals 및 hashCode 등의 표준 메소드를 서포트합니다. 

클래스 Math 는, 탄젠트 (싸인), 여현 (코사인), 평방근이라고 하는 계산으로 자주(잘) 사용되는 함수를 제공합니다. 

클래스 String 및 StringBuffer 는 스트링으로 자주(잘) 사용되는 오퍼레이션을 제공합니다. 

클래스 ClassLoader,Process,Runtime, SecurityManager, 및 System 는, 동적인 클래스의 로드, 외부 프로세스의 작성, 일자등의 호스트 환경의 조회, 및 시큐러티 폴리시의 실시를 관리하는 「시스템 오퍼레이션」을 제공합니다. 

클래스 Throwable 는 throw 문 (§14. 16)에 의해 슬로우 되는 오브젝트를 포함 합니다. 

Throwable 의 서브 클래스는 에러와 예외를 나타냅니다.


예외의 개요 


ArithmeticException : 산술 계산으로 예외적 조건이 발생했을 경우에 슬로우 됩니다.  


ArrayIndexOutOfBoundsException : 부정한 인덱스를 사용해 배열이 액세스 된 것을 나타내기 위해서(때문에) 슬로우 됩니다. 


ArrayStoreException : 부정한 형태의 오브젝트를 오브젝트의 배열에 격납하려고 한 것을 나타내기 위해서(때문에) 슬로우 됩니다.  


ClassCastException : 어느 오브젝트를 상속 관계에 없는 클래스에 캐스트 하려고 한 것을 나타내기 위해서(때문에) 슬로우 됩니다.  


ClassNotFoundException : 어플리케이션이, 클래스의 스트링명을 사용해 다음의 메소드로 로드하려고 했지만, 지정된 이름의 클래스의 정의가 발견되지 않았던 경우에 슬로우 됩니다.  


CloneNotSupportedException : 오브젝트를 복제하기 위해서 Object 클래스의 clone 메소드가 불려 갔지만, 그 오브젝트의 클래스가Cloneable : 인터페이스를 구현하고 있지 않는 것을 나타내기 위해서(때문에) 슬로우 됩니다.  


Exception : Exception 클래스와 그 서브 클래스는, 통상의 어플리케이션으로 캐치 될 가능성이 있는 상태를 나타내는 Throwable 의 형식의 1 개입니다.  


IllegalAccessException : 어플리케이션이, 배열 이외의 인스턴스 작성, 필드의 설정 또는 취득, 메소드의 호출을 시도했을 경우에, IllegalAccessException 가 슬로우 됩니다.  


IllegalArgumentException : 부정한 인수, 또는 부적절한 인수를 메소드에 건네준 것을 나타내기 위해서(때문에) 슬로우 됩니다.  


IllegalMonitorStateException : 소정의 모니터를 가지지 않는 thread가 오브젝트의 모니터로 기다리는 것을 시도한 것, 혹은 다른 thread가 소정의 모니터를 가지지 않고 오브젝트의 모니터로 기다리는 것을 통지한 것을 나타내기 위해서(때문에) 슬로우 됩니다.  


IllegalStateException : 부정 또는 부적절한 때에 메소드가 불려 간 것을 나타냅니다.  


IllegalThreadStateException : 요구된 오퍼레이션에 대해서 thread 상태가 부적절한 것을 나타내기 위해서(때문에) 슬로우 됩니다.  


IndexOutOfBoundsException : 어떤 종류의 인덱스 (배열, 스트링, 벡터등)가 범위외인 것을 나타내기 위해서(때문에) 슬로우 됩니다.  


InstantiationException : 어플리케이션이 Class 클래스의 newInstance 메소드를 사용해 클래스의 인스턴스를 생성하려고 했을 때에, 클래스가 인터페이스 또는 abstract 클래스이기 위해서(때문에) 지정된 오브젝트의 인스턴스를 생성할 수 없는 경우에 슬로우 됩니다.  


InterruptedException : 어느 thread가 오랫동안의 대기 상태, 휴지 상태, 또는 일시정지 상태일 때, 다른 thread가 Thread 클래스의 interrupt 메소드를 사용해 이 상태에 세치기를 걸었을 경우에 슬로우 됩니다.  


NegativeArraySizeException : 부의 사이즈를 가진 배열을 어플리케이션이 작성하려고 했을 경우에 슬로우 됩니다.  


NoSuchFieldException : 지정된 이름의 필드가 클래스에는 없는 것을 통지합니다.  


NoSuchMethodException : 특정의 메소드가 발견되지 않는 경우에 슬로우 됩니다.  


NullPointerException : 오브젝트가 필요한 경우에, 어플리케이션이 null 를 사용하려고 하면(자) 슬로우 됩니다.  


NumberFormatException : 어플리케이션이 스트링을 수치형으로 변환하려고 했을 때, 스트링의 형식이 올바르지 않은 경우에 슬로우 됩니다.  


RuntimeException : RuntimeException 는, Java 가상 머신의 통상의 처리로 슬로우 할 수가 있는 각종의 예외의 슈퍼 클래스입니다.  


SecurityException  : 시큐러티 매니저에 의해 슬로우 되어 시큐러티 위반을 나타냅니다.  


StringIndexOutOfBoundsException : String 메소드에 의해 슬로우 되어 인덱스가 부 또는 스트링의 사이즈보다 큰 일을 나타냅니다.  


UnsupportedOperationException : 요구된 오퍼레이션이 서포트되어 있지 않은 것을 나타내기 위해서(때문에) 슬로우 됩니다.  


에러의 개요


AbstractMethodError : 어플리케이션이 abstract 메소드를 호출하려고 했을 경우에 슬로우 됩니다.  


AssertionError : 선언이 실패한 것을 나타내기 위해서(때문에) 슬로우 됩니다.  


ClassCircularityError : 클래스의 초기화시에 루프가 발견되었을 경우에 슬로우 됩니다.  


ClassFormatError : Java 가상 머신이 클래스 파일을 읽어들이려고, 파일이 망가져 있다고 판단했을 경우, 또는 클래스 파일로서 해석할 수 없는 경우에 슬로우 됩니다.  


Error : Error 는 Throwable 의 서브 클래스에서, 통상의 어플리케이션이면 캐치 해서는 안되는 중대한 문제를 나타냅니다. 


ExceptionInInitializerError : static 초기화자로 예상외의 예외가 발생한 것을 통지합니다.  


IllegalAccessError : 액세스 할 수 없는 필드에의 액세스나 변경, 혹은 액세스 할 수 없는 메소드의 호출을 어플리케이션이 시도했을 경우에 슬로우 됩니다.  


IncompatibleClassChangeError : 클래스 정의에 호환성이 없는 변경이 있었을 경우에 슬로우 됩니다.  


InstantiationError : 어플리케이션이 Java 의 new 구문을 사용해 abstract 클래스나 인터페이스의 인스턴스를 생성하려고 했을 때에 슬로우 됩니다.  

InternalError : Java 가상 머신내에서 예기치 않은 내부 에러가 발생한 것을 나타내기 위해서(때문에) 슬로우 됩니다.  


LinkageError : LinkageError 의 서브 클래스는, 어느 클래스가 다른 클래스에 의존관계(dependencies)가 있는 경우에, 전자의 클래스를 컴파일 한 뒤, 후자의 클래스에의 변경에 의해 호환성이 없어진 것을 나타냅니다.  


NoClassDefFoundError : 통상의 메소드 호출해, 혹은 new 식을 사용한 새로운 인스턴스의 생성으로, Java 가상 머신 또는 ClassLoader 인스턴스가 클래스 정의를 로드하려고 했지만, 클래스 정의가 보고 매운 있고 경우에 슬로우 됩니다.  


NoSuchFieldError : 오브젝트의 지정된 필드에 어플리케이션이 액세스, 또는 변경을 시도했을 때, 오브젝트에 그 필드가 없는 경우에 슬로우 됩니다.  


NoSuchMethodError : 어느 클래스의 특정의 메소드 (static 메소드, 또는 인스턴스 메소드)를 어플리케이션이 호출하려고 했을 때, 벌써 그 클래스에는 불려 간 메소드의 정의가 없는 경우에 슬로우 됩니다.  


OutOfMemoryError : 메모리 부족을 위해서(때문에) Java 가상 머신이 오브젝트를 할당하지 못하고, 가베지 수집가에 의해도 사용 가능한 메모리를 더 이상 확보 가능한 있고 경우에 슬로우 됩니다.  


StackOverflowError : 어플리케이션에서의 재귀의 회수가 너무 많아서 스택 오버플로우가 일어나는 경우에 슬로우 됩니다.  


ThreadDeath : ThreadDeath 의 인스턴스는,Thread 클래스의 인수 없음의 stop 메소드가 불려 가면(자), 대상이 되는 thread내에서 슬로우 됩니다.  


UnknownError : 미지이지만 중대한 예외가 Java 가상 머신으로 발생했을 경우에 슬로우 됩니다.  


UnsatisfiedLinkError : Java 가상 머신이,native 라고 선언된 메소드의 적절한 네이티브 언어의 정의를 찾아낼 수가 없는 경우에 슬로우 됩니다.  


UnsupportedClassVersionError : Java Virtual Machine 가, 클래스 파일의 read중에, 그 파일의 메이저 버젼 번호와 마이너 버젼 번호가 서포트되어 있지 않으면 판정했을 경우에 슬로우 됩니다.  


VerifyError : 클래스 파일이 적절한 형식에서도, 어떤 종류의 내부 모순 또는 시큐러티상의 문제가 있는 것을 「베리파이아 (verifier)」가 검출했을 경우에 슬로우 됩니다.  


VirtualMachineError : Java 가상 머신이 망가져 있는지, 또는 동작을 계속하는데 필요한 자원이 부족하게 된 것을 나타내기 위해서(때문에) 슬로우 됩니다. 


java.net


네트워크 대응 어플리케이션을 구현하기 위한 클래스를 제공합니다. 소켓 관련의 각 클래스를 사용해, 인터넷상의 임의의 서버와 통신하거나 독자적인 인터넷 서버를 구현하거나 할 수 있습니다. 인터넷상의 데이터의 취득에 URL (Universal Resource Locator)를 간단하게 사용할 수 있도록, 다수의 클래스를 제공하고 있습니다. 


예외의 개요 


BindException : 로컬인 주소 및 포토에 대해서 소켓의 바인드를 시행중에 에러가 발생한 것을 통지합니다. 

 

ConnectException : 리모트인 주소 및 포토에 대해서 소켓의 접속을 시행중에 에러가 발생한 것을 통지합니다. 


MalformedURLException : 무효인 서식의 URL 가 발생한 것을 나타내기 위해서(때문에) 슬로우 됩니다.  


NoRouteToHostException : 소켓을 리모트 주소 및 포토에 접속하려고 했을 때에 에러가 발생한 것을 나타냅니다.  


PortUnreachableException : ICMP 포토 도달 불가능 메세지가 접속된 데이터 그램에 수신된 것을 나타내는 시그널입니다.  


ProtocolException : 사용하고 있는 프로토콜로 에러 (TCP 에러등)가 발생한 것을 나타내기 위해서(때문에) 슬로우 됩니다.  


SocketException : 사용하고 있는 프로토콜로 에러 (TCP 에러등)가 발생한 것을 나타내기 위해서(때문에) 슬로우 됩니다.  


SocketTimeoutException : 소켓의 읽어들여 또는 수락으로 타임 아웃이 발생한 것을 나타내는 시그널입니다.  


UnknownHostException : 호스트의 IP 주소를 판정할 수 없었던 경우에 슬로우 됩니다.  


UnknownServiceException : 미지의 서비스 예외가 발생한 것을 나타내기 위해서(때문에) 슬로우 됩니다.  


URISyntaxException : 스트링을 URI 참조로서 해석할 수 없었던 것을 나타내기 위해서(때문에) 슬로우 된 확인 끝난 예외입니다. 

 

java.sql
JavaTM 프로그램 언어를 사용해 데이터 소스 (통상은 RDB)의 데이터에 액세스 해 처리하는 API 를 제공합니다. 이 API 에 포함되어 있는 체제로, 복수의 드라이버를 인스톨 해 복수의 데이터 소스에 동적으로 액세스 할 수가 있습니다. JDBCTM API 는 주로 SQL 문을 데이타베이스에 건네주기 위해서(때문에) 만들어지고 있습니다만, 겉(표) 형식의 임의의 데이터 소스의 데이터의 read 및 기입을 제공합니다. javax.sql.RowSet 인터페이스 그룹을 개입시켜 사용 가능한 읽어들여/기입 기능은, 스프레드쉬트, 플랫 파일, 또는 다른 겉(표) 형식의 데이터 소스의 데이터를 사용하거나 갱신하기 위해서 커스터마이즈 할 수 있습니다.

예외의 개요 

BatchUpdateException : 배치 갱신 오퍼레이션중에 에러가 발생했을 때에 슬로우 되는 예외입니다.  


DataTruncation : JDBC 가 예기 하지 않고 데이터의 값을 잘라 버리는 경우에, DataTruncation 경고를 통지하는 (read시)인가, DataTruncation : 예외를 슬로우 하는 (기입시) 예외입니다. 

 

SQLException : 데이타베이스 액세스 에러 또는 그 외의 에러에 관한 정보를 제공하는 예외입니다.  


SQLWarning : 데이타베이스 액세스의 경고에 관한 정보를 제공하는 예외입니다. 


java.util

이 패키지에는, 콜렉션 체제, 유산 콜렉션 클래스, 이벤트 모델, 일시 기능, 국제화, 및 다양한 유틸리티 클래스 (StringTokenizer, 난수 제너레이터, 및 비트 배열)가 포함되어 있습니다. 

예외의 개요 

ConcurrentModificationException : 이 예외는, 오브젝트의 동시 변경을 검출한 메소드에 의해, 그러한 변경이 허가되어 있지 않은 경우에 슬로우 됩니다.  

EmptyStackException : Stack 클래스의 메소드에 의해 슬로우 되어 그 스택이 하늘인 것을 나타냅니다. 

MissingResourceException : 자원이 결핍 하고 있는 것을 통지합니다.  

NoSuchElementException : 이 열거에 그 이상의 요소가 없으면Enumeration 의 nextElement 메소드에 의해 슬로우 됩니다.  

TooManyListenersException : TooManyListenersException 는, Java 이벤트 모델의 일부로서 통상은 멀티 캐스트의 이벤트 소스를 uni-cast의 특수한 케이스이다고 주석을 붙여 구현하기 위해서 사용합니다. 

org.xml.sax 

예외  
SAXException 
SAXNotRecognizedException 
SAXNotSupportedException 
SAXParseException 

 

error 팁 :  

많이 볼 수 있는 예외가 있습니다.


ArithmeticException -> 산술에러로서 0으로 나눈다든가등의 산술적 계산 오류에서 일어납니다.


ArrayIndexOutofBoundsException -> 배열의 크기가 주어진 값을 넘어갔을 때 일어납니다.


NullPointException -> local변수의 초기화를 해주지 않을 경우 일어납니다



'JAVA' 카테고리의 다른 글

[JAVA] extends T  (0) 2017.11.07
[JAVA] 에러정의 web.xml  (0) 2017.11.07
[JAVA]EncodingFilter 구현  (0) 2017.11.06
[JAVA]Download outOfMemory  (0) 2017.11.03
[JAVA]Dispatche :: request.getRequestDispatcher("/prg/board_excel.jsp");  (0) 2017.11.03
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

[JAVA]EncodingFilter 구현

JAVA 2017. 11. 6. 10:13

EncodingFilter 구현



package com.eBrother.wepa.web.filter;


import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;


public class EncodingFilter implements Filter {

private String encofing = null;

protected FilterConfig filterConfig = null;

public void destroy() {

this.encoding = null;

this.filterConfig = null;

}

/**

 * ServletRequest

*/


public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException{


if(request.getCharacterEncoding() == null){

if(encoding != null){

request.setCharacterEncoding(encoding);

}

}

request.setCharacterEncoding(encoding);

chain.doFilter(request, response);

}

/**

 * web.xml

*/


public void init(FilterConfig filterConfig) throws ServletException{

this.filterConfig = filterConfig;

this.encoding = filterConfig.getInitParameter("encoding");

}


public FilterConfig getFilterConfig() {

return filterConfig;

}


public void setFilterConfig(FilterConfig cfg){

filterConfig = cfg;

}

}


'JAVA' 카테고리의 다른 글

[JAVA] 에러정의 web.xml  (0) 2017.11.07
[JAVA] error  (0) 2017.11.06
[JAVA]Download outOfMemory  (0) 2017.11.03
[JAVA]Dispatche :: request.getRequestDispatcher("/prg/board_excel.jsp");  (0) 2017.11.03
[JAVA]dbconnection 끊어지는 현상  (0) 2017.11.03
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

[JAVA]Download outOfMemory

JAVA 2017. 11. 3. 15:53

Download outOfMemory


JAVA 에서 파일 다운로드 구현 시 파일사이즈가 작은 경우는 아무렇게나 코딩을 해도 쉽사리 에러가 나지 않습니다. 하지만 큰 파일을 다운로드 하는 서블릿이나 Action 을 구현할 경우 종종 OutOfMemory 가 발생 할 수 있습니다.


byte[] buffer 를 이용하는 것은 널리 알려져 있지만, 그래도 종종 문제가 되는 상황을 보게 되는데, StackOverFlow에 좋은 답변이 나와있어서 개인적으로 정리를 해보기 위해 작성합니다.



원문

http://stackoverflow.com/questions/7106775/how-to-download-large-files-without-memory-issues-in-java


1. byte[] buf = new byte[8192];

(보통은 1024로 해도 됩니다. ) 식으로 코딩적으로 read buffer 를 구성하면 한번에 읽어들여 메모리상에 올리지 않도록 함.


2. 파일이 클경우는 while 루프를 모두 돌아 한방에 flush() 을 했다가는 여차하면 OutOfMemory 가 발생하므로 적절하게 중간에 flush()를 해서 write 버퍼를 비우는 작업을 해줍시다. (파일이 작을경우는 상관없지만, 파일이 크게되면 필수적으로 해주는게 좋을꺼같습니다.)


3. 추가적으로 파일이 클 경우 흔히들 사용하는 BufferedInputStream 보다 FileInputStream 을 사용하는게 메모리 사용상 좋다고 합니다. (제 의견보다는 원문에 작성자분께서 우선적으로 사용해보면 좋다고..)


ex) Servlet 이든 jsp 이든 적절히 둘러싸면 될꺼 같습니다.


FileInputStream fileInputStream  = new FileInputStream(file);

byte[] buf = new byte[8192];

int bytesread = 0, bytesBuffered = 0;

while( (bytesread = fileInputStream.read( buf )) > -1 ) {

out.write (buf, 0, bytesread);


bytesBuffered += bytesread;

    if (bytesBuffered > 1024 * 1024) { //flush after 1MB

        bytesBuffered = 0;

        out.flush();

}

}

out.flush();



'JAVA' 카테고리의 다른 글

[JAVA] error  (0) 2017.11.06
[JAVA]EncodingFilter 구현  (0) 2017.11.06
[JAVA]Dispatche :: request.getRequestDispatcher("/prg/board_excel.jsp");  (0) 2017.11.03
[JAVA]dbconnection 끊어지는 현상  (0) 2017.11.03
[JAVA] DateUtil2  (0) 2017.11.01
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

Dispatche :: request.getRequestDispatcher("/prg/board_excel.jsp");




<%

String excelFlag = request.getParameter("excelFlag") == null ? " " : 

request.getParameter("excelFlag");


if (excelFlag.equals("Y")) {

RequestDispatcher rd = request.getRequestDispatcher("/prg/board_excel.jsp");

rd.forward(request, response);

return;

}

%>

'JAVA' 카테고리의 다른 글

[JAVA]EncodingFilter 구현  (0) 2017.11.06
[JAVA]Download outOfMemory  (0) 2017.11.03
[JAVA]dbconnection 끊어지는 현상  (0) 2017.11.03
[JAVA] DateUtil2  (0) 2017.11.01
[JAVA]DateUtil  (0) 2017.11.01
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

dbconnection 끊어지는 현상


DB 연결 부분은 아래와 같은 설정입니다. 


server.xml 또는 context.xml

<Resource name="jdbc/MyDS" auth="Container"         type="javax.sql.DataSource"

        username="nextree"

        password="xxx"

        driverClassName="com.mysql.jdbc.Driver"

        url="jdbc:mysql://localhost:3306/nextree"/>


다음과 같은 예외가 가끔 떨어지고 다시 접속하면 연결이 잘 됩니다.


<에러 내용>

Caused by: java.sql.SQLException: Already closed.

at org.apache.tomcat.dbcp.dbcp.PoolableConnection.close(PoolableConnection.java:84)


at org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:181)


at 

org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:313)

...


<원인>

Tomcat이 DB pool에서 MySQL connection을 물고 있더라도 MySQL 입장에서는 오래된 connection을 문제라고 생각하고 끊어버립니다.

오랜만에 애플리케이션에 접속하여 끊어진 connection을 사용할 경우 발생 합니다.

즉 Tomcat이 사용하는 DB pool인 DBCP가 MySQL에 의해 끊어진 connection을 주고 애플리케이션이 이걸 사용하려다가 발생하는 에러 입니다. 


<해결책>

DBCP가 connection을 돌려주기 전 해당 connection이 살아있는지 검사하는 설정을 해야 합니다.


<Resource name="jdbc/MyDS" auth="Container"         type="javax.sql.DataSource"

        username="nextree"

        password="xxx"

        driverClassName="com.mysql.jdbc.Driver"

        url="jdbc:mysql://localhost:3306/nextree"

        validationQuery="select 1" />


validationQuery 설정은 DBCP가 connection을 반환하기전 설정된 쿼리를 날려 connection이 유효한지 검사하고 유효하지 않다면 다시 연결하여 유효한 connection을 반환합니다.


이 설정은 대부분의 WAS가 모두 지원하고 운영서버에서 반드시 해주어야하는 설정입니다.

그 외 운영 서버에서 권하는 설정은 아래 URL을 참조 해주시기 바랍니다.




http://commons.apache.org/dbcp/configuration.html

'JAVA' 카테고리의 다른 글

[JAVA]Download outOfMemory  (0) 2017.11.03
[JAVA]Dispatche :: request.getRequestDispatcher("/prg/board_excel.jsp");  (0) 2017.11.03
[JAVA] DateUtil2  (0) 2017.11.01
[JAVA]DateUtil  (0) 2017.11.01
[JAVA] context root path  (0) 2017.11.01
블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,