'Struts'에 해당되는 글 1건
- 2008/09/11 Struts2 에서 확장자 제거하기
Struts2에서 Action의 기본확장자는 action이다.
REST의 관점에서 보면 URL은 Resource를 가리키고 있을 뿐이어서 action이란 접미어가 붙는 것은 restful 하지 않아 보인다.
그래서 struts.properties의 struts.action.extension에 아무것도 할당하지 않으면 간단히 확장자를 제거 할 수 있다.
하지만, 이렇게 하면 welcome-file을 사용할 수 없고, *.jsp, *.gif, *.jpg등 struts action이 아닌 resource들은 접근 할 수도 없다. 그래서 다음과 같이 간단한 필터를 만들어 보았다.
이 필터를 org.apache.struts2.dispatcher.FilterDispatcher 대신 web.xml 에 넣어주면 된다.
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);
- }
- }
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>
출처 : http://blog.fguy.com/19

Prev
Rss Feed