创造性地解决复杂问题_创造性地使用过滤器

创造性地解决复杂问题

我刚刚完成了这学期学生的作业评分。 我不时更改作业。 当前的是一家非常简化的电子商务商店。

主要功能围绕几个屏幕和购物车管理进行:

  • 产品详细信息页面主要由产品详细信息组件组成。 可以通过单击“ Cart按钮将一种这样的产品添加到购物Cart

    产品明细

  • 产品列表页面汇总了两个产品详细信息组件。 可以通过单击Cart按钮为每个显示的产品添加一个
  • 在结帐页面上,针对购物车中的每种产品:
    • 一个人可以通过单击+按钮添加一个
    • 一个人可以通过单击-按钮删除一个
    • 可以通过输入栏设置数量

      退房

预期的设计

因为我主要教servlet,所以我希望学生以非常简单的方式来设计应用程序, 例如

制图 描述 转发

/product?id=x

Display the product detail page

/product.jsp

/product/add?id=x

Add one to the quantity for product x

/product?id=x

/products

Display the products list page

/products.jsp

/products/add?id=x

Add one to the quantity for product x

/products

/checkout

Display the checkout page

/checkout.jsp

/checkout/add?id=x

Add one to the quantity for product x

/checkout

/checkout/remove?id=x

Remove one to the quantity for product x

/checkout

/checkout/set?id=x&qty=y

Set the quantity to y for product x

/checkout

这或多或少是学生设计的。 他们中的大多数人还通过servlet实现了显示动作。

这也是我可能会在如此简单的项目中完成的工作。 我将通过在相关servlet中注入委托类来解决冗余问题。

过滤器的另一种实现

从Servlet 2.3开始,过滤器是Java EE API的一部分:

过滤器是一个对象,它要么对资源(Servlet或静态内容)的请求,要么对资源的响应进行过滤,或者对两者都执行过滤任务。

为此设计确定的示例是:

  • 验证过滤器
  • 日志和审核过滤器
  • 图像转换滤镜
  • 数据压缩过滤器
  • 加密过滤器
  • 标记化过滤器
  • 触发资源访问事件的过滤器
  • XSL / T过滤器
  • Mime型链式过滤器
— Javadoc
https://docs.oracle.com/javaee/6/api/javax/servlet/Filter.html

过滤器的要旨是它们用于预处理或后处理。 尽管过滤器从根本上没有什么困难,但只有少数程序员可以使用它们(右)。 因此,当一群学生使用过滤器进行操作,并使用servlet进行显示时,我最初感到很惊讶,

@WebServlet("/products/*")
publicclassProductsPageextendsHttpServlet{...}

@WebServlet("/product/*")
publicclassProductPageextendsHttpServlet{...}

@WebServlet("/checkout/*")
publicclassCheckoutPageextendsHttpServlet{...}

@WebFilter(urlPatterns={"/products/add","/product/add","/checkout/add"})
publicclassAddProductimplementsFilter{...}

@WebFilter(urlPatterns={"/products/remove","/product/remove","/checkout/remove"})
publicclassRemoveProductimplementsFilter{...}

@WebFilter(urlPatterns={"/products/set","/product/set","/checkout/set"})
publicclassSetProductQuantityimplementsFilter{...}

结论

一开始,我有点惊讶,甚至质疑这种设计。 但是,现在,我认为这是很棒的,创造性地使用了过滤器:分配servlet以显示,将过滤器用于动作。

当然,这不是特定于技术的:它适用于其他框架或技术堆栈,唯一的要求是允许使用过滤器。

而这一切都要归功于一群富有创造力的学生。 教学是其自身的奖励。

翻译自: https://blog.frankel.ch/creative-use-filters/

创造性地解决复杂问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值