첫번째 스트럿츠 


안녕하세요.
고코더 입니다.


지난 시간에 이클립스에 jar를 복사하면서 스트럿츠 프로젝트르 변신 시켰습니다.
이번엔 스트럿츠가 제공하는 프레임워크 기능으로 Hello를 표현 해보겠습니다. 
최대한 쉽고 알기 쉽게 설명해보려고 합니다.


 1. 만들어진 프로젝트에서 src 폴더 위에서 class를 생성하겠습니다. 파일 이름은 HelloAction 이고 패키지명은 단순하게 hello으로 해보겠습니다.
스트럿츠에서는 보통 컨트롤러와 같은 역할을 하는 action을 주는 클래스가 있는 파일은 Action을 넣어줍니다. 

 2. 패키지명과 파일 이름을 입력 하고 finish를 누릅니다. 


 3. 만들어진 파일에 내용은 아래처럼 채웁니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package hello;
import com.opensymphony.xwork2.Action;
public class HelloAction implements Action{
       
       private String msg;
       
       public String getMsg(){
              return msg;
       }
       
       @Override
       public String execute() throws Exception {
              // TODO Auto-generated method stub
              
              this.msg="Hello Struct2 GoCoder.Net ";
              return SUCCESS;
       }
}  
cs

2번 라인 : 스트럿츠 action 기능을 사용하기 위해 선언합니다. 필수적인 기능입니다.
3번 라인 : Action을 구현하기 위해 상속합니다.
7번 라인 : get을 붙인 함수는 자동적으로 view에 변수를 제공합니다. 그러므로 msg는 jsp에서 el 태그로 사용할 수 있습니다.
12번 라인 : Action 인터페이스의 execute( ) 메소드를 오버라이드 합니다. 
16번 라인 : SUCCESS는  Action 인터페이스의 리턴 값이 있음을 지정한다.



struts.xml 생성

 4. src 폴더 아래 struts.xml을 생성 합니다. 이 파일은 스트럿츠에서 환경파일을 설정하는 가장 중요한 파일입니다. 
자세한 내용은 다시 설명하게 될 것이니 한번 아래 코드를 우선 따라 하면서 배워보시면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration  2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
     <package name="HelloStruts2" extends="struts-default">
           <action name="hello" class="hello.HelloAction">
                <result name="success"  >/WEB-INF/hello.jsp</result>
           </action>
     </package>
</struts>
cs

7번 라인 : 해당 패키지 name을 지정 합니다. 
8번 라인 : name은 브라우저가 요청한 주소를 맵핑 합니다. URI가 되므로 중요한 부분입니다. class는 위에서 만든 java 클래스 안에 수행할 객체를 지정합니다. 
9번 라인 : 맵핑 될 view 소스 주소를 기록 합니다. 


web.xml 수정


 5. 스트럿츠를 사용하기 위해서는 해당 파일에 꼭 필요한 옵션을 줘야 합니다.
아래 코드를 붙혀넣어주세요.

1
2
3
4
5
6
7
8
9
  <filter>
     <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  </filter>
  
  <filter-mapping>
     <filter-name>struts2</filter-name>
     <url-pattern>/*</url-pattern>
  </filter-mapping>
cs
 

hello.jsp 생성

 6. 이젠 뷰를 생성해야 합니다. struts.xml에서 지정한 위치에 파일을 생성해야 합니다.

1
2
3
4
5
6
7
8
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<body>
     ${msg}
</body>
</html>
cs

6번 라인 : HelloAction에서 작성한대로 msg 변수를 el태그로 호출 합니다.


결과 화면 


 7. 해당 URL로 접근하면 아래처럼 헬로우가 나타납니다. 


 8. 헬로우 까지의 소스 상황입니다. 3개의 파일을 만들었고 1개의 파일을 수정했습니다. 



마무리


이해만 하면 쉽습니다.

댓글을 달아 주세요


인프런 무료 강의 모음


안녕하세요. 고코더 입니다.


okky.kr에서 인프런을 운영하는
분께서 직접 정리해서 올려주신

인프런 무료 강의 내역 입니다. 
우선 무료만 보고 있는데
정리해주시니 좋네요

인프런은 무료강의 퀄리티도 
참 좋습니다.

시간 나실때마다 한번씩 정독 하는 걸 추천 드립니다.



신입 프로그래머를 위한 자바 스프링 (Spring) 프레임워크 강좌
초보부터 개발자 취업까지!! 실전 자바 강좌
신입 프로그래머를 위한 실전 JSP 강좌
React & Express 를 이용한 웹 어플리케이션 개발하기
Django 초보 가이드 - 실습을 통해 알아보는 장고 입문
파이썬을 이용한 웹 크롤링(Web Crawling) 어플리케이션 만들기
자바스크립트 언어 기본 – javascript
[nodejs 강좌] Node.js 를 이용해 웹애플리케이션 만들기
왕초보를 위한 스위프트 프로그래밍 강좌 (iOS app with xcode&swift)
기본을 확실히!! HTML 의 모든것
‘이것이 리눅스다’ 저자의 Red Hat CentOS7 리눅스 서버&네트워크 강좌
안드로이드 기초부터 창업까지 - 실무 강좌
자바 디자인 패턴의 이해 - Gof Design Pattern
AngularJS 기본 개념과 To-Do 앱 만들기 실습 – 앵귤러 강좌
AJAX, JSON 강좌
실전 HTML & CSS 강좌
[C# 초보 강좌] 예제로 배우는 C#
초절정 파이썬 강좌 (python)
C 와 C++ 을 동시에 배워보자 - 두들낙서의 C/C++
독하게 시작하는 C 프로그래밍
Node.Js 활용하기
Node.js 로 Database 다루기 소개와 웹애플리케이션 만들기
창원대학교 박동규 교수의 Swift 언어 기초 강좌
CSS 기본부터 활용까지
웹브라우저 Javascript (자바스크립트)
MIT 공개강좌 – 컴퓨터 과학 & 프로그래밍 입문 (python)
생활코딩 - PHP 기본 A 부터 Z 까지
C로 배우는 자료구조 및 여러가지 예제 실습



마무리


강의 좋네요.


댓글을 달아 주세요



MSSQL 0을 Null로 반환하여 isnull로 처리하기


MSSQL 에서 0으로 나눌시에는 오류가 발생한다. 0으로 숫자를 나눈건 로직이 잘못됐거나 모델링 잘못된 것이다.
하지만 .. 사람 맘 같이 세상이 움직이겠는가..
결국은 숫자가 꼬이고 꼬이면 0으로 나누고 결국 오류가 발생할것이다.
오늘은 그래서 MSSQL에서 0으로 나누기 오류를 대비하는 법을 배워보겠다.

우선 아래처럼 쿼리를 MSSQL매니저먼트에서 실행해보자
 SELECT 1000 / 0   



▼ 당연히 오류가 발생하였다. 수학에선 0으로 숫자를 나눌수 없다. 



이번엔 이 쿼리를 실행해보자
SET ANSI_WARNINGS OFF
SET ARITHIGNORE ON
SET ARITHABORT OFF
select 100 / 0

▼ 아래처럼 NULL 이 반환 됐다. (오류만 발생안했을 뿐이지 결국 오류이지만)



해당 옵션과 함께 isnull을 사용하면
SET ANSI_WARNINGS OFF
SET ARITHIGNORE ON
SET ARITHABORT OFF
select ISNULL(100 / 0,0)

▼ 가장 올바른 값이 표출 되었다. 
오류를 피해갈 수 있었다가 맞겠네요






+고코더의 추천강의


프로시저에서 오류를 캐치하기 RAISERROR 예제를 배워보세요

-> http://gocoder.tistory.com/34?category=701232



마무리


0으로 숫자를 나누지 않게 프로시져를 개발 하는게 정답입니다.


댓글을 달아 주세요



자바스크립트로 바코드 만들기


간단하게 스크립트로 바코드를 만들수 있는 방법이다.

▼해당 사이트를 참조하였다. 


▼아래는 해당 URL을 보고 만든 샘플 아래 소스를 갖다 써도 되고 
아래 파일을 다운받아 한폴더에서 실행하면 충분한 레퍼런스가 될거라 생각됩니다.

<html>
<
head>
    <
script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    <
script type="text/javascript" src="jquery-barcode.js"></script>
</
head>
<
body>

<
div id="bcTarget"></div>
</
body>

<
script type="text/javascript">
   
$("#bcTarget").barcode("1234567890128", "codabar");

   
//    바코드 타입    
   
//    codabar
    //    code11 (code 11)
    //    code39 (code 39)
    //    code93 (code 93)
    //    code128 (code 128)
    //    ean8 (ean 8)
    //    ean13 (ean 13)
    //    std25 (standard 2 of 5 - industrial 2 of 5)
    //    int25 (interleaved 2 of 5)
    //    msi
    //    datamatrix (ASCII + extended)
</script>

</html>



프론트에서 처리 가능하는 방법으로 
바코드 사용시 가장 추천하는 방법이다. 



+고코더 추천강의



+폰트를 등록해 바코드로 만들어 보세요.
-> http://gocoder.tistory.com/84



+jQuery로 QRcode를 만들어보세요.
-> http://gocoder.tistory.com/86






마무리


javascript가 이제 모든걸 대체 할 것 입니다.





댓글을 달아 주세요

  • 질문매니아 2017.12.01 14:59  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    게시글 너무 잘읽었습니다.
    하나 궁금한점이 생겨 댓글 남깁니다.
    제가 위에 올리신 소스를 사용하여 바코드 생성 후 스캐너로 읽으면 앞뒤에 A라는 글자가 붙던데
    이것을 지울 방법을 소스를 봐도 잘 모르겠네요...

    혹시 도움이 주실 수 있다면 너무 감사하겠습니다.^^

    • Favicon of https://gocoder.tistory.com 고코더 2017.12.01 15:13 신고  댓글주소  수정/삭제

      안녕하세요 개발자님^^
      문의하신 내용으로 검수 한 결과
      제가 올린 예제에 A가 붙을 수 없습니다.codabar는 숫자만 바코드를 표출하거든요 ㅠ

      제 예제에서
      A가 붙을수 있는 바코드 타입은
      code39 (code 39)
      code93 (code 93)
      code128 (code 128)
      이렇습니다.

      혹시 갖고 계신 리더기가 지원하는 코드 체계와 현재 개발하신 바코드 타입이 상이한건 아니신지 궁금하네요^^
      제가 주석으로 처리한 타입으로
      읽혀 보시면서 테스트 해보세요!

  • 질문매니아 2017.12.01 15:40  댓글주소  수정/삭제  댓글쓰기

    codabar는 어떤한 문제인지.. 계속 해서 A가 붙길래 다른 타입으로 변경하여 사용합니다.
    친절한 답변 너무 감사합니다.

    2017년 마무리 잘하세요^^



MSSQL EXISTS 사용 방법


MSSQL 하면 프로시져 만들기 참 좋다.
MSSQL 매니지먼트 스튜디오가 편해서 그럴것이다.
실무에서 가장 많이 쓰고 헷갈리는 내장객체는
EXISTS 일것이다.
테이블을 검색해서 값이 있을때와 없을때를 구분한다.


IF EXISTS(
                SELECT * FROM 테이블
                WHERE ID = @ID
         )
    BEGIN    --//SELECT문의 결과값이 존재하면 진입
    END  
ELSE
    BEGIN    --//SELECT문의 결과값이 없을 경우에 진입
    END

그리고 반대로 하고 싶으면 NOT EXISTS 를 사용하면 된다.

IF NOT EXISTS(
                SELECT * FROM 테이블
                WHERE ID = @ID
         )
    BEGIN    --//SELECT문의 결과값이 없을 경우에 진입
    END  
ELSE
    BEGIN    --//SELECT문의 결과값이 존재하면 진입
    END


마무리

항상 철자 까먹는 함수가 EXISTS입니다. 
지금 쓰면서도 헷갈렸었네요 


댓글을 달아 주세요




META-INF


- 자바 패키징 기술인 jar의 일부
- META-INF폴더는 자바에서 설정관련 파일을 저장하는 폴더
- jar 파일들을 풀어보면 META-INF 폴더 아래 MANIFEST.MF 라는 파일이 있고 사양서 내용이 있다.




WEB-INF


 
- 웹 애플리케이션 용으로 (servlet 규격으로) 따로 만들어진 디렉터리

- 웹을 중요한 파일들이 노출되지 않도록 만든 폴더



댓글을 달아 주세요



DB 연결 후 리스트 출력


PHP언어에서 가장 많이 쓰게 되는
부분이지만 항상 까먹게 되는 부분입니다.
한번 제 나름대로 레퍼런스를 만들 어 보았습니다.

아래 소스는 

DB를 연결하고 Select 된 데이터를 
for 문으로 돌리는 가장 기초적인 
DB 연결 예제문이다.



<?php
//연결
$db = mysql_connect("서버주소","계정","암호");

//DB선택
mysql_select_db("DB",$db);

//쿼리
$result=mysql_query("쿼리문",$db);

//DB에 연결 후 쿼리를 실행된 값을 배열 저장
mysql_fetch_array($result);

while($row=mysql_fetch_array($result)){
   
echo "이름:$row[name]<p>";
   
echo "내용:$row[content]<p>";
}
mysql_result($result);

//    연결끊기
mysql_close($db);
?>


댓글을 달아 주세요



Request.ServerVariables 사용하기


내장객체중에 가장 많이 사용하는 
Request.ServerVariables 입니다.

하지만 익숙한건 금방 외워 사용하지만
긴가 민가 하는 경우가 많습니다.

그럴때 제가 항상 하던 방법인데요 
아래 소스로 돌려보고 
필요한거만 가져다 쓰는 방법이 좋아서 공유합니다.

1
2
3
4
5
6
7
8
<%
For Each key in Request.ServerVariables 
  if Request.ServerVariables(key) = "" Then
  else
        Response.Write key & "  -->  " & Request.ServerVariables(key) & "<br><br>"
  end if
Next
%> 

cs



▼ 아래와 같이 표시 됩니다. 그리고 나와 맞는걸 찾아쓰면 되겠네요^^


댓글을 달아 주세요