MVC概述:
M:modal,是一个模型,比如一瓶啤酒,需要有商标.在选择啤酒时,给定一个想要的颜色的酒,可以给出该颜色酒的品牌
V:view,视图.
C:controler,处理业务逻辑的地方,获得view中提交的酒的颜色,调用M获得建议的酒种类,将其转交至view中显示(也可以直接显示,不使用view).
设计过程:
1.构造一个表单,可以从其中获取客户需要的酒的颜色.
1 <!--BeerForm.html--> 2 <html> 3 <head> 4 <title>beer select</title> 5 </head> 6 <body> 7 <form action="SelectBeer.do" method="post"> 8 <p>Select beer characteristics</p> 9 Color: 10 <select name="color" size="1"> 11 <option value="light">light</option> 12 <option value="amber">amber</option> 13 <option value="brown">brown</option> 14 <option value="dark">dark</option> 15 </select> 16 <input type="submit" value="submit"> 17 </form> 18 </body> 19 </html>
2.构造一个知道各种酒颜色的大师类,可以通过提供的颜色,给出建议.
1 package com.slowalker.modal; 2 3 import java.util.*; 4 5 public class BeerExpert { 6 public List<String> getBrands(String color) { 7 List<String> brands = new ArrayList<String>(); 8 if(color.equals("amber")) { 9 brands.add("Jack Amber"); 10 brands.add("Red Moose"); 11 }else { 12 brands.add("Jail Pale Ale"); 13 brands.add("Gout Stout"); 14 } 15 return brands; 16 } 17 }
3.构造一个servlet处理主要业务逻辑,从表单中获取需要的酒的颜色,根据这种颜色从大师的到相应的建议,将建议反馈到一个view中,
1 package com.slowalker; 2 3 import com.slowalker.modal.*; 4 import java.util.*; 5 import java.io.IOException; 6 import java.io.PrintWriter; 7 8 import javax.servlet.RequestDispatcher; 9 import javax.servlet.ServletException; 10 import javax.servlet.annotation.WebServlet; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 15 /** 16 * Servlet implementation class BeerSelect 17 */ 18 @WebServlet(name="/BeerSelect", urlPatterns= {"/SelectBeer.do"}) 19 public class BeerSelect extends HttpServlet { 20 private static final long serialVersionUID = 1L; 21 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 22 23 String c = request.getParameter("color"); 24 BeerExpert be = new BeerExpert(); 25 List result = be.getBrands(c); 26 request.setAttribute("styles", result); 27 RequestDispatcher view = request.getRequestDispatcher("BeerForm.jsp"); 28 view.forward(request, response); 29 30 /*//使用BeerExpert模型,但是不使用MVC结构中的view 31 String c = request.getParameter("color"); 32 BeerExpert be = new BeerExpert(); 33 List<String> result = be.getBrands(c); 34 response.setContentType("text/html"); 35 PrintWriter pw = response.getWriter(); 36 pw.println("Beer Selection Advice<br>"); 37 38 Iterator it = result.iterator(); 39 while(it.hasNext()) { 40 pw.println("<br>try : " + it.next()); 41 } 42 */ 43 44 /*//不使用BeerExpert模型 45 response.setContentType("text/html"); 46 PrintWriter pw = response.getWriter(); 47 pw.println("Bear Selection Advice<br>"); 48 String c = request.getParameter("color"); 49 pw.println("<br>Got beer color " + c); 50 */ 51 } 52 53 }
4.根据servlet提供的值,将其显示在view中.
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ page import="java.util.*" %> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>Insert title here</title> 9 </head> 10 <body> 11 <h1 align="center">Beer Recommendations</h1> 12 <p> 13 <% 14 List styles = (List)request.getAttribute("styles"); 15 Iterator it = styles.iterator(); 16 while(it.hasNext()){ 17 out.println("<br>try: " + it.next()); 18 } 19 %> 20 </p> 21 </body> 22 </html>