博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java.Web】MVC —— 基于Filter Dispatcher的Model2 —— 示例
阅读量:4007 次
发布时间:2019-05-24

本文共 2626 字,大约阅读时间需要 8 分钟。

基于Filter Dispatcher的Model2

虽然Servlet是Model2应用程序最常用的Controller,但也可以使用Filter作为Controller。

但是Filter无权充当欢迎页面。Structs2用Filter作为Controller。

JSP页面与Servlet Controller中一样;但它不是使用Servlet作为Controller,而是用了一个名为DispatcherFilter的类:

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	}}

在web.xml中注册这个Filter:

dispatcherfilter
com.gof.test.filter.DispatcherFilter
dispatcherfilter
/*

对于不是 product_input 和 product_save 的action,需要调用filterChain.doFilter()方法继续进行下面的流程

在浏览器中访问之前的URL:

http://localhost:8080/base-webapp/product_input

转载地址:http://xxwfi.baihongyu.com/

你可能感兴趣的文章
No.175 - LeetCode1306
查看>>
No.176 - LeetCode1309
查看>>
FE:http状态码
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
mac:移动python包路径
查看>>
mysql:sql create database新建utf8mb4 数据库
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql alter table 修改列属性的字符集
查看>>
mysql:sql drop table (删除表)
查看>>
mysql:sql truncate (清除表数据)
查看>>
scrapy:xpath string(.)非常注意问题
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
yuv420 format
查看>>
单纯的把Y通道提取出来能正确显示出灰度图来为什么我的Qt就显示不出来呢转换有问题呀?
查看>>
YUV420只绘制Y通道
查看>>
yuv420 还原为RGB图像
查看>>
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt5 everywhere 编译summary
查看>>