java model初始化_springMVC初始化和流程(一)

一、Spring MVC概述

Spring MVC(指Spring Web MVC)是Spring提供给Web应用的框架设计,MVC框架一般来说由三部分组成:

Model:模型层,一般由java bean完成,主要是进行数据库操作;

View:视图层,用于前端展示,比如jsp、html等;

Controller:控制层,链接前后端,处理用户请求,起着承前启后的作用;

早期的MVC模型:

5191e32222cf0fc65c52783cd253a7a5.png

图一 Model1

8142868fe215d13aa43bf09d22398a84.png

图二 Model2——早起的MVC模型

早期的MVC模型多了一个Servlet组件,首先用户的请求到达Servlet,Servlet组件主要作为控制器,这样Servlet就接收了这个请求,可以通过它来调度Java Bean,来读写数据库的数据,然后将结果放到JSP中,这样就可以获得数据并展现给用户。

98ea87570ddc7dfb37ded08aefeea1c1.png

图三 Spring MVC 架构

图三展示了传统的模型层被差分为业务层(Service)和数据访问层(Dao)。对于Spring MVC而言其最大的特色就是结构松散,比如满足手机端、页面端和平板电脑等各类请求,几乎可以在Spring MVC 中使用各类视图,包括JSON、JSP、XML、PDF等。

二、Spring MVC 组件与流程

Spring MVC的核心在于其流程,这是使用Spring MVC 框架的基础,Srping MVC 是一种基于Servlet的技术,它提供的核心控制组件DispatcherServlet 和相关的组件,并制定了松散的结构,已适应各种灵活的需要。下面看一下Spring MVC 的组件和流程图:

60e3696ebd1bae9dbbbffb05f5fee9d6.png

图四 Spring MVC的组件和流程

从上图中可以看出Spring MVC框架是围绕着DispatcherServlet而工作的,这个类是一个Servlet,在Servlet初始化(调用init方法):

1、首先Spring MVC 会根据配置,获取配置信息,获取URI和处理器Handler之间的映射关系(HandlerMapping),由于处理器上还加入了拦截器,这样开始执行处理器和拦截器组成的执行链,而运行处理器需要一个对应的环境,这样它就有了一个处理器的适配器(HandlerAdapter),通过适配器就能运行对应的处理器及其拦截器。

2、在处理器返回模型和视图给DispacherServlet后,DispatcherServlet就会把对应的视图信息传递给视图解析器(ViewResolver)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给你一些实现这个功能的思路和代码示例。 首先,我们可以使用SpringMVC框架来实现Web应用。在Controller中,我们可以定义一些方法来处理请求和响应。例如,针对查看购物车功能,我们可以定义一个方法来处理查看购物车的请求,并返回购物车信息的响应。代码示例如下: ```java @Controller @RequestMapping("/cart") public class CartController { @Autowired private CartService cartService; @RequestMapping("/view") public String viewCart(Model model) { List<Product> products = cartService.getProductsInCart(); model.addAttribute("products", products); return "cart"; } } ``` 在上面的代码中,我们使用了SpringMVC的注解来定义了一个CartController类,并在其中定义了一个viewCart方法来处理查看购物车的请求。在方法中,我们首先调用了CartService服务类的getProductsInCart方法,获取购物车中的商品信息。然后,我们将商品信息添加到Model对象中,并返回了一个名为"cart"的视图。 接下来,我们可以使用JSP来实现前端展示。例如,我们可以定义一个cart.jsp页面来展示购物车的信息。代码示例如下: ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>购物车</title> </head> <body> <h1>购物车</h1> <table> <thead> <tr> <th>商品编号</th> <th>商品名称</th> <th>单价</th> <th>数量</th> <th>小计</th> </tr> </thead> <tbody> <c:forEach items="${products}" var="product"> <tr> <td>${product.id}</td> <td>${product.name}</td> <td>${product.price}</td> <td>${product.quantity}</td> <td>${product.price * product.quantity}</td> </tr> </c:forEach> </tbody> </table> </body> </html> ``` 在上面的代码中,我们使用了JSTL标签库来遍历购物车中的商品信息,并将商品信息展示在表格中。 接下来,我们可以考虑实现收银台结算功能。我们可以定义一个OrderController类,并在其中定义一个checkout方法来处理收银台结算的请求。代码示例如下: ```java @Controller @RequestMapping("/order") public class OrderController { @Autowired private OrderService orderService; @RequestMapping("/checkout") public String checkout(Model model) { List<Product> products = orderService.getProductsInCart(); double totalAmount = orderService.calculateTotalAmount(products); model.addAttribute("products", products); model.addAttribute("totalAmount", totalAmount); return "checkout"; } } ``` 在上面的代码中,我们使用了SpringMVC的注解来定义了一个OrderController类,并在其中定义了一个checkout方法来处理收银台结算的请求。在方法中,我们首先调用了OrderService服务类的getProductsInCart方法,获取购物车中的商品信息。然后,我们调用了OrderService服务类的calculateTotalAmount方法,计算总金额。最后,我们将商品信息和总金额添加到Model对象中,并返回了一个名为"checkout"的视图。 接下来,我们可以使用JSP来实现收银台页面。例如,我们可以定义一个checkout.jsp页面来展示购物车的信息和总金额。代码示例如下: ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>收银台</title> </head> <body> <h1>收银台</h1> <table> <thead> <tr> <th>商品编号</th> <th>商品名称</th> <th>单价</th> <th>数量</th> <th>小计</th> </tr> </thead> <tbody> <c:forEach items="${products}" var="product"> <tr> <td>${product.id}</td> <td>${product.name}</td> <td>${product.price}</td> <td>${product.quantity}</td> <td>${product.price * product.quantity}</td> </tr> </c:forEach> </tbody> <tfoot> <tr> <td colspan="4">总金额:</td> <td>${totalAmount}</td> </tr> </tfoot> </table> </body> </html> ``` 最后,我们可以考虑实现初始化参数等等功能。我们可以使用Java的反射机制来实现这个功能。例如,我们可以定义一个Product类,并在其中使用注解来定义商品的一些属性。代码示例如下: ```java public class Product { @InitParam(name = "id", value = "0") private int id; @InitParam(name = "name", value = "") private String name; @InitParam(name = "price", value = "0.0") private double price; @InitParam(name = "quantity", value = "0") private int quantity; // 省略getter和setter方法 } ``` 在上面的代码中,我们使用了@InitParam注解来定义商品的一些属性。在注解中,我们指定了属性的名称和默认值。然后,我们可以使用反射机制来获取Product类的信息,并根据注解的定义来设置商品的属性值。代码示例如下: ```java public class ProductInitializer { public static void initialize(Product product) throws IllegalAccessException { Class<Product> clazz = Product.class; Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { InitParam initParam = field.getAnnotation(InitParam.class); if (initParam != null) { field.setAccessible(true); Object value = convertValue(initParam.value(), field.getType()); field.set(product, value); } } } private static Object convertValue(String value, Class<?> type) { if (type == int.class || type == Integer.class) { return Integer.parseInt(value); } else if (type == double.class || type == Double.class) { return Double.parseDouble(value); } else if (type == String.class) { return value; } else { throw new IllegalArgumentException("Unsupported type: " + type); } } } ``` 在上面的代码中,我们定义了一个ProductInitializer类,并在其中定义了一个initialize方法来初始化商品的属性值。在方法中,我们首先获取Product类的信息,然后遍历所有属性,并获取属性上的@InitParam注解。如果注解存在,则使用反射机制来设置属性的值。 最后,我们可以在Controller中调用ProductInitializer类的initialize方法,来初始化商品的属性值。例如,我们可以在CartController中获取商品信息时,调用ProductInitializer类的initialize方法来初始化商品的属性值。代码示例如下: ```java @Controller @RequestMapping("/cart") public class CartController { @Autowired private CartService cartService; @RequestMapping("/view") public String viewCart(Model model) throws IllegalAccessException { List<Product> products = cartService.getProductsInCart(); for (Product product : products) { ProductInitializer.initialize(product); } model.addAttribute("products", products); return "cart"; } } ``` 在上面的代码中,我们在获取购物车中的商品信息时,调用了ProductInitializer类的initialize方法来初始化商品的属性值。 综上所述,我们可以使用SpringMVC框架、JSP和反射机制来实现“手机批发业务-产品选购”页面的主要功能,包括查看购物车、收银台结算、初始化参数等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值