포스팅 진행방식이 restful 방식이라 확장자 없이 컨트롤러 호출이 가능합니다.
하지만 js/css/html/이미지 파일등을 컨트롤러로 인식을 한다는 문제점이 있습니다.
확인해보도록 하겠습니다.
webapp 디렉토리에 이미지 파일들을 아무거나 붙여넣기를 해봅니다.
그리고 webapp디렉토리에 index.jsp의 body태그에 하단 코드를 작성해봅니다.
<img width="200" height="200" alt="" src="/test.jpg">
위와같이 img 태그를 작성 후 실행을 해보았습니다.
실행결과 404 (not found) 결과가 출력되면서 이미지출력이 제대로 이루어지지 않습니다.
이미지 파일뿐 아니더라도 js파일,css파일등 모두 잘못된 페이지로 인식을 합니다.
이미지를 부분을 해결해야 하면 어떻게 해야 하나?
webapp 디렉토리 하단에 리소스파일들만 모아놓는 디렉토리를 추가합니다.
저같은 경우 resource 라고 디렉토리 생성을 하였습니다.
resource 디렉토리 생성후 방금전 오류가 났던 이미지파일을 resource 디렉토리 내에 이동시킵니다.
mvc-config.xml에 다음 코드를 추가합니다.
<mvc:resources mapping="/resource/**" location="/resource/" />
mvc:resources의 속성을 간단히 알아보자면
location : 실제 리소스파일들이 들어있는 디렉토리경로
mapping : 클라이언트 페이지(JSP)에서 지정해주는 리소스 디렉토리
mvc:resources 태그를 하단처럼 정의했다면
<mvc:resources mapping="/app/**" location="/resources/" />
실제 리소스 파일들이 존재하는 디렉토리는 resources이고
jsp페이지에 만약 img 태그의 위치를 정의해준다고 가정한다면
<img src="/app/xxx.jpg" /> 처럼 사용을 하시면 됩니다.
보통은 mapping의 디렉토리와 location의 디렉토리명을 일치시켜줍니다.
<img width="200" height="200" alt="" src="/resource/test.jpg">
이미지파일을 resource디렉토리로 이동시켰으니
src 속성에 resource디렉토리로 재설정을 해준 다음 재실행 해보았습니다.
실행결과 정상적으로 리소스 파일을 출력 할 수 있었습니다.
마지막으로 favicon.ico 설정을 잡아보도록 하겠습니다.
동일하게 mvc:resources 태그를 이용하여 설정이 가능합니다.
favicon 아이콘파일은 webroot에 보통 존재하므로
사용할 favicon.ico 파일을 webapp 디렉토리 밑에 위치 시킨 다음
다음코드를 작성해주면 정상적으로 favicon 적용이 가능합니다.
하단코드는 특정 1개의 리소스파일을 적용할때 사용하시면 되겠습니다.
<mvc:resources mapping="/favicon.ico" location="/favicon.ico" />
by 개발로짜
Spring3 Pathvariable 어노테이션을 이용하여 PARAMETER를 URL처럼 받아보기 (0) | 2014.11.11 |
---|---|
Spring3 jackson JSON 라이브러리 + ResponseBody 이용하여 JSON 파싱하기 (0) | 2014.11.10 |
Spring3 파일전송을 위한 multipartResolver 설정하기 (2) | 2014.11.07 |
Spring3 한글깨짐 방지를 위한 UTF-8 인코딩 설정하기 (6) | 2014.11.06 |
STS 이클립스를 이용하여 UTF-8 인코딩 설정 및 Spring3 MVC 연동해보기 (3) | 2014.11.06 |
메이븐에 파일관련 라이브러리를 추가하여 진행해야 하므로
pom.xml에 dependency를 등록 하도록 하겠습니다.
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
등록하였으면 컨트롤러에 2개의 맵핑을 선언합니다.
/** * 파일등록화면 * @return */ @RequestMapping("/form") public String form(){ return "form"; } /** * form submit 파일결과 받기 * @param file */ @RequestMapping("/getFile") public void getFile(FileVo file){ System.out.println(file.getFile().getOriginalFilename()); }
첨부파일을 서버에서 받기위하여 vo클래스를 하나 생성 해보겠습니다.
패키지명 : com.spring.study.vo
vo 클래스명 : FileVo
package com.spring.study.vo; import org.springframework.web.multipart.MultipartFile; public class FileVo { private MultipartFile file; public MultipartFile getFile() { return file; } public void setFile(MultipartFile file) { this.file = file; } }
등록폼을 위한 form.jsp 파일을 view 디렉토리내에 생성 하여
body태그에 간단하게 다음코드를 추가합니다.
<form action="/getFile" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" value="서버전달"/> </form>
서버를 시작하여 form URL 호출을 해보겠습니다.
파일 첨부 후 "서버전달" 버튼 클릭을 하게 되면
위 오류메시지가 발생하게 됩니다.
스프링에서 파일처리를 위해서는
MultipartResolver 설정을 잡아주어야 하는데
해당 설정부분이 빠져있어서 파일처리도중 Exception 발생이 일어난겁니다.
mvc-config.xml 파일내에 다음 코드를 추가해주도록 합니다.
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
위 코드를 추가하신다음 다시한번 파일첨부후 실행을 해보도록 합니다.
첨부후 "서버전달"버튼 클릭을 하면
이번에는 500에러가 아닌 404 에러가 나타난다면
정상적으로 파일전송이 완료된겁니다.
이클립스의 콘솔을 확인해보시면 System.out.println을 이용하여
전송한 첨부파일의 파일명이 출력된 것을 확인할 수 있습니다.
by 개발로짜
Spring3 Pathvariable 어노테이션을 이용하여 PARAMETER를 URL처럼 받아보기 (0) | 2014.11.11 |
---|---|
Spring3 jackson JSON 라이브러리 + ResponseBody 이용하여 JSON 파싱하기 (0) | 2014.11.10 |
Spring3 RESTFUL 방식 리소스파일 및 favicon 인식할수 있게 설정하기 (3) | 2014.11.07 |
Spring3 한글깨짐 방지를 위한 UTF-8 인코딩 설정하기 (6) | 2014.11.06 |
STS 이클립스를 이용하여 UTF-8 인코딩 설정 및 Spring3 MVC 연동해보기 (3) | 2014.11.06 |
이번 포스팅은 스프링 MVC 환경 설정중
한글깨짐 현상을 해결하기 위한방법을 포스팅 하도록 하겠습니다.
테스트를 위하여 form submit 테스트를 해보겠습니다.
2014/11/06 - [개발에필요한연동법/스프링연동] - STS 이클립스를 이용하여 UTF-8 인코딩 설정 및 Spring3 MVC 연동해보기
@RequestMapping("/form") public String form(){ return "form"; } @RequestMapping("/submit") public String submit(HttpServletRequest request, Model model){ model.addAttribute("text",request.getParameter("text")); return "submit"; }
2개의 컨트롤러를 추가 하였습니다.
form url은 입력폼이 들어있는 페이지입니다.
submit은 form페이지에서 입력받은 text태그의 내용을 출력하는 화면입니다.
각 페이지를 다음처럼 작성합니다.
<h3>폼전송</h3> <form action="/submit" method="post"> <input type="text" name="text" /> <input type="submit" value="전송"/> </form>
<h3>폼전송 결과 : ${text }</h3>
코드 작성을 하였다면 실행을 해보도록 하겠습니다.
실행결과 한글깨짐이 발생합니다.
request.setCharacterEncoding("utf-8");
submit 컨트롤러에 위와같이 설정을 해주면 한글을 깨지지 않겠지만
각 컨트롤러마다 추가를 해줄 수 없으므로 web.xml파일의 web-app 태그내에
다음과 같이 코드를 추가해주도록 합니다.
<filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
코드를 추가하셨다면 form URL을 재호출하여
한글전송을 테스트 해보도록 하겠습니다.
정상적으로 한글 출력이 잘되네요.
다음은 파일전송에 대하여 포스팅 하도록 하겠습니다.
by 개발로짜
Spring3 Pathvariable 어노테이션을 이용하여 PARAMETER를 URL처럼 받아보기 (0) | 2014.11.11 |
---|---|
Spring3 jackson JSON 라이브러리 + ResponseBody 이용하여 JSON 파싱하기 (0) | 2014.11.10 |
Spring3 RESTFUL 방식 리소스파일 및 favicon 인식할수 있게 설정하기 (3) | 2014.11.07 |
Spring3 파일전송을 위한 multipartResolver 설정하기 (2) | 2014.11.07 |
STS 이클립스를 이용하여 UTF-8 인코딩 설정 및 Spring3 MVC 연동해보기 (3) | 2014.11.06 |