我的Spring MVC第一个应用 (最终版)
项目结构图:
代码如下:
Product
package com.mstf.bean; import java.io.Serializable; /** * Product类,封装了一些信息,包含三个属性 * @author wangzheng * */ public class Product implements Serializable { private static final long serialVersionUID = 1L; 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
package com.mstf.bean.form; /** * ProductForm是表单类 * 作用:当数据校验失败时,用于保存和展示用户在原始表单的输入 * @author wangzheng * */ 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; } }
InputProductController
package com.mstf.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class InputProductController implements Controller { private static final Log logger=LogFactory.getLog(InputProductController.class); /** * 返回一个ModelAndView,包含视图,且没有模型,所有直接转发 */ @Override public ModelAndView handleRequest(HttpServletRequest req,HttpServletResponse resp) throws Exception { logger.info("进入handleRequest成功"); return new ModelAndView("ProductForm"); } }
SaveProductController
package com.mstf.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import com.mstf.bean.Product; import com.mstf.bean.form.ProductForm; public class SaveProductController implements Controller { private static final Log logger=LogFactory.getLog(InputProductController.class); @Override public ModelAndView handleRequest(HttpServletRequest req,HttpServletResponse resp) throws Exception { req.setCharacterEncoding("UTF-8"); //转码 resp.setCharacterEncoding("UTF-8"); logger.info("进入SaveProductController成功"); // 构建一个ProductForm表单对象 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 (Exception e) { e.printStackTrace(); } return new ModelAndView("ProductDetails", "product",product); } }
springmvc-config.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean name="/product_input.action" class="com.mstf.controller.InputProductController"/> <bean name="/product_save.action" class="com.mstf.controller.SaveProductController"/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/config/springmvc-config.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> </web-app>
ProductDetails.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>详情</title> <style type="text/css">@IMPORT url("css/main.css");</style> </head> <body> <div id="global"> <h4>产品已保存</h4> <p> <h5>详细列表:</h5> 名称: ${product.name}<br> 简介: ${product.description}<br> 价格: ¥${product.price} </p> </div> </body> </html>
ProductForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>添加</title> <style type="text/css">@IMPORT url("css/main.css");</style> </head> <body> <div id="global"> <form action="product_save.action" method="post"> <fieldset> <legend>添加:</legend> <p> <label for="name">名称: </label> <input type="text" id="name" name="name" tabindex="1"> </p> <p> <label for="description">简介: </label> <input type="text" id="description" name="description" tabindex="2"> </p> <p> <label for="price">价格: </label> <input type="text" id="price" name="price" tabindex="3"> </p> <p id="buttons"> <input id="reset" type="reset" tabindex="4"> <input id="submit" type="submit" tabindex="5" value="添加"> </p> </fieldset> </form> </div> </body> </html>
我们有两个方法来进行软件设计:一个是让其足够的简单以至于让BUG无法藏身;另一个就是让其足够的复杂,让人找不到BUG。前者更难一些。