Servlet&JSP :啤酒网页应用搭建

简介:基于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
若编译出问题请参考文章《20180727:Mac终端下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>

四、分析

  1. 点击提交查询按钮时发出一个HTTP POST请求并携带指定的动作action,容器(Tomcat)在该应用(Beer)的DD中寻找与该动作匹配的servlet,找到后将请求对象request和响应对象response提交给它。
  2. 该指定的ServletBeerSelect.class充当了控制器的角色,它以请求对象中得到表单参数来调用对应的模型类BeerExpert.class 对用户动作进行处理,来产生相应的啤酒建议。
  3. 控制器将模型产生的结果添加到请求对象的属性中去,实例化一个请求分派器 ,委派至视图。
  4. 视图从请求对象中获取相应的属性,将响应页面输出到响应对象中。
  5. 容器将响应页面转发至用户浏览器。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值