'분류 전체보기'에 해당되는 글 223건
- 2011.08.23 jQuery 와 Servlet을 이용한 간단한 Captcha 샘플~ 5
- 2011.08.23 Oracle 두 Date Type 컬럼 시간차 구하기 2
- 2011.08.23 Apache HttpComponents를 이용한 GET, POST 요청하기 7
- 2011.08.22 Oracle JDBC Driver maven 디펜던시에 추가하기 3
- 2011.08.22 Eclipse Maven Jetty Plugin 으로 개발하면서 java.lang.OutOfMemoryError: PermGen space 익셉션이 발생할때.
jQuery 와 Servlet을 이용한 간단한 Captcha 샘플~
잡다구리 샘플 2011. 8. 23. 15:32
Captcha 란 간단히 아래쪽 그림과 같은 기능을 하는것을 말한다.
제작해본 샘플은
서버측에서 이미지를 생성해 주고, 생성된 문자열을 세션에 저장시켜주는 기능을 수행하는 Servlet 하나와
고 서블릿을 사용하는 클라이언트 쪽 html 파일로 구성된다.
사용한 라이브러리는 랜덤 스트링 생성을 편하게 하기 위해 apache commons lang 의 RandomStringUtils 를 사용했다.
CaptchaGenServlet.java
이미지 생성시 문자열에 쓸 폰트를 클래스패스에 위치시킨 다음에 30번째 라인처럼 불러와서 폰트를 등록시킬 수 있다.
폰트 등록후 57번째 라인처럼 등록된 폰트를 불러와 쓸 수 있는데 시스템에 등록된 폰트들 이름을 확인하기 위해서는 다음과 같은 코드로 확인하면 된다.
web.xml 서블릿 설정
Captcha UI
쪽바로 입력했는지 체크하기(result.jsp)
제작해본 샘플은
서버측에서 이미지를 생성해 주고, 생성된 문자열을 세션에 저장시켜주는 기능을 수행하는 Servlet 하나와
고 서블릿을 사용하는 클라이언트 쪽 html 파일로 구성된다.
사용한 라이브러리는 랜덤 스트링 생성을 편하게 하기 위해 apache commons lang 의 RandomStringUtils 를 사용했다.
CaptchaGenServlet.java
package servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.GraphicsEnvironment; import java.awt.RenderingHints; import java.awt.font.FontRenderContext; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.RandomStringUtils; public class CaptchaGenServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void init() throws ServletException { super.init(); // 폰트 등록 try { Font font = Font.createFont(Font.TRUETYPE_FONT, this.getClass().getResourceAsStream("/servlet/HelveticaMedCd.ttf")); GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(font); } catch (Exception e) { e.printStackTrace(); } } public CaptchaGenServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { generateCaptcha(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { generateCaptcha(request, response); } private void generateCaptcha(HttpServletRequest request, HttpServletResponse response){ try { // 알파벳 숫자섞인 5자리 문자열 생성 String randomString = RandomStringUtils.randomAlphanumeric(5).toUpperCase(); // 세션에 저장 request.getSession().setAttribute("CAPTCHA", randomString); Font font = new Font("Helvetica 67 Medium Condensed", Font.PLAIN, 50); FontRenderContext frc = new FontRenderContext(null, true, true); Rectangle2D bounds = font.getStringBounds(randomString, frc); int w = (int) bounds.getWidth(); int h = (int) bounds.getHeight(); // 이미지 생성 BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.setColor(Color.WHITE); g.fillRect(0, 0, w, h); g.setColor(new Color(113, 193, 217)); g.setFont(font); g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); g.drawString(randomString, (float) bounds.getX(), (float) -bounds.getY()); g.dispose(); ImageIO.write(image, "png", response.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } } }
이미지 생성시 문자열에 쓸 폰트를 클래스패스에 위치시킨 다음에 30번째 라인처럼 불러와서 폰트를 등록시킬 수 있다.
폰트 등록후 57번째 라인처럼 등록된 폰트를 불러와 쓸 수 있는데 시스템에 등록된 폰트들 이름을 확인하기 위해서는 다음과 같은 코드로 확인하면 된다.
Font[] fontList = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts(); for( Font f : fontList){ System.out.println(f.getName()); }
web.xml 서블릿 설정
<servlet> <display-name>CaptchaGenServlet</display-name> <servlet-name>CaptchaGenServlet</servlet-name> <servlet-class>servlet.CaptchaGenServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CaptchaGenServlet</servlet-name> <url-pattern>/captcha</url-pattern> </servlet-mapping>
Captcha UI
<html> <head> <title>Captcha Test</title> <script type="text/javascript" src="/jquery-1.6.1.min.js"></script> <script> $(document).ready(function(){ create(); $("#refreshBtn").click(function(e){ e.preventDefault(); create(); }); $("#confirmBtn").click(function(e){ e.preventDefault(); $("#frm").submit(); }); function create(){ $("#captcha img").attr("src", "/captcha?"+Math.random()); } }); </script> <style> #captcha { width : 230px; height : 70px; border: 3px dotted #A3C552; text-align: center; padding: 5px; } </style> </head> <body> Catpcha Test!!! <form id="frm" action="result.jsp" method="post"> <div id="captcha"><img/></div> <br/> <input type="text" name="captchaInput"/> <button id="confirmBtn">확인</button> <button id="refreshBtn">리푸레쉬</button> </form> </body> </html>
쪽바로 입력했는지 체크하기(result.jsp)
SESSION : ${sessionScope['CAPTCHA']} PARAM : ${param.captchaInput} 통과 : ${ sessionScope['CAPTCHA'] eq param.captchaInput ? 'O' : 'X'}
'잡다구리 샘플' 카테고리의 다른 글
Oracle 두 Date Type 컬럼 시간차 구하기
쓸만한지식 2011. 8. 23. 13:46
여기서 start_date, end_date 컬럼의 데이터 타입은 DATE 임~
-- 두 날짜 사이가 몇 초 차이나는가? SELECT ROUND((end_date-start_date)*24*60*60) FROM tb_name; -- 두 날짜 사이의 몇 분 차이나는가? SELECT ROUND((end_date-start_date)*24*60) FROM tb_name; -- 두 날짜 사이의 몇 시간 차이나는가? SELECT ROUND((end_date-start_date)*24) FROM tb_name;
'쓸만한지식' 카테고리의 다른 글
Init: SSLPassPhraseDialog builtin is not supported on Win32 에러가 날때 (1) | 2011.08.29 |
---|---|
구글 크롬 다운로드 직링크 (0) | 2011.08.24 |
Eclipse 에서 Trac 연동해서 쓸때 Task 가 자꾸 웹브라우져로 열릴때 (0) | 2011.08.24 |
구글 크롬 User-agent String 변경하기 (1) | 2011.08.18 |
모바일 브라우져 User-agnet String (0) | 2011.08.17 |
Apache HttpComponents를 이용한 GET, POST 요청하기
Java 2011. 8. 23. 00:47
예전에는 Jakarta Commons HttpClient 프로젝트로 commons 프로젝트들이랑 옹기종기 같이 모여 있었는데 문득 사이트에 가보니
프로젝트명이 Apache HttpComponents 로 바껴있고 라이브러리 사용하는 것도 훅 달라진것 같았다.
테스트겸 겸사겸사 GET, POST 요청을 하는 클래스를 맹글어 보았다.
소스코드
라이브러리 다운로드는 http://hc.apache.org/downloads.cgi 요기에 가서 다운로드 받던지
Maven을 사용하고 있다면 디펜던시에
그리고~ http://hc.apache.org/downloads.cgi 요기에서 다운받아 보면 압축파일안에 examples, tutorial, api 문서도 같이 들어 있어서 참고하기 좋다~
※ 위 예제를 실행하기 위해서 꼭 필요한 jar 파일은 httpclient-4.1.2.jar, httpcore-4.1.2.jar, commons-codec-1.4.jar, commons-logging-1.1.1.jar
요것들 4개고 모두 lib 디렉토리 안에 들어 있음.
프로젝트명이 Apache HttpComponents 로 바껴있고 라이브러리 사용하는 것도 훅 달라진것 같았다.
테스트겸 겸사겸사 GET, POST 요청을 하는 클래스를 맹글어 보았다.
소스코드
package proxy; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.ResponseHandler; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.impl.client.BasicResponseHandler; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; public class HttpProxy { /** * POST 요청 * @param url 요청할 url * @param params 파라메터 * @param encoding 파라메터 Encoding * @return 서버 응답결과 문자열 */ public String post(String url, Map params, String encoding){ HttpClient client = new DefaultHttpClient(); try{ HttpPost post = new HttpPost(url); System.out.println("POST : " + post.getURI()); List<NameValuePair> paramList = convertParam(params); post.setEntity(new UrlEncodedFormEntity(paramList, encoding)); ResponseHandler<String> rh = new BasicResponseHandler(); return client.execute(post, rh); }catch(Exception e){ e.printStackTrace(); }finally{ client.getConnectionManager().shutdown(); } return "error"; } public String post(String url, Map params){ return post(url, params, "UTF-8"); } /** * GET 요청 * POST 와 동일 */ public String get(String url, Map params, String encoding){ HttpClient client = new DefaultHttpClient(); try{ List<NameValuePair> paramList = convertParam(params); HttpGet get = new HttpGet(url+"?"+URLEncodedUtils.format(paramList, encoding)); System.out.println("GET : " + get.getURI()); ResponseHandler<String> rh = new BasicResponseHandler(); return client.execute(get, rh); }catch(Exception e){ e.printStackTrace(); }finally{ client.getConnectionManager().shutdown(); } return "error"; } public String get(String url, Map params){ return get(url, params, "UTF-8"); } private List<NameValuePair> convertParam(Map params){ List<NameValuePair> paramList = new ArrayList<NameValuePair>(); Iterator<String> keys = params.keySet().iterator(); while(keys.hasNext()){ String key = keys.next(); paramList.add(new BasicNameValuePair(key, params.get(key).toString())); } return paramList; } // Test public static void main(String[] args) { HttpProxy p = new HttpProxy(); Map params = new HashMap(); params.put("w", "tot"); params.put("q", "한예슬"); System.out.println(p.get("http://m.search.daum.net/search", params)); } }
라이브러리 다운로드는 http://hc.apache.org/downloads.cgi 요기에 가서 다운로드 받던지
Maven을 사용하고 있다면 디펜던시에
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.1.2</version> </dependency>요걸 추가해 주면 된다.
그리고~ http://hc.apache.org/downloads.cgi 요기에서 다운받아 보면 압축파일안에 examples, tutorial, api 문서도 같이 들어 있어서 참고하기 좋다~
※ 위 예제를 실행하기 위해서 꼭 필요한 jar 파일은 httpclient-4.1.2.jar, httpcore-4.1.2.jar, commons-codec-1.4.jar, commons-logging-1.1.1.jar
요것들 4개고 모두 lib 디렉토리 안에 들어 있음.
'Java' 카테고리의 다른 글
Oracle JDBC Driver maven 디펜던시에 추가하기
maven 2011. 8. 22. 17:23
Oracle JDBC 드라이버는 메이븐 센트럴 레파지토리에 없다. 그래서 따로 레파지토리를 추가해 줘야 하는데
검색을 해보니 예전에는 오라클에서 제공하는 메이븐 레파지토리(http://download.oracle.com/maven)가 있었는데
요즘 오라클 사이트가 전체적으로 삐꾸가 되서 이제 잘 되지 않는것 같다.
다음은 JDBC 드라이버가 오라클 사이트에 올라오는 최신 버전은 아니지만 그래도 거의 준 최신 버전을 받을수 있는 레파지토리이다.
http://maven.jahia.org/maven2
pom.xml 파일 repositories 에 요걸 추가하고
dependencies 에 요걸 추가해 주면 된다.
나는 꼭 최신버전 드라이버를 maven으로 가져와서 써야 겠다는 사람들은 자기 로컬 레파지토리를 만들면 된다 -_-;
검색을 해보니 예전에는 오라클에서 제공하는 메이븐 레파지토리(http://download.oracle.com/maven)가 있었는데
요즘 오라클 사이트가 전체적으로 삐꾸가 되서 이제 잘 되지 않는것 같다.
다음은 JDBC 드라이버가 오라클 사이트에 올라오는 최신 버전은 아니지만 그래도 거의 준 최신 버전을 받을수 있는 레파지토리이다.
http://maven.jahia.org/maven2
pom.xml 파일 repositories 에 요걸 추가하고
<repository> <id>oracle</id> <name>ORACLE JDBC Repository</name> <url>http://maven.jahia.org/maven2</url> </repository>
dependencies 에 요걸 추가해 주면 된다.
<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.1.0.7.0</version> </dependency>ojdbc5 가 필요한 사람은 ojdbc6 대신에 ojdbc5 로 바꿔서 적어주면 됨.
나는 꼭 최신버전 드라이버를 maven으로 가져와서 써야 겠다는 사람들은 자기 로컬 레파지토리를 만들면 된다 -_-;
'maven' 카테고리의 다른 글
Sonatype Nexus #1 : 톰캣에 설치하기 (0) | 2011.10.23 |
---|---|
이클립스 상에서 maven 을 이용해 원격서버로 배포하기 (3) | 2011.10.14 |
maven package goal 로 war나 jar 파일 생성시 생성되는 파일명 설정하기 (0) | 2011.10.13 |
Maven, SVN 을 이용한 개발서버(Tomcat) 자동배포 하기 (0) | 2011.08.24 |
Maven Jetty Plugin 으로 개발하면서 css, js, html 같은 정적 파일이 저장안될때 (0) | 2011.08.24 |
Eclipse Maven Jetty Plugin 으로 개발하면서 java.lang.OutOfMemoryError: PermGen space 익셉션이 발생할때.
이클립 2011. 8. 22. 16:38
Run > Run Configurations 로 가서 실행할때 썼던 런설정을 왼쪽트리에서 선택하고, 아래 그림처럼 JRE VM arguments에 셋팅해주면됨
추가해줄 항목
추가해줄 항목
-XX:MaxPermSize=256m
-Xms40m
-Xmx512m
※ Jetty 뿐만 아니라 다른데서도 permgen space 에러가 나면 죠 위에 옵션을 jvm 구동시 옵션으로 주면 된다.
※ Jetty 뿐만 아니라 다른데서도 permgen space 에러가 나면 죠 위에 옵션을 jvm 구동시 옵션으로 주면 된다.
'이클립' 카테고리의 다른 글
STS(SpringSource Tool Suite) 활용하기 : RequestMapping 정보 보기 (2) | 2011.09.21 |
---|---|
이클립스 html, js 등등의 파일에서 에러표시 지우기 (1) | 2011.09.01 |
SpringSource Tool Suite(STS) 설치후 이클립 스타트될때 뜨는 Dashboard 안뜨게 하기 (1) | 2011.08.17 |
Maven & Jetty Plugin - PWC6345: There is an error in invoking javac. A full JDK (not just JRE) is required 에러가 날때. (4) | 2011.08.16 |
Eclipse Indigo Maven Plugin 설치 & 웹프로젝트 생성 (3) | 2011.08.12 |