【Java.Web】MVC——Filter Displatchに基づくModel 2——例
Filter DisplatchによるModel 2
ServletはModel 2アプリケーションで最も一般的なControllerですが、FilterをControllerとしても使用できます。
しかし、Filterは歓迎ページとして機能しません。Structs 2はFilterをControllerとします。
JSPページはServlet Controllerと同じです。しかし、ServletをControllerとして使うのではなく、Displatch Filterという種類を使っています。
ブラウザでアクセスする前のURL:
ServletはModel 2アプリケーションで最も一般的なControllerですが、FilterをControllerとしても使用できます。
しかし、Filterは歓迎ページとして機能しません。Structs 2はFilterをControllerとします。
JSPページはServlet Controllerと同じです。しかし、ServletをControllerとして使うのではなく、Displatch Filterという種類を使っています。
package com.gof.test.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.gof.test.action.SaveProductAction;
import com.gof.test.bean.Product;
import com.gof.test.bean.ProductForm;
public class DispatcherFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
String uri = ((HttpServletRequest)req).getRequestURI();
int lastIndex = uri.lastIndexOf("/");
String action = uri.substring(lastIndex + 1);
String dispatchUrlString = null;
if (action.equals("product_input")){
dispatchUrlString = "/jsp/controller/ProductForm.jsp";
}else
if (action.equals("product_save")){
ProductForm productForm = new ProductForm();
productForm.setName(req.getParameter("name"));
productForm.setDescription(req.getParameter("description"));
productForm.setPrice(req.getParameter("price"));
Product product = new Product();
product.setName(productForm.getName());
product.setDescription(productForm.getDescription());
try{
product.setPrice(Float.parseFloat(productForm.getPrice()));
}catch (NumberFormatException e){
e.printStackTrace();
}
SaveProductAction saveProductAction = new SaveProductAction();
saveProductAction.save(product);
req.setAttribute("product", product);
dispatchUrlString = "/jsp/controller/ProductDetails.jsp";
}
if (dispatchUrlString != null){
RequestDispatcher rDispatcher = req.getRequestDispatcher(dispatchUrlString);
rDispatcher.forward(req, resp);
}else{
chain.doFilter(req, resp);
}
}
public void destroy() {
// TODO Auto-generated method stub
}
}
このFilterをweb.xmlに登録する:<!-- Filter -->
<filter>
<filter-name>dispatcherfilter</filter-name>
<filter-class>com.gof.test.filter.DispatcherFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>dispatcherfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
プロジェクトではないに対してinputとproductsaveのactionは、filterChain.dofilter()を呼び出して次の流れを継続する必要があります。ブラウザでアクセスする前のURL:
http://localhost:8080/base-webapp/product_input