JSP实用教程实验七MVC模式

实验七  MVC模式

一、实验目的

1. MVC模式。

2. JSP实现MVC模式。

3. 调试MVC程序实例。

4. 掌握MVC边线横模式的原理,会用javabean+servlet+JSP实现MVC模式编写程序。

二、实验内容

1、教材7.5.1节 等差、等比级数和。

2、教材7.5.2节 点餐。

三、实验步骤

1.等差、等比级数和

① 实验代码

文件:Series_Bean.java

package one;
public class Series_Bean{
   double firstItem;
   double var; 
   int number; 
   double sum; 
   String name="等差/等比";   
   public void setFirstItem(double a){
      firstItem=a;
   }
   public double getFirstItem(){
      return firstItem;
   }
   public void setVar(double b){
      var=b;
   }
   public double getVar(){
      return var;
   }
   public void setNumber(int n){
      number=n;
   }
   public double getNumber(){
      return number;
   }
   public void setSum(double s){
      sum=s;
   }
   public double getSum(){
      return sum;
   }
   public void setName(String na){
      name=na;
   }
   public String getName(){
     return name;
   }
}

文件:ch7_1.jsp

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<jsp:useBean id="seriesData" class ="one.Series_Bean" scope="request"/>
		<style>
			#tom{
				font-family:宋体;font-size:28;color:blue 
			}
		</style>
<HTML>
	<body bgcolor=#FFBBFF>
		<form action="computeSum" id = tom method="post" >
			等差级数求和:
			<br>输入首项:<input type=text id=tom name="firstItem" size=4>
			输入公差(公比):<input type=text id=tom name="var" size=4>
			求和项数:<input type=text id=tom name="number" size=4>
			<input type=submit name = "submit" id = tom value="提交(求等差级数和)" />
			<input type=submit name = "submit" id = tom value="提交(求等比级数和)">
		</form>
		<table border=1 id = tom>
			<tr> 
				<th> 级数的首项</th>
				<th> <jsp:getProperty name="seriesData" property="name"/></th>
				<th> 所求项数</th>
				<th> 求和结果</th>
			</tr>
			<tr>
				<td><jsp:getProperty name="seriesData" property="firstItem"/></td>
				<td><jsp:getProperty name="seriesData" property="var"/></td>
				<td><jsp:getProperty name="seriesData" property="number"/></td>
				<td><jsp:getProperty name="seriesData" property="sum"/></td>
			</tr>
		</table>
	</body>
</HTML>

文件:ComputeSum_Servlet.java

package one;
import one.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ComputeSum_Servlet extends HttpServlet{
   public void init(ServletConfig config) throws ServletException{
      super.init(config);
   }
   public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
      Series_Bean seriesData = new Series_Bean(); 
      request.setCharacterEncoding("utf-8");
      request.setAttribute("seriesData",seriesData);//request bean。
      String mess =request.getParameter("submit");
      String firstItem = request.getParameter("firstItem");
      String var = request.getParameter("var");
      String number = request.getParameter("number");
      if(firstItem.length()==0||var.length()==0||number.length() == 0){
            response.sendRedirect("ch7_1.jsp");
            return;
      }
      if(mess.contains("等差")) {
         compute(firstItem,var,number,seriesData,0);
      }
      else if(mess.contains("等比")) {
         compute(firstItem,var,number,seriesData,1);
      }
      RequestDispatcher dispatcher=
      request.getRequestDispatcher("ch7_1.jsp");
      dispatcher.forward(request,response); 
    } 
    void compute(String firstItem,String var,String number,
                     Series_Bean seriesData,int type){
      double a=Double.parseDouble(firstItem);
      double d=Double.parseDouble(var);
      int n=Integer.parseInt(number);
      seriesData.setFirstItem(a);  
      seriesData.setVar(d);           
      seriesData.setNumber(n);
      double sum=0,item=a;
      int i=1;
      if(type == 0) {
         seriesData.setName("等差级数的公差");
         while(i<=n){   
            sum=sum+item;
            i++;
            item=item+d;  
         }
         seriesData.setSum(sum);
      }
      else if(type == 1){
         seriesData.setName("等比级数的公比");
         while(i<=n){
            sum=sum+item;
            i++;
            item=item*d;  
         }
         seriesData.setSum(sum);
      }
   } 
}

文件:web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app>
    <servlet>
        <servlet-name>computeSum</servlet-name>
        <servlet-class>one.ComputeSum_Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>computeSum</servlet-name>
        <url-pattern>/computeSum</url-pattern>
    </servlet-mapping>
</web-app>

② 运行结果

 

2.点餐

① 实验代码

文件:Food.java

package two;
public class Food implements Comparable<Food>{ 
    String foodName ;
    double price;
    public void setFoodName(String name){
        foodName = name; 
    }
    public String getFoodName(){
        return foodName;
    }
    public void setPrice(double d){
        price = d; 
    }
    public double getPrice(){
        return price; 
    }
    public int compareTo(Food food){
        return (int)(food.getPrice()*1000-price*1000);
    }
}

 文件:MeanBean.java

package two;
import java.util.ArrayList;
import java.util.Collections;
public class MenuBean { 
    String time ;
    String totalPrice;
    ArrayList<Food> foodList;
    public MenuBean(){
        foodList = new ArrayList<Food>();
    }
    public void addFood(Food food){
        foodList.add(food);
        Collections.sort(foodList);
    }
    public void removeFood(int index){
        if(index>=0){
           foodList.remove(index);
           Collections.sort(foodList);
        }
    }
    public String getFoodName(int index) {
        return foodList.get(index).getFoodName();
    }
    public double getPrice(int index) {
        return foodList.get(index).getPrice();
    }
    public int size() {
        return foodList.size();
    }
    public void setTime(String time){
        this.time = time;  
    }
    public String getTime(){
        return time;  
    }
    public String getTotalPrice(){
        double sum = 0;
        for(Food food:foodList){
          sum += food.getPrice();
        }
        totalPrice = String.format("%.2f",sum);
        return totalPrice;
    }
}

 文件:ch7_2.jsp

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
	<jsp:useBean id="menu" class ="two.MenuBean" scope="session"/>
		<style>
			#textStyle{
				font-family:宋体;font-size:36;color:blue 
			}
		</style>
<HTML>
	<body bgcolor=#ffccff>
		<form action="addMenu" id= textStyle method=post>
			输入餐单(每次输入一个消费项目):<br>
			名称:<input type=text name='foodName' id =textStyle value ='剁椒鱼头' size = 8 />
			价格:<input type=text name='price' id =textStyle value ='26.9' size = 8 />
			<br><input type=submit id=textStyle value="添加到餐单">
		</form>
	</body>
</HTML>

文件:ch7_3.jsp

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<jsp:useBean id="menu" class ="two.MenuBean" scope="session"/>
		<style>
		#tom{
			font-family:宋体;font-size:26;color:blue 
		}
		</style>
<HTML>
	<body bgcolor=pink>
		<table border=1> 
			<tr>
				<th id=tom>序号</th><th id=tom>食物名称</th><th id=tom>价格</th>
			<%  
			request.setCharacterEncoding("utf-8");
			String index = request.getParameter("删除");
			if(index!=null){
			menu.removeFood(Integer.parseInt(index));
			}
			for(int i=0;i<menu.size();i++){
			out.print("<tr>");
			out.print("<td id=tom>"+(i+1)+"</td>");
			out.print("<td id=tom>"+menu.getFoodName(i)+"</td>");
			out.print("<td id=tom>"+menu.getPrice(i)+"</td>");
			out.print("<td ><form action ="+"ch7_3.jsp"+" method=post>"); 
			out.print("<input type = hidden name = 删除 value = "+i+" />");
			out.print("<input type = submit  value = 删除该食物 />");
			out.print("</form></td>");
			out.print("</tr>");
			} 
			%> </table>
		<p id = tom>
			餐单总额(共有<%=menu.size()%>道食物):  
			<jsp:getProperty name="menu" property="totalPrice" /><br>
			点餐时间:
			<jsp:getProperty  name="menu" property="time" />
		</p>
		<a id =tom href="ch7_2.jsp">继续点餐</a>
	</body>
</HTML>

文件:HandleMenu_Servlet.java

package two;
import two.Food;
import two.MenuBean;
import java.util.*;
import java.io.*;
import java.time.LocalTime;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleMenu_Servlet extends HttpServlet{
   public void init(ServletConfig config) throws ServletException{
       super.init(config);
   }
   public void service(HttpServletRequest request,HttpServletResponse response)
                       throws ServletException,IOException{
       request.setCharacterEncoding("utf-8");
       MenuBean menu  = null;
       HttpSession session=request.getSession(true);
       menu = (MenuBean)session.getAttribute("menu");
       if(menu == null ){
           menu = new MenuBean();
           session.setAttribute("menu",menu);
       }
       String foodName = request.getParameter("foodName");
       String price = request.getParameter("price"); 
       Food food = new Food();
       if(foodName.length()==0||price.length()==0){
            response.sendRedirect("ch7_2.jsp");
            return;
       }
       food.setFoodName(foodName);
       food.setPrice(Double.parseDouble(price));
       LocalTime dateTime = LocalTime.now();  
       String str = dateTime.toString();
       String time =str.substring(0,str.lastIndexOf("."));
       menu.setTime(time);
       menu.addFood(food);
       response.sendRedirect("ch7_3.jsp");
   }
} 

文件:web.xml

 <servlet>
        <servlet-name>addMenu</servlet-name>
        <servlet-class>two.HandleMenu_Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>addMenu</servlet-name>
        <url-pattern>/addMenu</url-pattern>
    </servlet-mapping>

② 运行结果

四、实验总结

本次实验应用了MVC模式三部分设计,使用了request bean和session bean存储数据,使用servlet处理数据,并将有关数据存储到request bean和session bean,再用jsp页面显示request bean和session bean数据。

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小孙同学1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值