자바·JSP2015. 5. 29. 14:59

문자열 : <table width="100%" align="center"/>


1. table의 width=100% OR align=center만 추출하는 경우

  Document document =Jsoup.parse(htmlString);

                  document.select("table[width=100%],table[align=center]");


2. AND 연산(width=100%이고 align=center인 경우)

가. Elements tables = document.select("table[width=100%]").select("table[align=center]");

나. Elements element =document.select("table[align=center]");

                    element =element.select("table[width=100%]");


3. AND 연산(width=100%이고 align=center이고 table안에 문자열이 text인 경우)

  Elements tables = document.select("table[width=100%].select("table[align=center]:contains(text)");

Posted by 미랭군
자바·JSP2015. 1. 30. 09:04

MyBatis / iBatis에서 조건절에 Like 검색시 처리하는 방법이다.



검색하고자 하는 필드명이 "title" 이고 해당 필드에서 검색할 내용을 파라미터를 "keyword" 라고 하면 아래와 같이 검색할 수 있다.

[MySQL]
title like CONCAT('%',#{keyword},'%')


[Oracle]
title like '%' ||  #{keyword} || '%'


[MSSQL]
title like '%' + #{keyword} + '%' 



정리 : 각 DBMS에 맞게 문자열 합치기 함수를 사용하여 이용하면 된다.

Posted by 미랭군
자바·JSP2014. 10. 8. 19:49

파일 다운로드시 크롬에서 "서버에서 중복헤더를 수신했습니다." 라고 나오는경우는 

파일명에 콤마 "," 가 들어가있어서 그럴 경우가 많다.

참고로 크롬이외의 IE등에서는 에러가 발생하지 않는다..

검색해보면 .replace 함수로 콤마를 변경하면 된다고 하는데, 
그냥 단순히 파일명이 변경되는게 싫어서 더 검색하다보니 결국 찾았다.


그리 어려운것도 아니고 파일명을 따옴표로 감싸주기만 하면된다.

Response.AddHeader("Content-Disposition", "attachment;filename=" + file.Name+ "");
Response.AddHeader("Content-Disposition", "attachment;filename=\"" + file.Name+ "\"");



+ 추가 2014/04/23

IE에서 한글파일 다운로드시 파일명이 깨지는데.. 파일명을 다시 인코딩 해주어야 한다..

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(file.Name, System.Text.Encoding.UTF8) + "\"");


'자바·JSP' 카테고리의 다른 글

jsoup 사용 예제  (0) 2015.05.29
MyBatis / iBatis에서 조건절에 Like 검색 시 처리하는 방법  (0) 2015.01.30
파일 사이즈체크  (0) 2014.04.11
Maven이란 무엇인가?  (0) 2014.03.06
[JSTL] JSTL 필수 문법  (0) 2013.08.24
Posted by 미랭군
자바·JSP2014. 4. 11. 16:54
unction filesize() {

var size = 0;

var browser=navigator.appName;
if (browser=="Microsoft Internet Explorer")
{
var oas = new ActiveXObject("Scripting.FileSystemObject");
var filepath = document.getElementById('file').value;
var e = oas.getFile(filepath);
size = e.size;
}
else
{
var node = document.getElementById('file');
size = node.files[0].fileSize;
}
alert(size);
}


Posted by 미랭군
자바·JSP2014. 3. 6. 00:54

Maven은 크게 두가지 기능이 있다. 첫번째 라이브러리 관리 기능이다. Java로 개발을 하다보면 Spring, jdbc, junit, mybatis등 필요한 라이브러리들이 많다. 이걸 .zip형태로 다운받아서 수동으로 라이브러리를 추가 해줘도 된다.

수동으로 하는 방법이 방법이 훨씬 직관적일 수 있으니까. 이를테면 덧셈을 할 때 '1 + 1 = 2'라고 배우기 전에 사과 두개를 그려 놓고 '사과 한개에 사과 한개가 더 있으면 사과 2개이다.' 라고 하면서 배우는 것과 같은 이치이다.

나중에는 내가 덧셈을 배울 때 사과로 배웠는지 산까치로 배웠는지 잊어버리듯이 메이븐의 라이브러리 관리는 우리가 처음에 수동으로 라이브러리를 다운로드 받고 경로를 추가해주던지 복사해 주던지 하면서 외부 라이브러리를 관리 하다가 이것을 편하게 관리해 주는 기능만을 사용하도록 만들어 준다.

써보면 안다. 쓰는 법은 차차 익히게 될 것이다. 한번에 설명을 해줄 수 없으니 지금은 이해가 잘 가지 않더라도 천천히 가보도록 하자.

메이븐의 라이브러리 관리 기능은 너무 편하다. 이클립스에 기본으로 탑재 되어 있으므로 별다른 설정 없이 그냥 사용하면 된다.

pom.xml이라는 파일에 우리가 만들 App에 어떠한 라이브러리를 사용할 것인지 적어 놓기만 하면 Maven이 알아서 다운 받고 알아서 설치해 주고 경로도 지정해준다.

메이븐은 pom.xml이라고 해도 과언은 아니다. 메이븐이 편한 이유는 pom.xml파일만 있으면 Maven이 설치되어 있는 IDE라던지 혹은 시스템에 설치가 되어 있으면 Maven빌드를 통해 해당 파일을 다른곳에서도 쉽게 설치해준다.

이것은 git을 이용한 팀 프로젝트 할 때 더 유용하다.

두번째, 빌드 기능이다. 빌드란 무엇인지 이전 글에 써 놓은것을 보면 대충 감이 잡힐 것이다. '빌드'기능은 Ant도 가지고 있는 기능인데, 굳이 원한다면 라이브러리 관리는 maven으로 해도 되고 빌드는 수동으로 하거나 Ant를 이용해서 해도 된다.

하지만 결국은 maven하나로 통일하게 될 것이다.


결론은 메이븐이란 라이브러리 관리+빌드 툴인거다.

Posted by 미랭군
자바·JSP2013. 8. 24. 20:02

JSTL 리스트 카운트 표시

<c:set value="${list.size()}" var="listCnt"></c:set>


JSTL 조건문

<c:if test="${listCnt == listStatus.index }">

</c:if>


JSTL if, else 조건문

<c:choose>

<c:when test="${listCnt > 0}">

<c:forEach items="${list}" var="listItem" varStatus="listStatus">

listItem.title, listItem.content

</c:forEach>

</c:when>

<c:otherwise>

게시물이 없습니다.

</c:otherwise>

</c:choose>


  <c:choose>

        <c:when test="${results.totalAns ne 0}">

            <fmt:formatNumber value="${results.totalSec / results.totalAns }" maxFractionDigits="3" />

        </c:when>

        <c:otherwise>

            0

        </c:otherwise>

    </c:choose>


JSTL formatter

<fmt:parseDate  type="date" value="${listItem.regDt }" var="regDt" pattern="yyyyMMddHHmmss"/>

<fmt:formatDate value="${regDt}" pattern="yyyy-MM-dd HH:mm" />  


Posted by 미랭군
자바·JSP2013. 8. 19. 13:30

프로젝트들을 셋팅하고 있는데 아래와 같은 에러가 났다.

Access restriction: The type BASE64Decoder is not accessible due to restriction on required library 

확인해보니 이건 로컬 이클립스 셋팅에 나는거지 소스상에 문제는 없다. (rt.jar에 있는 특정 클래스 직접 접근하려고 했을 경우 나는 에러)

 

Window -> Preferences -> java -> Compiler -> Errors/Warnings 들어가서

Deprecated and restricted API 를 활성화 시켜서 Forbidden reference (access rules) 에 Error 로 체크되어 있는걸

Ignore로 바꿔주고 Apply 하면 된다.

Posted by 미랭군
자바·JSP2013. 4. 24. 12:22

디버깅 모드(퍼스펙티브)에서 왼쪽 위에 메뉴에 보면 "Skip all Breakpoints"가 활성화되어있는 경우이다.

이 메뉴를 비활성화 시키면 정상적으로 작동된다.

Posted by 미랭군
자바·JSP2013. 1. 15. 17:42

//특정 서버에서 클라이언트 측으로 제공하는 웹문서(html)을 읽어서 저장하는 코드

import java.net.*;
import java.io.*;

public class URLTest2 {
public static void main(String[] ar) throws IOException {
URL url = null;
BufferedReader br = null; // URL정보를 긁어오기 위함
BufferedWriter bw = new BufferedWriter(new FileWriter("sourceCopy.html"));

String str = null;

try {// URL은 프로토콜(http)부터 다 써줘야 한다
url = new URL("http://java.sun.com");
} catch (MalformedURLException e) {
System.out.println("잘못된URL 입니다");
e.printStackTrace();
}// URL 객체만 생성하고 통신하고 있는 상태는 아님



//데이터긁어오기 , 읽을때 파일명이아닌 네트웍 주소를 가져와야함
try {
br = new BufferedReader(new InputStreamReader(url.openStream()));
//url.openStream()을 넣으면 네트웍주소를 가져옴
while((str = br.readLine())!=null){
System.out.println(str);
bw.write(str);
bw.write("\r\n");
//서버쪽코드에는 접근할수 없고
//클라이언트쪽에서 보여지는 창의 코드들을 읽어서 출력함
//클라이언트쪽 코드도 막아놓을 수도 있음
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

bw.close();
br.close();

}

}

출력결과

특정 서버에서 클라이언트쪽으로 보내주는 html웹문서의 내용이 출력,저장됨

Posted by 미랭군
자바·JSP2012. 9. 25. 20:52

Java Application은 각각 별도의 jvm process로 동작하므로 상호 통신 및 정보를 주고받기에 여러가지 에로사항이 있다. 그로 인해 현재 동일한 프로그램이 실행되고 있는지를 체크하는 방법이 여러가지가 편법(?)으로 사용되고 있는데, 그 중 몇 가지를 나열해 보자면

1. Database Flag 값 변경.
2. 환경설정 파일 변경 혹은 파일 생성 후 락.
3. 임의의 사용하지 않는 port 할당.

 우선 2번은

      // lock 을 시도합니다.
      lock = channel.tryLock();

      // lock이 null이라는 것은 다른 JVM에서 이미 파일의 lock을 획득했다는 것입니다. 따라서 채널을 종료하고
      // 예외를 발생시켜 runnable의 값을 false로 유지시킵니다.
      if (lock == null) {
        channel.close();
        throw new Exception();
      }

이런 식으로 사용이 가능하다.

 

또 3번은

        try {
            isRun = new DatagramSocket(1103);
        } catch (SocketException e) {
            throw new MonitoringException();
        }

이런 식으로 사용이 가능하겠다.

Posted by 미랭군