使用Servlet+jsp构建MVC体系结构的Web应用
2016-06-09 14:48
489 查看
使用简单的MVC体系结构构建Web应用
1、客户请求得到form.html页面;2、容器获得form.html页面;
3、容器把这个页面返回给浏览器,用户再在浏览器上回答表单上的问题;
4、浏览器把请求数据发送给容器;
5、容器根据URL查找正确servlet,并把请求传递给这个servlet;
6、servlet调用BeerExpert寻求帮助;
7、这个“专家”类返回一个回答,servlet把这个回答增加到请求对象;
8、servlet把请求转发给JSP;
9、JSP从请求对象得到回答;
10、JSP为容器生成一个页面;
11、容器把这个页面返回给心满意足的用户。
一、工程的目录结构如下图所示:
这里将servlet-api.jar包放到了lib目录下,并构建路径;
二、第一个表单页面的html:form.html
这个HTML很简单,它只包含标题文本,一个下拉列表(用户可以从中选择一种啤酒颜色),另外还有一个提交按钮。<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Beer Selection Page</title> </head> <body> <h1>Beer Selection Page</h1> <form method="post" action="SelectBeer.do"> Select beer characteristics<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> <input type="submit"> </form> </body> </html>
三、在开发环境中创建DD
创建以下XML文档,取名为web.xml。<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <welcome-file-list> <welcome-file>form.html</welcome-file> </welcome-file-list> <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> </web-app>
四、构建模型类
模型可能非常复杂。通常会涉及与遗留数据库的连接,还要调用复杂的业务逻辑。以下就是我们“复杂的”、基于规则的专家系统,可以用来提供啤酒建议。<span style="font-size:14px;">package com.example.model; import java.util.*; public class BeerExpert { public List<String> 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; } }</span><span style="font-size:24px;"> </span>
五、编写控制器servlet的代码
注意,模型只是普通的Java,所以我们会像调用任何其他Java方法一样,先实例化模型类,再调用它的方法!<span style="font-size:14px;">package com.example.web; 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; import com.example.model.BeerExpert; public class BeerSelect extends HttpServlet{ private static final long serialVersionUID = -5212877687087164982L; public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException{ String str2 = request.getParameter("color"); BeerExpert be = new BeerExpert(); List<String> result = be.getBrands(str2); // response.setContentType("text/html"); // PrintWriter out = response.getWriter(); // out.println("Beer Selection Advice<br>"); // Iterator<String> it = result.iterator(); // while(it.hasNext()) { // out.println("<br>try: " + it.next()); // } request.setAttribute("styles", result); RequestDispatcher view = request.getRequestDispatcher("result.jsp"); view.forward(request, response); } }</span><span style="font-size:24px;"> </span>
六、创建提供建议的JSP“视图”:result.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ page import="java.util.*" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Beer V1</title> </head> <body> <h1 align="center">Beer Recommendations JSP</h1> <p> <% List<String> styles = (List<String>)request.getAttribute("styles"); Iterator<String> it = styles.iterator(); while(it.hasNext()) { out.print("<br>try: " + it.next()); } %> </body> </html>七、测试应用
点击提交,跳转到下面的页面:
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- JSP/PHP基于Ajax的分页功能实现
- 开发阶段Jetty运行Jsp报错且响应空白
- jsp简单实现页面之间共享信息的方法
- Apache Web让JSP“动”起来
- C# MVC模式下商品抽奖功能实现
- Zend的MVC机制使用分析(二)
- ASP.NET MVC 4 捆绑和缩小实例介绍
- ASP.NET Mvc开发之查询数据
- ASP.NET MVC中将控制器分离到类库的实现
- asp.net实现在非MVC中使用Razor模板引擎的方法
- ASP.NET MVC中的AJAX应用
- 为ASP.NET MVC及WebApi添加路由优先级
- ASP.NET MVC中图表控件的使用方法
- Asp.net mvc实时生成缩率图到硬盘
- 剖析ASP.NET MVC的DependencyResolver组件
- ASP.NET MVC的四种验证编程方式