运行 ont lec 逻辑 orm 得到 例子 xmlns
MVC 大家不陌生,包含模型(Model)、视图(View)、控制器(Controller),其中模型用于基本业务逻辑的实现,视图用于响应结果的表示,控制器用于模型控制和请求分派。先放上一张介绍 MVC 组件和功能的图,可以了解三个组件的关系与职能:
Servlet 运行在容器(Tomcat)中,容器允许一个组件调用另一个组件。下图是《Head First Servlet&JSP》中推荐啤酒的例子,实现 MVC 的基本思想,其中 Servlet 为控制器,调用模型并得到结果信息,保存到请求对象中,然后将请求分派给 JSP。
MVC 调用过程:
客户端可以选择啤酒特征中的颜色作为条件进行查询,如下图:
代码实现如下,通过表单 form 声明以 POST 方式提交请求数据,并由 SelectBeer.do 处理:
- 1 <html>
- 2 <body>
- 3 <h1 align = "center">Beer Selection Page</h1>
- 4 <form method = "POST"
- 5 action = "SelectBeer.do">
- 6Select beer characteristics<p>
- 7 Color:
- 8 <select name = "color" size = "1">
- 9 <option value = "light">light</option>
- 10 <option value = "amber">amber</option>
- 11 <option value = "brown">brown</option>
- 12 <option value = "dark">dark</option>
- 13 </select>
- 14 <br><br>
- 15 <center>
- 16 <input type = "SUBMIT">
- 17 </center>
- 18 </form>
- 19 </body>
- 20 </html>
- 1 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- 3 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
- 4 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
- 5 version="3.1"
- 6 metadata-complete="true">
- 7
- 8 <servlet>
- 9 <servlet-name>Ch3 Beer</servlet-name>
- 10 <servlet-class>com.example.web.BeerSelect</servlet-class>
- 11 </servlet>
- 12 <servlet-mapping>
- 13 <servlet-name>Ch3 Beer</servlet-name>
- 14 <url-pattern>/SelectBeer.do</url-pattern>
- 15 </servlet-mapping>
- 16 </web-app>
一个 Servlet 对应三个名字:URL 名、部署名和完全限定名。其中 URL 名是面向客户端的,由客户端进行调用;布署名是部署服务时秘密的内部名,可随意定义;完全限定名是对应真实 Servlet。他们通过 <servlet> 和 <servlet-mapping> 进行映射和声明。上边 URL 为 "/SelectBeer.do",部署名为 Ch3 Beer,安全限定名为 com.example.web.BeerSelect。
- 1 package com.example.web;
- 2
- 3 importjavax.servlet.*;
- 4 importjavax.servlet.http.*;
- 5 importjava.io.*;
- 6 importjava.util.*;
- 7 importcom.example.model.*;
- 8
- 9 public classBeerSelectextends HttpServlet{
- 10
- 11 public voiddoPost(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException{
- 12
- 13String c = request.getParameter("color");
- 14BeerExport beerExport =new BeerExport();
- 15List result = beerExport.getBrands(c);
- 16
- 17request.setAttribute("styles",result);
- 18
- 19RequestDispatcher view = request.getRequestDispatcher("result.jsp");
- 20 view.forward(request,response);
- 21 }
- 22}
BeerServlet 继承自 HttpServlet,可以接收 HTTP 请求。重写 doPost 方法接收表单数据、调用模型获取结果、将结果封装到请求对象中,并通过 "请求分派" 调用 result.jsp,生成页面返回。
- 1 package com.example.model;
- 2 3 import java.util. * ;
- 4 5 public class BeerExport {
- 6 7 public List getBrands(String color) {
- 8 List brands = new ArrayList < >();
- 9
- switch (color) {
- 10
- case "amber":
- 11 brands.add("Jack Amber");
- 12 brands.add("Red Moose");
- 13
- break;
- 14
- default:
- 15 brands.add("Jail Pale Ale");
- 16 brands.add("Gout Stout");
- 17
- break;
- 18
- }
- 19
- return brands;
- 20
- }
- 21
- }
模型就是普通类,实现具体业务逻辑。
- 1<%@ pageimport= "java.util.*" %> 2 3 4
- Beer Recommendations JSP
- 5 6<% 7List brands = (List)request.getAttribute("styles");
- 8Iterator it = brands.iterator();
- 9 while(it.hasNext()){
- 10out.print("
- try: "+it.next());
- 11 }
- 12%>1314
JSP 是另一种 Servlet,只是将原来写在 Servlet 中的 HTML 抽离出来,在第一次请求到来时转换为 Servlet 进行实例化。其将调用请求对象中的模型返回结果,生成页面。
其中,http://localhost:8080/Beer-v1/SelectBeer.do 中,Beer-v1 是 Web 应用上下文的根。
简单 MVC 理解与实现
来源: http://www.bubuko.com/infodetail-2148892.html