필터는 자원에 대한 요청과 자원으로부터 클라이언트로 전달되는 응답에 대하여 필요한 조작을 할 수 있는 자바 컴포넌트입니다.
FileListBean.java를 작성 하겠습니다.
DownloadServlet.java를 생성합니다.
index.jsp를 작성합니다.
FileFilter.java를 작성하겠습니다.
package file_download;
import java.io.IOException; import java.io.PrintStream; import java.io.PrintWriter; import java.io.StringWriter; import java.util.StringTokenizer; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest;
public class FileFilter implements Filter {
private static final boolean debug = true;
// The filter configuration object we are associated with. If // this value is null, this filter instance is not currently // configured. private FilterConfig filterConfig = null;
public FileFilter() { }
private boolean doBeforeProcessing(ServletRequest request, ServletResponse response) throws IOException, ServletException { boolean status = true; if (debug) { log("FileFilter:DoBeforeProcessing"); }
HttpServletRequest httpReq = (HttpServletRequest) request; httpReq.setCharacterEncoding("UTF-8"); String fileName = httpReq.getParameter("file_name"); StringTokenizer st= new StringTokenizer(fileName,"."); String lastToken = null; while(st.hasMoreTokens()){ lastToken= st.nextToken(); } if(!lastToken.equals("txt")){ response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<html>"); out.println("<meta http-equiv=\"Content-Type\"content=\"text/html;charset=UTF-8\">"); out.println("<title>부적절한 파일 포맷!!</title>"); out.println("</head>"); out.println("\"txt\" 형태가 아닌 파일을 선택하여 내려 받기가 거부되었습니다. <br/>"); out.println("(파일명:" + fileName+")"); out.println("</html>"); out.close(); status =false; } return status; }
private void doAfterProcessing(ServletRequest request, ServletResponse response) throws IOException, ServletException { if (debug) { log("FileFilter:DoAfterProcessing"); }
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (debug) { log("FileFilter:doFilter()"); }
boolean status = doBeforeProcessing(request,response);
Throwable problem = null; try {
if(status==true){ chain.doFilter(request, response);
} } catch (Throwable t) { // If an exception is thrown somewhere down the filter chain, // we still want to execute our after processing, and then // rethrow the problem after that. problem = t; t.printStackTrace(); }
doAfterProcessing(request, response);
// If there was a problem, we want to rethrow it if it is // a known type, otherwise log it. if (problem != null) { if (problem instanceof ServletException) { throw (ServletException) problem; } if (problem instanceof IOException) { throw (IOException) problem; } sendProcessingError(problem, response); } }
/** * Return the filter configuration object for this filter. */ public FilterConfig getFilterConfig() { return (this.filterConfig); }
/** * Set the filter configuration object for this filter. * * @param filterConfig The filter configuration object */ public void setFilterConfig(FilterConfig filterConfig) { this.filterConfig = filterConfig; }
/** * Destroy method for this filter */ public void destroy() { }
/** * Init method for this filter */ public void init(FilterConfig filterConfig) { this.filterConfig = filterConfig; if (filterConfig != null) { if (debug) { log("FileFilter:Initializing filter"); } } }
/** * Return a String representation of this object. */ @Override public String toString() { if (filterConfig == null) { return ("FileFilter()"); } StringBuffer sb = new StringBuffer("FileFilter("); sb.append(filterConfig); sb.append(")"); return (sb.toString()); }
private void sendProcessingError(Throwable t, ServletResponse response) { String stackTrace = getStackTrace(t);
if (stackTrace != null && !stackTrace.equals("")) { try { response.setContentType("text/html"); PrintStream ps = new PrintStream(response.getOutputStream()); PrintWriter pw = new PrintWriter(ps); pw.print("<html>\n<head>\n<title>Error</title>\n</head>\n<body>\n"); //NOI18N // PENDING! Localize this for next official release pw.print("<h1>The resource did not process correctly</h1>\n<pre>\n"); pw.print(stackTrace); pw.print("</pre></body>\n</html>"); //NOI18N pw.close(); ps.close(); response.getOutputStream().close(); } catch (Exception ex) { } } else { try { PrintStream ps = new PrintStream(response.getOutputStream()); t.printStackTrace(ps); ps.close(); response.getOutputStream().close(); } catch (Exception ex) { } } }
public static String getStackTrace(Throwable t) { String stackTrace = null; try { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); t.printStackTrace(pw); pw.close(); sw.close(); stackTrace = sw.getBuffer().toString(); } catch (Exception ex) { } return stackTrace; }
public void log(String msg) { filterConfig.getServletContext().log(msg); }
}
|
'JSP' 카테고리의 다른 글
#8.3 필터링 (대문자를 소문자로 변경) (0) | 2020.05.14 |
---|---|
#9.1 JSP 로깅 (0) | 2020.05.10 |
#8.1 JSP 웹 초기화 (0) | 2020.05.08 |
#7.2 JSP Download 프로젝트 (0) | 2020.05.07 |
#7.1 JSP FileUpload프로젝트 (0) | 2020.05.06 |