제목

No mapping found for HTTP request with URI [/favicon.ico] in spring


상세

스프링에서 favicon.ico를 못찾는 다고 page not found 가 발생하는 경우 해결 방안


해결방법

원인

서블릿 설정은 아래와 같이 되어 있다.

<resources mapping="/resources/**" location="/resources/" />

하지만 favicon.ico는 resource 폴더 하위에 존재하지 않으므로 url mapping이 이뤄질 수 없으므로 아래와 같은 방법을 적용하면 파비콘을 볼 수 있게 된다.


해결

1. resources/favicon.ico 를 배치한다

2. 컨트롤러에 아래와 같이 자원을 맵핑 해주도록 한다.

@RequestMapping(value = "/favicon.ico", method = RequestMethod.GET)

public void favicon( HttpServletRequest request, HttpServletResponse reponse ) {

try {

reponse.sendRedirect("/resources/favicon.ico");

} catch (IOException e) {

e.printStackTrace();

}

}


비고

- 더 좋은 방법이 있음 리플해 주시면 감사하겠습니다.


spring에서 static 자원 사용하기 !

출처 : http://stackoverflow.com/questions/1483063/spring-mvc-3-and-handling-static-content-am-i-missing-something


[핵심 요약]

servlet-context.xml

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->

<resources mapping="/resources/**" location="/resources/" />


test.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h1>Page with image</h1>
<!-- use c:url to get the correct absolute path -->
<img src="<c:url value="/resources/img/image.jpg" />" />


위와 같이 서블릿 설정에서 고정자원 경로를 설정한 이후 VIEW에서 c:url 을 활용하면 된다.

(그냥 링크 대신 c:url을 활용하면 해당 app name (배포 경로)가 포함되기 때문에 link오류가 발생하지 않음.)



url-pattern에서 / 와 /*의 차이점 

출처 :  http://www.okjsp.pe.kr/seq/145481


Spring framework이 유행하고 REST Style URL이 유행하면서 직면하는 문제가 하나 있다.

다음과 같은 url로 서비스를 한다고 가정해보자.
/article
/article/1
/article/add

음 갈끔한 URL이다. ㅋ

그러면 web.xml에 다음과 같이 url-pattern을 설정하게 된다.

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

REST Style의 url을 가져야 함으로 url-pattern은 /* 처럼 걸어야 한다.
.do와 같은 확장자를 가져서는 안된다. <-- 촌스러... ㅋㅋ

아 물론 viewResolver는 간단히 아래처럼 걸었다. 물론 default다. 흐

<!-- viewResolver -->
<bean id="viewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

이렇게 하고 /article을 호출하면, 다음과 같은 에러를 만나게 된다.

경고: No mapping found for HTTP request with URI [/WEB-INF/jsp/article.jsp] in DispatcherServlet with name 'dispatcher'

흐... RequestMapping를 타고나서, jsp를 호출하려고 하였더니, /* url-pattern에 걸려들어 에러가 나는 것이다.

이를 어쩌란 말인가??? 흐

여기서 등장하는 것이 우리의 servlet spec이다.

SRV.11.2 Specification of Mappings 를 보면 아래와 같이 나와 있다.

In theWeb application deployment descriptor, the following syntax is used to define mappings:
1. A string beginning with a ‘/’ character and ending with a ‘/*’ suffix is used for path mapping.
2. A string beginning with a ‘*.’ prefix is used as an extension mapping.
3. A string containing only the ’/’ character indicates the "default" servlet of the application. In this case the servlet path is the request URI minus the context path and the path info is null.
4. All other strings are used for exact matches only.

1, 2, 4는 알겠는데, 3번은 좀 그렇다. ㅋ 우리의 주인공은 바로 이 3번이다. 3번을 보면 '/'만 딸랑 있을 경우에는 default servlet를 탄다고 한다. 아 그런데 그래서 뭐? default servlet이 먼데? 뭘 어쩌라는 거야?

ㅋ, 아! 톰켓을 참조하도록 하자. 톰켓의 conf/web.xml를 열어서 default servlet을 찾아보자. 그러면 주석에 이런 말이 나온다.

<!-- The default servlet for all web applications, that serves static     -->
<!-- resources.  It processes all requests that are not mapped to other   -->
<!-- servlets with servlet mappings (defined either here or in your own   -->
<!-- web.xml file.  This servlet supports the following initialization    -->
<!-- parameters (default values are in square brackets):                  -->

It processes all requests that are not mapped to other servlets with servlet mappings

이 런 말이 있다. 이 default servlet은 servlet mapping에 하나도 걸리지 않는 녀석들을 처리한다고 한다. 온갖 mapping을 통과해 버린 녀석들을 말하는 것이다. 그러면 뭐가 남을까? 바로 jpg, html 등 정적인 리소스만 남게 된다. 톰켓만으로도 이미지를 보여 줄 수 있는 것은 이 default servlet이 있기 때문이다.

흐하하하하하하~ 여기서 살짝 잔머리를 굴려 보자.. ㅋㅋ

일 반적으로 web과 was를 분리해서 쓰니까, jpg나 html 등 정적인 리소스는 web 서버가 맡아서 해야한다. 그리고 나머지들은 was로 넘어 와야 한다. 위의 상황의 문제는 *.jsp가 DispatcherServlet를 타면 안되는 상황이다.  ㅋ, jsp는 was에서 처리를 해야 하는 것이지만 /* url-pattern에 의해서 DispatcherServlet를 타면 안되는 상황이다.

ㅋㅋ 원래 default servlet의 목적을 살짝쿵 바꿔 버리는 것이다.

그런데, SRV.11.2.1 Implicit Mappings에 나와 있는 것처럼, *.jsp는 이미 mapping되어 있다. 톰켓안에 벌써 되어 버려 있다. 물론 이 conf/web.xml 파일 안에 말이다. ㅋㅋ 

그러므로 *.jsp는 톰켓에 걸려 있는 servlet을 타면 되고, 이를 통과한 /article은 default servlet을 타면 된다는 것이다. 이야... 쥑인다!!!!!

앗 그런데, conf/web.xml에 이미 default servlet이 설정되어 있다. 앗.. 어쩌지? ㅋㅋ SRV.11.2.1 Implicit Mappings(If a *.jsp mapping is defined by the Web application, its mapping takes precedence over the implicit mapping.) 에 나와 있는 것처럼 해당 web application에 재정의를 하게 되면, implicit Mapping 보다 우선적으로 적용된다고 한다. 흐흐.

이렇게 해서 *.jsp를 제외하고 Spring의 DispatcherServlet을 태울 수 있는 것이다. 아래처럼 url-pattern만 /* 에서 /로 바꿔 버리면 된다. 아래처럼.. 흐

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

출처 : http://thetechnocratnotebook.blogspot.kr/2012/05/installing-tomcat-7-and-apache2-with.html

1. 아파치 및 톰캣 설치

톰켓 설치

sudo apt-get install apache2


설치 후 테스트  http://localhost/

톰켓 설치

sudo apt-get install tomcat7
sudo apt-get install tomcat7-admin


톰켓 테스트를 위한 폴더 및 파일 생성

cd /var/lib/tomcat7/webapps
sudo mkdir tomcat-demo
sudo mkdir tomcat-demo/helloworld
sudo vim tomcat-demo/helloworld/index.jsp


아래 코드 복사

<HTML>
 <HEAD>
  <TITLE>Hello World</TITLE>
 </HEAD>
 <BODY>
  <H1>Hello World</H1>
  Today is: <%= new java.util.Date().toString() %>
 </BODY>
</HTML>

설치 후 테스트 

http://localhost:8080/tomcat-demo/helloworld/ 

2. mod_jk 설치 및 설정

sudo apt-get install libapache2-mod-jk


server.xml 설정 (나중에 연동 후에는 8080 포트 구문을 주석처리 해줘도 된다.)

sudo vim /etc/tomcat7/server.xml


아래 라인의 주석 해제

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

아파치 워커 파일(workers.properties) 생성


sudo vim /etc/apache2/workers.properties


아래 코드를 복사하여 넣어준다

# Define 1 real worker using ajp13 
worker.list=worker1 
# Set properties for worker (ajp13) 
worker.worker1.type=ajp13 
worker.worker1.host=localhost
worker.worker1.port=8009

아파치 워커 파일 설정

sudo vim /etc/apache2/mods-available/jk.conf


JkWorkersFile 설정 경로 정보를 아래 라인으로 변경한다

/etc/apache2/workers.properties

 
마지막으로 적용할 톰캣 URL 설정

sudo vim /etc/apache2/sites-enabled/000-default


아래 라인을 추가해 준다

<VirtualHost *:80>
.......................................
.......................................
JkMount /tomcat-demo* worker1
</VirtualHost *:80>
이제 톰캣, 아파치 서버를 재기동 한다

sudo /etc/init.d/tomcat7 restart
sudo /etc/init.d/apache2 restart

연동 테스트
http://localhost/tomcat-demo/helloworld/ 

8080포트 접속을 통한 테스트
http://localhost:8080/tomcat-demo/helloworld/


mod_jk 로그 보기

tail -f /var/log/apache2/mod_jk.log

문제점

우분투(linux) 설치 시 네트워크를 연결 할 수 없을 경우


해결방법

드라이버 다운로드 이후 재설치


관련 사이트

http://www.jfdesignnet.com/?p=2133


1. 파일 다운로드 

compat-wireless-2012-03-12-p.tar.bz2


2. 압축해제

3. 설치

./scripts/driver-select alx

cp config.mk .config

make clean

make

make install

(make install은 su 관리자권한으로 실행한다 > su make install )



[작업진행중]



스타일러스 - CSS를 손쉽게 작성 할 수 있도록 도와준다.

http://learnboost.github.com/stylus/


'웹 디자이너를 위한 스타일 시트' 라는 제목으로 개발자가 보는 관점에서는 (디자인을 배제 한다면) 정말 하루만에 읽을 분량으로 구성된 책 같다. 실제로 예제를 따라 해보면서 책을 읽었는데 원서임에 불구하고 (영어 잘하는 사람 아님) 하루만에 책을 독파 하게 된 최초의 책이 아닐까 싶다. 물론 스타일 시트를 이용하여 전문적인 효과 ( 서서히 변화하기, 이동, 뒤틀림 등)을 구사하는 것은 위 책에 명시되어 있지는 않지만. 기존 CSS를 접해본 사람이 새로운 기능을 접해 보는데 있어서는 가장 좋은 책이 아닐까 싶다.

  • 장점 : 이해하기 쉬움, 자세한 예제와 설명, 입문서

  • 단점 : 범위가 넘 좁음, 다양한 예제가 없음. 적은 분량



tcss.zip

( 첨부 파일 : 본문에서 제시한 테스트 예제 소스 )


문제점

: Spring 3.0 버전을 활용하다가 CGLIB is required to process @Configuration classes Exception 발생


해결방법

: 누락된 라이브러리를 추가해 주도록 한다.


Maven 추가 사항

<dependency>

<groupId>org.sonatype.sisu.inject</groupId>

<artifactId>cglib</artifactId>

<version>2.2.2</version>

</dependency>


Link : http://mvnrepository.com/artifact/org.sonatype.sisu.inject/cglib

자바 스크립트로 만들은 로또 프로그램 입니다.


TEST_LOTTO.zip

( 실행 방법 : 압축 해제 이후 lotto.html 을 실행하면 됩니다.)

주요 기능

- 로또 번호 생성

- 히스토리 기능

추후에 반응 좋으면 여러가지 기능을 넣어 지속적으로 배포 하도록 하겠습니다.

궁금사항이나 건의 사항은 리플로 부탁 드리겠습니다.


기본적으로 lion부터는(Mac 10.8) apache와 php가 내장되어 설치 되어 있음.

web서버를 사용하겠다 라고 설정한 이후 mysql을 홈페이지에서 다운로드 받은 이후

약간의 설정을 하면 APM 환경을 구축 할 수 있다.

자세한 내용은 아래 링크를 참조.

http://coolestguyplanettech.com/downtown/install-and-configure-apache-mysql-php-and-phpmyadmin-osx-108-mountain-lion

+ Recent posts