서블릿 개발하기 연재목록

#1 개발환경 구축 (https://opensrc.tistory.com/180?category=475522)

#2 프로잭트 생성 (https://opensrc.tistory.com/181?category=475522)

#3 첫번째 JSP 파일 만들기 (https://opensrc.tistory.com/182?category=475522)

#4 첫번째 서블릿 만들기 (https://opensrc.tistory.com/183?category=475522)

#5 포스트 요청을 처리하는 서블릿 만들기 (https://opensrc.tistory.com/203?category=475522)

#6 GET/POST 요청과 함께 파라메터 전달 하기 (https://opensrc.tistory.com/204?category=475522)

#7 Servlet 들여다 보기 (https://opensrc.tistory.com/206?category=475522)

===========================================================



0. 기본 작업 환경

Windows 10 Pro 64bit

JDK 1.8 64Bit

Eclipse Java EE IDE for Web Developers. v4.X 64bit (Oxygen)

Apache Tomcat 8.0

Servlet 3.1

기준으로 작업 합니다.

버전이 약간씩 다르더라고 본인의 환경에 맟춰서 선택하면 큰 문제는 없습니다.


1. JDK 다운로드

http://www.oracle.com/technetwork/java/javase/downloads/index.html

현재 Java 9 (JDK 1.8) 가 나온 시점이지만 우리는 JDK 1.8 기준으로 작업 하기로 합니다.

전통적으로 상용 서비스에서는 최신버전 보다는 많은 래퍼런스가 있고 안정화된 버전을 선호하는 편입니다.

개인적인 생각으로는 혼자 스터디하는 것은 스스로 최신 스팩을 접하면서 남들보다 한발 앞서가는 것도 좋은 자세라고 생각합니다.


2. 이클립스 다운로드

https://www.eclipse.org/downloads/eclipse-packages/

본인의 환경에 맞는 것을 선택해서 원하는 위치에 다운로드하고 압축을 해제 합니다.


본 예제에서는 Eclipse Java EE IDE for Web Developers. ver 4.7.1a 64bit (Oxygen)을 이용 합니다.

2019년 4월 현재 Oxygen 버전을 다운 받을 수 있는 링크는

https://www.eclipse.org/downloads/packages/release/oxygen/r

입니다.

이클립스는 자주 신버전이 나오기 때문에 꼭 Oxygen 이 아니더라도 다른 버전을 사용해도 큰 문제는 없지만

패키징은 꼭 Eclipse IDE for Java EE Developers 를 선택 하셔야 합니다.

패키지 설명을 보면 

"Tools for Java developers creating Java EE and Web applications, including a Java IDE, tools for Java EE, JPA, JSF, Mylyn, EGit and others."

이렇게 되어 있습니다. Web applications 라는 설명이 들어가 있는 패키지를 다운 받아야 합니다.

그냥 Eclipse IDE for Java Developer를 선택하시면 Java Applicaiton을 개발 할 수 있는 기본 환경만 들어있어서 WTP(Web Tools Platform) 같은 Web 개발 도구를 추가 설치 해야 합니다.


이클립스를 처음 실행하고 원하는 위치의 작업공간(workspace)을 설정 하시기 바랍니다.

저의 경우 C:\work 아래에 년월_프로잭트명 으로 디렉토리를 만들고 그 아래에 모든 프로잭트에 관련된 디렉토리를 배치합니다.

프로잭트가 끝나고 더이상 소스를 열어볼 필요가 없어지면 통째로 압축하여 백업하였다가 필요 할 때 C:\work 폴더에 압축을 해제 하면 다시 프로잭트의 내용을 살펴 볼 수 있습니다.


3. 서버 다운로드

Servlet을 실행하기 위해서는 JSP, Servlet 스펙을 만족하는 어플리케이션 서버를 설치 해야 합니다. 프로잭트를 생성하면서 설치하는 것도 가능하지만 미리 원하는 서버를 설치하도록 하겠습니다.

Eclipse 메뉴 Window > Preferences 선택

왼쪽 트리에서 Server > Runtime Environments 선택

오른쪽의 [Add...] 버튼을 클릭합니다.


이 예제예서는 Apache Tomcat v8.0을 이용 할 것 입니다.

Apache Tomcat v8.0을 선택 후 

[Next] 클릭


서버를 다운로드 받을 위치를 지정합니다.

[Browse...] 클릭


원하는 위치에 다운로드 받을 디렉토리를 생성합니다.


디렉토리를 선택하면 상단에 붉은색 X마크와 함께 'Unknown version of Tomcat was specified.' 라고 표시됩니다.

[Download and Install...] 버튼을 클릭


라이센스 동의

'I accept the terms of the license agreement' 선택 후 [Finish] 클릭


이클립스 하단 상태바에 Installing server runtime envrionment 라고 표시되고 다운로드 상태가 표시 됩니다.


이클립스 하단 우측에 상태바를 보면 다운로드 중인 것을 알 수 있습니다.


다운로드가 완료 되면 붉은색 X마크가 사라지고 'Specify the Installation directory' 로 변경됩니다.

[Finish] 클릭


톰켓 서버가 추가된 상태


4. 한글 설정 확인

우리가 개발할 소스의 모든 한글 인코딩은 UTF-8 로 통일할 것입니다. 요즘 거의 모든 프로젝트의 인코딩은 UTF-8로 통일된 것 같은데 아직도 윈도우즈용 이클립스를 처음 설치하면 아직도 EUC-KR 방식으로 기본 세팅이 되는 것 같습니다.

이클립스 메뉴 Window > Preferences > General > Workspace > Text file encoding : UTF-8 선택 후 [Apply]

이클립스 메뉴 Window > Preferences > General > Content Types > Text > Default encoding : UTF-8 입력 후 [UPDATE] 클릭

이클립스 메뉴 Window > Preferences > General > Content Types > Text > JSP > Default eocoding : UTF-8 입력 후 [UPDATE] 클릭

이클립스 메뉴 Window > Preferences > General > Content Types > Text > Java Source File > Default eocoding : UTF-8 입력 후 [UPDATE] 클릭

이클립스 메뉴 Window > Preferences > General > Content Types > Text > Java Properties File > Default eocoding : UTF-8 입력 후 [UPDATE] 클릭

Eclipse 메뉴 Wondow > Preferences > Web > CSS Files > Encoding ▶ ISO 10646/Unicode(UTF-8) 선택후 [Apply]

Eclipse 메뉴 Wondow > Preferences > Web > HTML Files > Encoding ▶ ISO 10646/Unicode(UTF-8) 선택후 [Apply]

Eclipse 메뉴 Wondow > Preferences > Web > JSP Files > Encoding ▶ ISO 10646/Unicode(UTF-8) 선택후 [Apply]


이외에 서버의 URLEncoding 등은 프로잭트 생성 후 확인하도록 하겠습니다.


이제 기본적으로 서블릿을 개발하기 위한 준비가 되었습니다.

다음 편에서는 프로잭트를 생성해보도록 하겠습니다.

/**

* 한글 조사(助詞) 연결 (을/를,이/가,은/는,로/으로)

  * 한글에 단어를 연결하는 조사(助詞) 는 앞에 오는 체언(體言)에 따라 변화되는 경우에 사용

  * 규칙

* 1. 체언의 종성에 받침이 있는 경우 '을/이/은/으로/과'

* 2. 체언의 종성에 받침이 없는 경우 '를/가/는/로/와'

* 3. ‘로/으로'의 경우 체언 종성의 받침이 ‘ㄹ' 인경우 '로’ 아니면 '으로’

* @param name

* @param firstValue

* @param secondValue

* @return

*/

public static String getPostWord(String name, String firstValue, String secondValue) {

/*

* 사용법

String name;

 

name = "네이버";

System.out.println(CommonUtils.getPostWord(name,"으로","로"));

System.out.println(CommonUtils.getPostWord(name,"을","를"));

System.out.println(CommonUtils.getPostWord(name,"이","가"));

System.out.println(CommonUtils.getPostWord(name,"은","는"));

System.out.println(CommonUtils.getPostWord(name,"과","와"));

 

name = "카카오톡";

System.out.println(CommonUtils.getPostWord(name,"으로","로"));

System.out.println(CommonUtils.getPostWord(name,"을","를"));

System.out.println(CommonUtils.getPostWord(name,"이","가"));

System.out.println(CommonUtils.getPostWord(name,"은","는"));

System.out.println(CommonUtils.getPostWord(name,"과","와"));

 

name = "구글";

System.out.println(CommonUtils.getPostWord(name,"으로","로"));

System.out.println(CommonUtils.getPostWord(name,"을","를"));

System.out.println(CommonUtils.getPostWord(name,"이","가"));

System.out.println(CommonUtils.getPostWord(name,"은","는"));

System.out.println(CommonUtils.getPostWord(name,"과","와"));

 

name = "문화포털";

System.out.println(CommonUtils.getPostWord(name,"으로","로"));

System.out.println(CommonUtils.getPostWord(name,"을","를"));

System.out.println(CommonUtils.getPostWord(name,"이","가"));

System.out.println(CommonUtils.getPostWord(name,"은","는"));

System.out.println(CommonUtils.getPostWord(name,"과","와"));

*/

 

try {

char lastName = name.charAt(name.length() - 1);

// 한글의 제일 처음과 끝의 범위밖일 경우는 오류

if (lastName < 0xAC00 || lastName > 0xD7A3) {

   return name;

}

 

int lastCharIndex = (lastName - 0xAC00) % 28;

 

// 종성인덱스가 0이상일 경우는 받침이 있는경우이며 그렇지 않은경우는 받침이 없는 경우

if(lastCharIndex > 0) {

// 받침이 있는경우

// 조사가 '로'인경우 'ㄹ'받침으로 끝나는 경우는 '로' 나머지 경우는 '으로'

if(firstValue.equals("으로") && lastCharIndex == 8) {

name += secondValue;

} else {

name += firstValue;

}

} else {

// 받침이 없는 경우

name += secondValue;

}

} catch (Exception e) {

//e.printStackTrace();

}

 

return name;

}

 

 

https://jeonghakhur.gitbooks.io/how-to-debug-frontend/content/chapter3.html

■ Java 1.8 관련 설정 확인

프로잭트 Properties > Java Build Path > Libraries ▶ jre1.8

프로잭트 Properties > Java Compiler > Compiler compliance level ▶ 1.8

프로잭트 Properties > Project Facets > Java ▶ 1.8


■ UTF-8 관련 설정 확인

프로잭트 Properties > Resource > Test file encoding ▶ UTF-8

Window 메뉴 > Preferences > General > Content Types > Text > Default cncoding ▶ UTF-8

Wondow 메뉴 > Preferences > General > Content Types > Text > JSP > Default encoding ▶ UTF-8

Wondow 메뉴 > Preferences > Web > CSS Files > Encoding ▶ ISO 10646/Unicode(UTF-8)

Wondow 메뉴 > Preferences > Web > HTML Files > Encoding ▶ ISO 10646/Unicode(UTF-8)

Wondow 메뉴 > Preferences > Web > JSP Files > Encoding ▶ ISO 10646/Unicode(UTF-8)

Tomcat Server (더블클릭) > Overview > Open launch configuration > Common > Ecoding ▶ UTF-8

server.xml (URIEncoding="UTF-8" 추가 두곳)

    <Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>



http://blog.naver.com/ckwndgur/220481558345


http://www.androidpub.com/1602294

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Network_Programing/AdvancedComm/SocketOption


https://access.redhat.com/documentation/ko-KR/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/s-network-dont-adjust-defaults.html


http://docs.oracle.com/javase/7/docs/api/java/net/StandardSocketOptions.html


http://www.programkr.com/qa/MkDO5ADMwYTz.html


http://wizardee.tistory.com/160


http://www.programkr.com/qa/MkDO5ADMwYTz.html

java bad version number in .class file

유닉스/리눅스 OS에서

javap -verbose [클래스파일]

클래스파일명은 확장자를 제외한 파일명
javap는 jdk의 bin폴더에 위치함. 해당 path가 잡혀있지않다면 jdk경로/javap 로 입력

해당 명령어를 입력하면 많은 정보가 출력된다. 이것중 version 정보만 출력

ex) javap -verbose servletToJsp | grep version
result)
minor version : 0
major version : 49


Windows계열 OS에서

cmd.exe 실행

유닉스/리눅스때와 마찬가지로
javap -verbose [클래스파일]

이중 version에 대한 정보만을 패턴 필터링으로 출력할때
ex) javap -verbose servletToJsp | find /N "version"
result)
[6] minor version : 0
[7] major version : 50

* major version 참조
JDK 1.6 = 50
JDK 1.5 = 49
JDK 1.4 = 48
JDK 1.3 = 47
JDK 1.2 = 46

'Java' 카테고리의 다른 글

[안드로이드] 구글맵  (0) 2015.09.16
netty bootstrap.option 관련 문서  (0) 2015.09.04
JSP, Spring, GMail 메일발송 간단 예제  (0) 2012.02.17
[jad] 사용 패키지 역컴파일  (0) 2011.11.07
window java background start.bat, stop.bat  (0) 2011.09.30

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="org.springframework.mail.javamail.JavaMailSender" %>
<%@ page import="org.springframework.mail.javamail.JavaMailSenderImpl" %>
<%@ page import="org.springframework.mail.javamail.MimeMessageHelper" %>
<%@ page import="javax.mail.MessagingException" %>
<%@ page import="javax.mail.internet.MimeMessage" %>
<%@ page import="java.util.Properties" %>
<%@ page import="java.io.File" %>
<%@ page import="javax.activation.DataSource" %>
<%@ page import="javax.activation.FileDataSource" %>
<%
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
MimeMessage message = mailSender.createMimeMessage();

// Properties 설정
Properties props = new Properties();
props.put("mail.smtp.starttls.enable","true");//설정하지 않으면 에러 발생 (아래 참조)

props.put("mail.smtp.auth","true");
props.put("mail.smtp.quitwait","false");
props.put("mail.debug","true"); // 디버그 모드 : 개발이 완료되면 false

mailSender.setJavaMailProperties(props);

mailSender.setProtocol("smtp");
mailSender.setHost("smtp.gmail.com");
mailSender.setPort(587);
mailSender.setUsername("your_gmail_id@gmail.com");
mailSender.setPassword("your_gmail_password");
mailSender.setDefaultEncoding("utf-8");

// 첨부파일
File attachFile = new File("C:"+File.separator+"첨부파일.jpg"); // 첨부파일 경로(C:\첨부파일.jpg)

try {
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");

if(attachFile != null && attachFile.exists()) {
// 첨부파일 있는 경우
messageHelper.setSubject("테스트 메일 제목[첨부파일]");
messageHelper.setTo(aaaa@hanmail.net); //받는사람
messageHelper.setCc("bbbb@paran.com"); // 참조
messageHelper.setBcc(cccc@nate.com); //숨은참조
messageHelper.setFrom(dddd@gmail.com); // 보내는사람
messageHelper.setText("테스트 메일 [첨부피일]", true);
DataSource dataSource = new FileDataSource(attachFile);
messageHelper.addAttachment(attachFile.getName(), dataSource);
} else {
// 첨부파일 없는경우
messageHelper.setSubject("테스트 메일 제목");
messageHelper.setTo(aaaa@hanmail.net); //받는사람
messageHelper.setCc("bbbb@paran.com"); // 참조
messageHelper.setBcc(cccc@nate.com); //숨은참조
messageHelper.setFrom(dddd@gmail.com); // 보내는사람
messageHelper.setText("테스트 메일 내용", true);
}

mailSender.send(message);

} catch (MessagingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}

%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
메일 발송 완료
</body>
</html>

스프링 프레임워크에서 GMail smtp 서비스를 이용하여

JSP 간단하게 만들어본 메일 발송 예제

props.put("mail.smtp.starttls.enable","true");를 설정하지 않으면

com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first

Exception 발생하므로 반드시 기재

Propertis 를 스프링 설정파일에서 읽어오도록 수정해 보자.

검색해 보면 널렸다.

jad -o -r -sjava -dsrc com/**/*.class

# start.bat #####################################################

set CLASSPATH=D:\batch\classes;D:\batch\lib\lib.jar
start javaw -Dresource.path=D:\system.batch.server.RecevieDeomne

# stop.bat #####################################################

taskkill /f /im javaw.exe

+ Recent posts