Servlet的Model2模型详解及简单购物车的实现
来源:互联网 发布:发卡平台源码2016免费 编辑:程序博客网 时间:2024/06/05 15:01
Java Web应用程序设计中使用了两个模型,简称Model1和Model2
Model1只适用于非常小型的应用程序,我们建议对所有程序都使用Model2
1,Model2概述:
Model2基于MVC(model-view-controller)设计模式
模型Model负责封装应用程序的数据和业务逻辑
使用POJO,即简单的java对象。许多人用javaBean来保存模型对象的状态,并将业务逻辑转移到一个Action类中
javaBean必须有一个午餐构造器,以及用于访问属性的set/get方法,还必须是可序列化的
视图view负责应用程序的显示 一般用JSP页面来显示
在JS页面中,利用EL表达式和定制标签来显示值
controller负责接收用户的输入,并命令view和model做出相应的修改
Spring MVC这类框架是用Servlet Controller ;Struct2,则是使用过滤器
在Model2,每一个HTTP请求都必须被定向到控制器中,请求的URI(Uniform Request Identifier)告诉控制器调用哪一个action
例如:
想让程序发送一个Add Product表单,要使用URI: http://domain/appName/product_input
想要应用程序保存一项产品,要使用:http://domain/appName/product_save
它还会将模型对象保存在一个可以通过View访问到的地方并通过View显示出来
2.下面通过一个购物实例来帮助大家熟悉Model2模型
首先创建一个Product类
import java.io.Serializable;public class Product implements Serializable {private static final long serialVersionUID=748392348L;private String name;private String description;private float price;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;
}}
ProductForm类
Form类被映射到HTML表单,用于验证HTML表单输入的数据是否符合要求
第二用途是保存用户的输入,用于验证失败时在他的原始表单中重新显示出来,让用户知道输入错在哪
public class ProductForm {private String name;private String description;private String price;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public String getPrice() {return price;}public void setPrice(String price) {this.price = price;}}
ColltrollerServlet类 就是控制器
判断请求URI的地址来调用适用的action以及View
import java.io.IOException;import java.util.List;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet(name="ControllerServlet",urlPatterns={"/product_input","/product_save"})public class ControllerServlet extends HttpServlet {private static final long serialVersionUID=98279L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// TODO Auto-generated method stubprocess(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// TODO Auto-generated method stubprocess(req,resp);}private void process(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubString uri=req.getRequestURI();int lastIndex=uri.lastIndexOf("/");String action=uri.substring(lastIndex+1);String dispatchUrl=null;if(action.equals("product_input")){//no action class,there is nothing to be donedispatchUrl="/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"));//validate ProductFormProductValidator productValidator=new ProductValidator();List<String> errors=productValidator.validate(productForm);if(errors.isEmpty()){//create Product from ProductFormProduct product=new Product();product.setName(productForm.getName());product.setDescription(productForm.getDescription());product.setPrice(Float.parseFloat(productForm.getPrice()));//no validation error ,execute action methodSaveProduct saveProduct=new SaveProduct();saveProduct.save(product);//store model in a scope variable for the ProductDetails.jspreq.setAttribute("product", product);dispatchUrl="/ProductDetails.jsp";}else{req.setAttribute("errors", errors);req.setAttribute("form", productForm);dispatchUrl="/ProductForm.jsp";}}//forward to a viewif(dispatchUrl!=null){ RequestDispatcher rd=req.getRequestDispatcher(dispatchUrl); rd.forward(req, resp);}}}
SaveProductAction类,负责将产品保存到存储设备中,比如数据库
public class SaveProduct {public void save(Product product){//insert Product to the database}}
View 视图
ProductDetails.jsp页面用于显示通过验证的产品信息
<body> <div id="global"><h4>The product has been saved</h4> <p> <h5>Details:</h5> Product Name:${product.name }<br/> Description: ${product.description }<br> Price: ${product.price }<br> </p></div><br> </body>
并且还有显示错误信息,以及重新显示无效的值的功能
<body> <dir id="global"> <h3>Add a product</h3> <c if test="${requestScope.errors!=null }"> <p id="errors">Error(s)!<ul> <li>${requestScope.errors[0]}</li> <li>${requestScope.errors[1]}</li> </ul></p> </c> <form method="post" action="product_save"> <table> <tr> <td>Product Name:</td> <td><input type="text" name="name" value="${form.name }"></td> </tr> <tr> <td>Description:</td> <td><input type="text" name="description" value="${form.description}"></td> </tr> <tr> <td>Price:</td> <td><input type="text" name="price" value="${form.price }"></td> </tr> <tr><td><input type="reset"></td> <td><input type="submit" value="Add Product"></td></tr> </table></form> </dir><br> </body>
验证器
在执行Action前,输入验证是一个重要的步骤
ProductValidator用于检验用户输入是否符合标准
import java.util.ArrayList;import java.util.List;public class ProductValidator {public List<String> validate(ProductForm productForm){List<String> errors=new ArrayList<String>();String name=productForm.getName();if(name==null||name.trim().isEmpty()){errors.add("Product must a name");}String price=productForm.getPrice();if(price==null||price.trim().isEmpty()){errors.add("Product must a price");}else{try{Float.parseFloat(price);}catch(NumberFormatException e){errors.add("Invalid price value");}}return errors;}}
下面通过 http://localhost:8080/app/product_input来测试
测试结果
- Servlet的Model2模型详解及简单购物车的实现
- jsp+servlet+javabean 实现的简单网上购物车
- 简单购物车的实现
- 实现简单的购物车
- 购物车的简单实现
- 购物车的简单实现
- 购物车的简单实现
- 简单购物车的实现
- 购物车的简单实现
- 购物车的实现(jsp+servlet)
- 用servlet实现一个简单的购物车程序
- Servlet+jsp实现简单购物车
- jsp课程(7)---jsp+servlet+javabean 实现的简单网上购物车
- Servlet自学第25讲:Session实例—简单购物车的实现
- 购物网站中购物车的简单实现
- session实现简单的购物车
- python实现简单的购物车
- Listview购物车的简单实现
- 谈谈我对Builder建造者模式的想法
- 常见面试之机器学习算法思想简单梳理
- SDNU 1490.Problem_H Miller_Rabin算法判断素数
- 易忘点汇总
- Oracle6
- Servlet的Model2模型详解及简单购物车的实现
- 白百何出轨了,尼玛,陈羽凡版特写Bug
- 【java】<< 、>>、 <<<移位运算符
- pr视频剪辑
- Android Studio Databinding在xml中使用中文报错
- 等待定时器内核对象
- 吃屎也要吃明明白白的屎——两篇检讨的启示
- 四 : LinkedBlockingQueue 链阻塞队列
- fl2440添加USB驱动