▶ 뭉충닷컴
 
mungchung.com login
Site Search
My Space
주절주절...
공부방
쥔장소개
Board
자유게시판
유용한 정보
자료실
Programming
강좌 & Articles
Spring 3.0
프로그래밍 Tip
   -ASP
   -PHP
   -JavaScript
   -HTML
   -Java/JSP
   -Database
   -Crystal Report
   -Visual Basic
   -이클립스
   -리눅스
   -기타
Windows API (VB)
Spread Sheet 7.0
컴퓨터활용 Tip
Other things
StarCraft 전략
StarCraft 문서
김용(金庸)
Son Q & Dieda

ModelAndView를 이용해서 간단한 javascript alert 사용하려고 할때 복잡한듯한데

간편하게 처리한 내용이 있어서 긁어왔다.

 

 

출처 : http://wizebee.blog.me/118774626

 

 

Spring Framework 또는 Tiles를 사용해 뷰 컨트롤러를 구현할 때, 서블릿의 request handler는 ModelAndView 개체를 리턴한다. 단순 메시지 박스를 출력 또는 첨부파일 다운로드 구현에 대한 레퍼런스를 검색해보면 국내외를 막론하고 복잡하거나 거추장스러운 방법으로 구현되어 있어 가장 적은 코딩으로 구현하는 방법을 소개한다.

아래의 코드로 메서드를 구현한 다음 서블릿에서 호출하면 된다. 작성된 코드는 혐오스럽고 섬뜩하며 불필요한 리다이렉션이나 팝업을 생성하지 않는다.

*spec: 스프링 프레임웤 3.0이던가?? 타일즈 버전이라... 흠. 암튼, 2010년 12월에 작성된 코드임.

 

파일 다운로드 구현:

 

String sv_name = request.getParameter("ServerFilename"); 
String dw_name = request.getParameter("DownFilename"); 

View view = new AbstractView() {
    @Override
    protected void renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception {
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Transfer-Encoding", "binary");
        response.setHeader("Content-Disposition", "attachment;fileName=\"" + dw_name + "\";");

        OutputStream outs = response.getOutputStream();
        File file = new File(sv_name);
        response.setContentLength((int)file.length());
        FileInputStream ins = new FileInputStream(file);

        try {
            /* copy stream data */
        } catch (java.io.IOException e) {
            response.setContentLength(0);
            System.out.println("File not found.");
            e.printStackTrace();
        }
        outs.flush();
    }
};
ModelAndView mv = new ModelAndView(view);

페이지 생성:

 // 메시지박스를 출력하고 스크립트를 실행하는 ModelAndView 객체를 리턴한다.
public static ModelAndView getMessageView(final String msg, final String script) {
    View view = new AbstractView() {
        @Override
        protected void renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception {
            response.setContentType("text/html; charset=EUC-KR");
            response.setCharacterEncoding("EUC-KR");
            ServletOutputStream outs = response.getOutputStream();
            outs.println("<html><script type='text/javascript'>");
            outs.println("alert(\"" + new String(msg.getBytes(), "ISO_8859_1") + "\");");
            outs.println(new String(script.getBytes(), "ISO_8859_1"));
            outs.println("</script></html>");
            outs.flush();
        }
    };
    return new ModelAndView(view);
}

 

위 코드는 간혹 개발/운영 환경이 다를경우 한글이 이상하게 나올 수 있다.

개선된 코드는 아래와 같다.

public static ModelAndView getMessageView(final String msg, final String script) {
    View view = new AbstractView() {
        @Override
        protected void renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception {
            response.setContentType("text/html; charset=UTF-8");
            response.setCharacterEncoding("UTF-8");
            PrintWriter outs = response.getWriter();
            outs.println("<html>");
            outs.println("<head>");
            outs.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
            outs.println("<script type='text/javascript'>");
            outs.println("스크립트내용");
            outs.println("</script>");
            outs.println("</head>");
            outs.println("</body>");
            outs.println("</html>");
            outs.flush();
        }
    };
    return new ModelAndView(view);
}

 

 

 

 

 

문서 첨부 제한 : 0Byte/ 2.00MB
파일 크기 제한 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 Spring 3.0 게시판 뭉충닷컴 2011-08-07 4497
25 Spring Controller의 메서드에 사용될수 있는 파라미터 종류 뭉충닷컴 2012-11-01 7229
24 Spring에서 requestURL 가져올때 URL을 /WEB-INF/views/.. 로 가져오는 이유 뭉충닷컴 2012-10-31 7378
23 Spring의 어노테이션 정보 읽기 뭉충닷컴 2012-10-29 5726
22 Spring MVC 기본 흐름 file 뭉충닷컴 2012-10-23 6758
21 custom taglib 만들때 spring bean 사용하기 뭉충닷컴 2012-08-29 8690
20 STS에서 한글에 String literal is not properly closed by a double-quote 오류가 날 경우 file 뭉충닷컴 2012-07-03 4176
19 Spring @Transactional 어노테이션을 이용한 트랜잭션 예제 file 뭉충닷컴 2012-06-04 8269
18 Spring @Transactional 사용시 rollback이 안될 경우 뭉충닷컴 2012-06-03 13342
17 한글때문에 xml 파싱시 오류날 경우 (URI$MalformedURIException 오류) file 뭉충닷컴 2012-06-02 5346
16 maven에 ojdbc14 추가하기 뭉충닷컴 2012-06-01 5353
15 HandlerInterceptor 간단한 사용 예제 file 뭉충닷컴 2012-03-08 8964
14 Spring Template Project 이용시 maven 빌드를 제대로 못할경우 file [1] 뭉충닷컴 2012-03-07 6047
13 Spring에서 Quartz 이용하기 (스케줄이용방법) file [1] 뭉충닷컴 2012-03-06 13620
12 Spring AOP (Aspect Oriented Programming) 뭉충닷컴 2012-03-05 2693
11 Spring의 HandlerMapping 종류및 사용방법 file 뭉충닷컴 2012-03-04 5833
10 maven을 이용해 배포(Deploy) 대상에 따라서 환경설정(resources) 다르게 적용하기 file [1] 뭉충닷컴 2012-03-03 36025
9 일반 Spring 프로젝트를 Web 프로젝트로 변경하기 file 뭉충닷컴 2012-03-03 4571
8 URL과 Controller 간단하게 연결해주는 HandlerMapping 처리 방법 뭉충닷컴 2012-03-03 4635
7 Spring에서 Session을 이용한 로그인 처리 예제 file [12] 뭉충닷컴 2012-03-02 64872
» 뷰 컨트롤러에서 ModelAndView 개체를 직접 생성하는 방법 뭉충닷컴 2012-03-01 7044
5 Root Application Context와 Servlet Context file 뭉충닷컴 2012-02-29 10492
4 STS의 Spring Template Project를 이용한 간단한 Spring MVC 웹 프로젝트 file [15] 뭉충닷컴 2012-02-29 13846
3 스테레오타입 어노테이션을 이용한 자동 빈 등록 file 뭉충닷컴 2012-02-28 2710
2 Spring에서 Bean 등록 여러가지 방법 뭉충닷컴 2012-02-28 4664
1 component:context-scan으로 설정되어있는 Bean들 확인하는 방법 file 뭉충닷컴 2012-02-24 3046