Struts2 에서 확장자 제거하기

Struts2에서 Action의 기본확장자는 action이다.

REST의 관점에서 보면 URL은 Resource를 가리키고 있을 뿐이어서 action이란 접미어가 붙는 것은 restful 하지 않아 보인다.

그래서 struts.properties의 struts.action.extension에 아무것도 할당하지 않으면 간단히 확장자를 제거 할 수 있다.

struts.action.extension=

struts.properties

하지만,

이렇게 하면 welcome-file을 사용할 수 없고, *.jsp, *.gif, *.jpg등 struts action이 아닌 resource들은 접근 할 수도 없다. 그래서 다음과 같이 간단한 필터를 만들어 보았다.

package filters;

import java.io.IOException;

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.http.HttpServletRequest;

import org.apache.struts2.dispatcher.FilterDispatcher;

public class StrutsRedirectFilter implements Filter {

	FilterDispatcher dispatcher = new FilterDispatcher();

	@Override
	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {

		HttpServletRequest request = (HttpServletRequest) req;
		String uri = request.getRequestURI();

		// 확장자가 있는 경우
		if (uri != null
				&& (uri.equals(request.getContextPath().concat("/")) || uri
						.substring(uri.indexOf("/")).indexOf(".") > -1)) {
			chain.doFilter(req, res);
			// 아닌 경우 struts로 넘긴다.
		} else {
			dispatcher.doFilter(req, res, chain);
		}
	}

	@Override
	public void destroy() {
		dispatcher.destroy();
	}

	@Override
	public void init(FilterConfig config) throws ServletException {
		dispatcher.init(config);
	}
}

StrutsRedirectFilter.java

이 필터를 org.apache.struts2.dispatcher.FilterDispatcher 대신 web.xml 에 넣어주면 된다.

<?xml version="1.0"?>
<!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>My Application</display-name>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>filters.StrutsRedirectFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
This entry was posted in Uncategorized. Bookmark the permalink.

One Response to Struts2 에서 확장자 제거하기

  1. 주선 says:

    선배님 안녕하세요 ^^/”
    스트럿츠… 언젠가 볼일이 있을것같아서 북마크 해둡니다.

덧글 남기기

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>