Servlet&JSP世界中的MVC:
模型(Servlet)—>包含具体的业务逻辑和状态。换句话说模型知道用什么规则来得到和更新状态。系统中只要这部分与数据库通信。
视图(JSP)—>负责表示方面。他从控制器得到模型的状态(不过不是直接得到;控制器会把模型数据放在视图能找到的一个地方,例如:request.setAttribute(“…”))。另外视图还要获得用户输入,并交给控制器。
控制器(普通Java类)—>从请求获得用户输入,并明确这些输入对模型有什么影响。告诉模型自行更新,并且让视图(JSP)能得到新的模型状态。
1.第一个表单页面的HTML
form.html
<body>
<h1 align="center">Beer Recommendations JSP</h1>
<form method="post" action="../SelectBeer.do">
Select beer charateristics<p>
Color:
<select name="color" size="1">
<option value="light">light</option>
<option value="amber">amber</option>
<option value="brown">brown</option>
<option value="dark">dark</option>
</select>
<br><br>
<center>
<input type="submit"/>
</center>
</form>
</body>
2.部署和测试开始页面
web.xml
<servlet>
<servlet-name>Ch3Beer</servlet-name>
<servlet-class>com.yilong.mvc.web.BeerSelect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Ch3Beer</servlet-name>
<url-pattern>/SelectBeer.do</url-pattern>
</servlet-mapping>
3.控制器Servlet代码
BeerSelect.java
public class BeerSelect extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String c = request.getParameter("color");
BeerExpert be = new BeerExpert();
List result = be.getBrands(c);
request.setAttribute("styles", result);
RequestDispatcher view = request.getRequestDispatcher("MVC/result.jsp");
view.forward(request, response);
}
}
4.构建和测试模型类
BeerExpert.java
public class BeerExpert {
public List getBrands(String color){
List brands = new ArrayList();
if(color.equals("amber")){
brands.add("Jack Amber");
brands.add("Red Moose");
}else{
brands.add("Jail Pale Ale");
brands.add("Gout Stout");
}
return(brands);
}
}
5.创建提供建议的JSP“视图”(可动态的更新原HTML网页)
result.jsp
<body>
<h1 align="center">Beer Recommendations JSP</h1>
<p>
<%
List styles = (List)request.getAttribute("styles");
Iterator it = styles.iterator();
while(it.hasNext()){
out.print("<br>try:"+ it.next());
}
%>
</body>
总结:注意MVC模式下三者之间的联系,M-分发控制 V-页面表现 C-业务处理