자바로 간단한 API 웹 프로그래밍을 해야 해서 알아보다 보니


http://sparkjava.com/ 이 경량화 이면서 자바 초보인 내가 알아보기 쉽게 되어 있어서 선택했는데


문제는 배포방법을 모르겠어서 삽질이 시작되었다.


이클립스에서의 실행은 아주 쉽다.


이클립스용 Gradle를 설치해주고 (마켓에서 설치) 새로운 GradleProjet를 생성한다.




build.gradle에 sparkjava dependencies 를 넣어준다.


http://mvnrepository.com/artifact/com.sparkjava/spark-core/2.0.0


그리고 최종적으로는 war로 배포를 할것이니 war플러그인도 설정






테스트용 클래스를 하나 생성하고 코드를 sparkjava 홈페이지에서 그대로 가져온다음 실행을 누른다.

아..그전에 프로젝트 팝업메뉴Gradle -> Refresh All , Gradle -> Enable Dependency Managment





http://localhost:4567/hello 에 접속하면 끝!


개발은 이상태로 계속 하면 된다.


문제는 이렇게 개발한것을 어떻게 배포를 하느냐 인데

자바 초보인데다가 웹프로젝트도 처음이고 war파일을 톰캣이나 jetty에 wabapps경로어 넣으면 된다 정도의

아주 기초적인 지식만 가지고 하루종일 구글링을 해보고 밤잠 설쳐 가면서 삽질을 했는데 도데체 모르겠는것이다.


결국은 maven까지 깔아서 해봤는데도 잘 안되었다.

( 이 과정에서  gradle이 얼마나 쉬운지 체험했다.)


안되면 처음부터 천천히 보자..공식문서에는 다음과 같이 나온다.


Other webserver

To run Spark on a web server instead of standalone first of all an implementation of the interface spark.servlet.SparkApplication is needed. In the init() method the routes should be initialized. In your web.xml the following filter needs to be configured:

어쩌라고?



자세히보니 init()을 하란다....


어쩌라고?????



다시 구글링..


범인은 가까운데 있다지..ㅡ.ㅡ;;


Git의 Test코드에서 sample을 찾아 볼 수있었다.


다른 웹서버에서 사용하기 위한 web.xml 설정과

https://github.com/perwendel/spark/blob/master/src/test/webapp/WEB-INF/web.xml


이를 사용하기 위한 샘플 코드

https://github.com/perwendel/spark/blob/master/src/test/java/spark/servlet/MyApp.java



이대로 지금 작업중인 HelloSpark에 추가를 한다.


src/main/webapp/WEB-INF/web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>
    <filter>
        <filter-name>SparkFilter</filter-name>
        <filter-class>spark.servlet.SparkFilter</filter-class>
        <init-param>
            <param-name>applicationClass</param-name>
            <param-value>org.gradle.Spark</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>SparkFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

자바 코드도 수정을 한다.


아까 테스트한 Hello World에 github에서 가져온 소스를 덧붙인다.

package org.gradle;
import static spark.Spark.*;
import spark.servlet.SparkApplication;

public class Spark implements SparkApplication{

    public static void main(String[] args) {

        staticFileLocation("/public"); // Static files
        get("/hello", (req, res) -> "Hello World");
    }

    @Override
    public void init() {
        // TODO Auto-generated method stub
        before("/protected/*", (request, response) -> {
            halt(401, "Go Away!");
        });
        get("/hi", (request, response) -> {
            return "Hello World!";
        });
        get("/:param", (request, response) -> {
            return "echo: " + request.params(":param");
        });
        get("/", (request, response) -> {
            return "Hello Root!";
        });
        post("/poster", (request, response) -> {
            String body = request.body();
            response.status(201); // created
                return "Body was: " + body;
            });
        after("/hi", (request, response) -> {
            response.header("after", "foobar");
        });
        try {
            Thread.sleep(500);
        } catch (Exception e) {
        }
    }
}

이클립스 메뉴에서 Window->Show View -> Other 에서 Gradle Tasks를 추가 하고

작업중인 프로젝트를 선택한 후 build를 더블클릭하면 build\libs 경로에 HelloSpark-1.0.war 파일이 생성되며

이것을 톰캣이나 다른 jetty 서버에 배포를 하면 된다.


ps.

staticFileLocation("/public"); // Static files

이함수는 임베디드 jetty에서는 아무데서나 써도 되지만 war로 배포 하겠다고 한다면

꼭 main에서 실행해야 한다. 이것 때문에 하루 삽질!

저작자 표시 비영리 변경 금지

'지식창고 > Java' 카테고리의 다른 글

Sparkjava 와 Gradle 그리고 배포  (0) 2014/09/29
mybatis procedure 삽질  (0) 2014/08/28
자바 EUC-KR, UTF-8 파일 둘다 읽는 방법  (0) 2014/08/12
Java Resize Library Test  (0) 2014/08/09
eclipse aptana git 문제  (0) 2014/05/29
Posted by dummy 

전에는 단순히 시작 프로그램에서 아이콘만 삭제 하면 빠졌는데


업그레이드 이후에는 어디서 시작하는지 못찾겠다.


레지스트리, 서비스 죄다 뒤졌는데도 안보인다.


혹시나 하고 작업 스케줄러에 가보니 있다.


이걸 왜 이렇게 해놨을까?

저작자 표시 비영리 변경 금지
Posted by dummy 

얼마전 부터 네트워크 아이콘 있는데서 팝업 알림이 뜬다.


검색 해봤으나 다들 이유가 뭔지 궁금해 하는데 인벤에 유일하게 답변이 달려 있다.



http://www.inven.co.kr/board/powerbbs.php?come_idx=2608&l=397229



영어로 검색해보니 해결법이 있네요. 문제는 KB2750841 이 업데이트이고 이게 IPv4로 인터넷 사용이 가능해도 IPv6 사이트로 접속을 시도할 때 실패할 경우 발생하는 메세지라고 하네요.

해결법으로 3가지 정도가 제안되었는데
1. KB2750841를 삭제한다. (보안 패치는 아님)
2. DNS설정을 바꾼다. 예를 들어 구글 DNS 8.8.8.8
3. 시스템 트레이에서 숨겨진 아이콘 보기를 선택 후 - 네트워크 아이콘을 숨김 후 경고 표시 안함으로 설정.

이렇게 되어 있네요.



2번은 답이 아닌듯하다. 

구글 DNS를 사용중 이며, 원인이 IPv6접속 때문이라면 DNS와는 상관이 없어 보인다.


3번도 네트워크 아이콘을 가려 버리는것은 답답할 것 같다.




윈7 초기에는 ipv6 체크가 있는 경우 인터넷이 느려지는 문제가 있어서 체크를 빼놨다가

최근에 패치되서 그냥 둬도 된다길래 그냥 두고 사용했는데 IPv6와의 문제라면 저걸 빼놓으면 해결 될 것같다.

체크를 빼고 당분간 지켜봐야겠다.



ps. 몇일간 사무실, 집에서 (윈7,8) 지켜봤는데 해결되었다.


http://lite.parkoz.com/zboard/view.php?id=my_tips&no=15325


오늘 파코즈에도 올라왔는데 레지스트리 수정 방법은 고정 데스크탑은 상관없으나

이동 노트북 사용자의 경우 별로 좋지 않을 수 있다.

저작자 표시 비영리 변경 금지
Posted by dummy 
이전버튼 1 2 3 4 5 ... 482 이전버튼