TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
这是一个简单的web应用,可在JSP教学中展示mvc模式是如何运作的。 这个应用有两个主要任务:
1、列出全部顾客的列表
2、选择某个顾客时,列出其信息
运行图:
一、模型:Customer类和CustomerManager完成应用业务逻辑的建模
1、Customer类作为一个javaBean,有四个性质,分别表示顾客的标识,顾客的名,顾客的姓和地址,是对真实世界的顾客概念的建模.
- package com.wrox.begjsp.ch17.mvc;
- public class Customer
- {
- private String _id;
- private String _firstName;
- private String _lastName;
- private String _address;
- public Customer(String id, String firstName, String lastName, String address)
- {
- _id = id;
- _firstName = firstName;
- _lastName = lastName;
- _address = address;
- }
- public String getAddress()
- {
- return _address;
- }
- public void setAddress(String address)
- {
- _address = address;
- }
- public String getFirstName()
- {
- return _firstName;
- }
- public void setFirstName(String firstName)
- {
- _firstName = firstName;
- }
- public String getLastName()
- {
- return _lastName;
- }
- public void setLastName(String lastName)
- {
- _lastName = lastName;
- }
- public String getId()
- {
- return _id;
- }
- public void set_id(String id)
- {
- _id = id;
- }
- }
复制代码 2、web应用可以采用不同的方法来存储信息,最常用的方法是存储在一个数据库中,这个简单的例子没有使用数据库,而是通过CustomerManager类来模拟这种访问,作为模型层的扩展。
- package com.wrox.begjsp.ch17.mvc;
- import java.util.ArrayList;
- import java.util.List;
- public class CustomerManager
- {
- public List getCustomers()
- {
- return generateCustomers();
- }
- private List generateCustomers()
- {
- List rv = new ArrayList();
- for (int i = 0; i < 10; i++)
- {
- rv.add(getCustomer(String.valueOf(i)));
- }
- return rv;
- }
- public Customer getCustomer(String id)
- {
- return new Customer(id, id + "First", "Last" + id,
- "123 Caroline Road Fooville");
- }
- }
复制代码 此类提供了getCustomers()方法和getCustomer(String id)方法,分别返回顾客的列表(List对象)和某一顾客, 模拟数据库访问,从中可以看出,模型层关注的是当前的业务问题,而不是关心如何在视图中显示。 二、控制器
这个应用中扮演控制器角色的是SimpleController,它收到浏览器的请求后,访问模型层得到业务数据,然后把它们“分配”到适当的视图。SimpleController是一个Servlet,执行SimpleController时需要一个参数来指出它要完成什么工作,在Web应用中,这种概念通常称为动作(action),另外SimpleController要在web.xml文件中注册,如下所示:
<servlet>
<servlet-name>controller</servlet-name>
<servlet-class>com.wrox.begjsp.ch17.mvc.SimpleController</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>controller</servlet-name>
<url-pattern>/controller</url-pattern>
</servlet-mapping> 这样可以有如下的调用:http://localhost:8080/mvc/controller?action=displaylist- SimpleController类的源码如下:
- package com.wrox.begjsp.ch17.mvc;
- import java.io.IOException;
- import java.util.List;
- import javax.servlet.RequestDispatcher;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class SimpleController extends HttpServlet
- {
- protected void doPost(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException
- {
- String action = request.getParameter("action");
- String jspPage = "/index.jsp";
- if ((action == null) || (action.length() < 1))
- {
- action = "default";
- }
- if ("default".equals(action))
- {
- jspPage = "/index.jsp";
- }
- else if ("displaylist".equals(action))
- {
- CustomerManager manager = new CustomerManager();
- List customers = manager.getCustomers();
- request.setAttribute("customers", customers);
- jspPage = "/displayList.jsp";
- }
- else if ("displaycustomer".equals(action))
- {
- String id = request.getParameter("id");
- CustomerManager manager = new CustomerManager();
- Customer customer = manager.getCustomer(id);
- request.setAttribute("customer", customer);
- jspPage = "/displayCustomer.jsp";
- }
- else if ("editcustomer".equals(action))
- {
- String id = request.getParameter("id");
- CustomerManager manager = new CustomerManager();
- Customer customer = manager.getCustomer(id);
- request.setAttribute("customer", customer);
- jspPage = "/editCustomer.jsp";
- }
- dispatch(jspPage, request, response);
- }
- protected void dispatch(String jsp, HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException
- {
- if (jsp != null)
- {
- RequestDispatcher rd = request.getRequestDispatcher(jsp);
- rd.forward(request, response);
- }
- }
- protected void doGet(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException
- {
- doPost(request, response);
- }
- }
复制代码 displaylist动作只是SimpleController中实现的四个动作之一,displaylist动作首先实例化一个 CustomerManager对象,从而得到这个动作所需要的数据并将其加到请求中,最后,这个动作指定一个适当的路径,转到相应的视图页面:/displayList.jsp。 三、视图:displayList.jsp
视图只负责显示控制器传过来的数据。代码如下: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <HTML>
<head>
<title>Display Customer List</title>
</head>
<body> <table cellspacing="3" cellpadding="3" border="1" width="500">
<tr>
<td colspan="4"><b>Customer List</b></td>
</tr>
<tr>
<td><b>Id</b></td>
<td><b>First Name</b></td>
<td><b>Last Name</b></td>
<td><b>Address</b></td>
</tr>
<c:forEach var="customer" items="">
<tr>
<td>
<a href="controller?action=displaycustomer&id="> </a>
</td>
<td></td>
<td></td>
<td></td>
</tr>
</c:forEach>
</table>
</body>
</html> 四、其它的文件和视图页面请下载。
源码下载:http://file.javaxxz.com/2014/10/28/235715937.zip |
|