简介:基于MVC模式,在Tomcat下引用 servlet-api.jar
完成简单的网页应用。
controller.java
控制器接收用户请求、选择模型、分派视图model.java
模型处理动作请求view.jsp
视图将页面回馈给用户
一、介绍
1.这是一个关于啤酒建议的网页应用,网址为
http://localhost:8080/Beer
2.当用户进入网站时,会让用户选择自己喜欢的啤酒口味
3. 根据用户的口味不同,会返回不同的啤酒建议
二、部署环境
三、搭建
1.编进入应用时的默认页面index.html
(对应上图中的form.html)
<!DOCTYPE html>
<html>
<head>
<title>BeerForm</title>
</head>
<body>
<h1 align="center">Beer Selection</h1>
<form method="POST" action="SelectBeer.do">
<p>Select beer characteristics</p>
Color:
<select name="color" size="1">
<option vlaue="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>
</html>
- 发送HTTP POST请求
method="POST"
- 提交表单数据
input type="SUBMIT"
- 绑定动作
action="SelectBeer.do"
2.声明部署描述文件web.html
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>Ch3 Beer</servlet-name>
<servlet-class>com.example.web.BeerSelect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Ch3 Beer</servlet-name>
<url-pattern>/SelectBeer.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
- 声明默认欢迎页面
<welcome-file>index.html</welcome-file>
- 声明所有的servlet元素
<servlet-name>Ch3 Beer</servlet-name>
- 声明每个servlet要处理的动作请求
<url-pattern>/SelectBeer.do</url-pattern>
/SelectBeer.do 匹配根目录
3.创建控制器类BeerSelect.class
package com.example.web;
import com.example.model.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class BeerSelect extends HttpServlet
{
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException
{
String c = request.getParameter("color");
BeerExpert be = new BeerExpert();
List result = be.getBrands(c); //调用模型
request.setAttribute("styles", result);
RequestDispatcher view = request.getRequestDispatcher("result.jsp"); //请求分派
view.forward(request, response);
}
}
编译:javac -classpath /Users/apple/Library/Abao/tomcat/lib/servlet-api.jar:classes:. -d classes src/com/example/web/BeerSelect.java
4.创建模型类BeerExpert.class
package com.example.model;
import java.util.*;
public class BeerExpert
{
//生成啤酒建议
public List getBrands(String color)
{
List<String> brands = new ArrayList<String>();
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.创建视图result.jsp
<%@ page import="java.util.*" %>
<html>
<body>
<h1 align="center">Beer Recommendations JSP</h1>
<p>
<!-- 输出啤酒建议 -->
<%
List styles = (List) request.getAttribute("styles");
Iterator it = styles.iterator();
while(it.hasNext())
out.println("<br>try: " + it.next());
%>
</body>
</html>
四、分析
- 点击提交查询按钮时发出一个
HTTP POST
请求并携带指定的动作action
,容器(Tomcat)在该应用(Beer)的DD中寻找与该动作匹配的servlet
,找到后将请求对象request
和响应对象response
提交给它。 - 该指定的Servlet
BeerSelect.class
充当了控制器的角色,它以请求对象中得到表单参数来调用对应的模型类BeerExpert.class
对用户动作进行处理,来产生相应的啤酒建议。 - 控制器将视图产生的结果添加到请求对象的属性中去,实例化一个请求分派器 ,委派至视图。
- 视图从请求对象中获取相应的属性,将它输出到响应对象中。
- 容器将响应页面转发至用户浏览器。