创造性地解决复杂问题
我刚刚完成了这学期学生的作业评分。 我不时更改作业。 当前的是一家非常简化的电子商务商店。
主要功能围绕几个屏幕和购物车管理进行:
- 产品详细信息页面主要由产品详细信息组件组成。 可以通过单击“ Cart按钮将一种这样的产品添加到购物Cart
- 产品列表页面汇总了两个产品详细信息组件。 可以通过单击Cart按钮为每个显示的产品添加一个
- 在结帐页面上,针对购物车中的每种产品:
- 一个人可以通过单击+按钮添加一个
- 一个人可以通过单击-按钮删除一个
- 可以通过输入栏设置数量
预期的设计
因为我主要教servlet,所以我希望学生以非常简单的方式来设计应用程序, 例如 :
制图 | 描述 | 转发 |
---|---|---|
| Display the product detail page | |
| Add one to the quantity for product | |
| Display the products list page | |
| Add one to the quantity for product | |
| Display the checkout page | |
| Add one to the quantity for product | |
| Remove one to the quantity for product | |
| Set the quantity to | |
这或多或少是学生设计的。 他们中的大多数人还通过servlet实现了显示和动作。
这也是我可能会在如此简单的项目中完成的工作。 我将通过在相关servlet中注入委托类来解决冗余问题。
过滤器的另一种实现
从Servlet 2.3开始,过滤器是Java EE API的一部分:
过滤器是一个对象,它要么对资源(Servlet或静态内容)的请求,要么对资源的响应进行过滤,或者对两者都执行过滤任务。
为此设计确定的示例是:
- 验证过滤器
- 日志和审核过滤器
- 图像转换滤镜
- 数据压缩过滤器
- 加密过滤器
- 标记化过滤器
- 触发资源访问事件的过滤器
- XSL / T过滤器
- Mime型链式过滤器
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以显示,将过滤器用于动作。
当然,这不是特定于技术的:它适用于其他框架或技术堆栈,唯一的要求是允许使用过滤器。
而这一切都要归功于一群富有创造力的学生。 教学是其自身的奖励。
创造性地解决复杂问题