MVC模式计算一元二次方程的根及梯形面积

一、实验目的

本实验的目的是掌握在MVC模式中怎样使用scope是request的bean及scope是session的bean。

二、实验内容

实验6-1:

视图:提供两个JSP页面,一个页面使得用户可以输入一元二次方程的系数;另一个页面可以显示一元二次方程的系数和根。
数据模型:提供的Javabean负责刻画一元二次方程,即可以存储一元二次方程的系数以及方程的根,提供简单的获取数据和修改数据的方法。
控制器:负责计算一元二次方程的根,然后将有关数据存储到Javabean数据模型中,然后用转发的方式请求视图中负责显示数据的JSP页面显示Javabean数据模型中的数据。

实验6-2:

视图:提供一个JSP页面,该页面使得用户可以输人梯形的上底、下底和高,并能显示梯形的上底、下底和高以及面积。
数据模型:提供的Javabean负责刻画梯形,即可以存储梯形的有关数据,提供简单的获取数据和修改数据的方法。
控制器:负责计算梯形的面积,然后将有关数据存储到Javabean数据模型中,然后用转发或重定向的方式请求视图中负责显示数据的JSP页面显示Javabean数据模型中的数据。

三、参考代码

实验6-1:

Web.xml添加映射代码:

 <servlet>
	    <servlet-name>handle</servlet-name>
	    <servlet-class>myservlet.control.HandleData</servlet-class>
   </servlet>
   <servlet-mapping>
      <servlet-name>handle</servlet-name>
      <url-pattern>/handleData</url-pattern>
   </servlet-mapping>

Equation.java

 package mybean.data;

public class Equation
 {  double a,b,c;
    String rootOne,rootTwo;
    boolean squareEquation;
    public void setA(double a)
    { this.a=a;
    }
    public double getA()
    {  return a;
    }
    public void setB(double b)
    {  this.b=b;
    }
    public double getB()
    {  return b;
    }
    public void setC(double c)
    {  this.c=c;
    }
    public double getC()
    {  return c;
    }
    public void setRootOne(String root)
    { rootOne=root;
    }
    public String getRootOne()
    {  return rootOne;
    }
    public void setRootTwo(String root)
    { rootTwo=root;
    }
    public String getRootTwo()
    {  return rootTwo;
    }
    public void setIsSquareEquation(boolean b)
    { squareEquation=b;
    }
    public boolean getIsSquareEquation()
    {  return squareEquation;
    }
 }

Input.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<HTML><BODY ><Font size=2>
 <FORM action="handleData" Method="post" >
   <BR>输入一元二次方程的系数:
    <BR> 二次项系数a:<Input type=text name="a" size=4>
         一次项系数b:<Input type=text name="b" size=4>
         常数项c:<Input type=text name="c" size=4>
    <Input type=submit value="提交">
  </FORM>
 </Font></BODY></HTML>

Show.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="mybean.data.*"%> 
<!DOCTYPE html>

 <jsp:useBean id="equation" type="mybean.data.Equation" scope="request"/>
 <HTML><BODY ><Font size=2>
            一元二次方程的系数是:
<BR> 二次项系数:<jsp:getProperty name="equation"  property="a"/>
                一次项系数:<jsp:getProperty  name="equation" property="b"/>
                 常数项:<jsp:getProperty name="equation" property="c"/>
<BR>是一元二次方程吗?<jsp:getProperty name="equation" property="isSquareEquation"/>
<BR>方程的两个根是:<jsp:getProperty name="equation" property="rootOne"/>,
<jsp:getProperty name="equation" property="rootTwo"/>
</FONT></BODY></HTML>

HandleData.java

package myservlet.control;

import mybean.data.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleData extends HttpServlet
 {  public void init(ServletConfig config) throws ServletException
     {super.init(config);
     }
    public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
     {   Equation equ=new Equation();  //创建Javabean对象
         request.setAttribute("equation",equ);// 将equ存储到HttpServletRequest对象中
         double a=Double.parseDouble(request.getParameter("a"));
         double b=Double.parseDouble(request.getParameter("b"));
         double c=Double.parseDouble(request.getParameter("c"));
         equ.setA(a);            //将数据存储在equ中 
         equ.setB(b);           
         equ.setC(c);
         if(a!=0)
           equ.setIsSquareEquation(true);
         else
           equ.setIsSquareEquation(false);
         double disk=b*b-4*a*c;
         if(disk<0)
          {  equ.setRootOne("无实根");
             equ.setRootTwo("无实根");
          }  
         else
          { double root1=(-b+Math.sqrt(disk))/(2*a),
                   root2=(-b-Math.sqrt(disk))/(2*a);
            equ.setRootOne(""+root1); 
            equ.setRootTwo(""+root2); 
          }
         RequestDispatcher dispatcher=request.getRequestDispatcher("show.jsp");
         dispatcher.forward(request,response);    //请求show.jsp显示equ中的数据         
     } 
    public  void  doGet(HttpServletRequest request,HttpServletResponse response) 
                         throws ServletException,IOException
     {   doPost(request,response);
     }
 }

实验6-2:

Web.xml映射添加代码:

<servlet>
	<servlet-name>handle</servlet-name>
	<servlet-class>myservlet.control.HandleArea</servlet-class>
  </servlet>
  <servlet-mapping>
		<servlet-name>handle</servlet-name>
		<url-pattern>/handleArea </url-pattern >
  </servlet-mapping>

Area.java

package mybean.data;
public class Area{
	double a, b, c, area;
	String mess;
	public void setMess(String mess) {
	this.mess = mess;
	}
	public String getMess(){
	return mess;
	}
	public void setA(double a){
	this.a=a;
	}
	public void setB(double b){
	this.b= b;
	}
	public void setC(double c){
	this.c=c;
	}
	public double getA(){
	return a;
	}
	public double getB(){
	return b;
	}
	public double getC(){
	return c;
	}
	public void setArea(double s){
	area= s;
	}
	public double getArea(){
	return area;
	}
}

inputData.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<jsp:useBean id= "data" class = "mybean.data.Area" scope = "session"/>
<html><body bgcolor= cyan><Font size=2>
<form action="handleArea" Method="get">
		梯形:
	<br>输人上底:<input type= text name= "a" size=4>
		输人下底:<input type= text name= "b" size=4>
		输人高: <input type= text name= "c" size=4>
	<input type= submit value= "提交">
</form>
	<jsp:getProperty name="data" property= "mess"/>:
	上底<jsp:getProperty name="data" property="a"/>,
	下底<jsp:getProperty name="data" property="b"/>,<jsp:getProperty name="data" property="c"/><br>
	的面积是<jsp:getProperty name="data" property= "area"/>
</font></body></html>

HandelArea.java

package myservlet.control;
import mybean.data.Area;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleArea extends HttpServlet{
	public void init(ServletConfig config) throws ServletException{
	 super.init(config);
	}
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		doPost(request,response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		Area dataBean= new Area();
		//创建Javabean对象
		HttpSession session = request.getSession(true);
		session.setAttribute("data" ,dataBean);
		//将dataBean存储到request对象中
		try{ 
			double a= Double.parseDouble(request.getParameter("a"));
			double b= Double.parseDouble(request.getParameter("b"));
			double c= Double.parseDouble(request.getParameter("c"));
			dataBean.setA(a);
			//将数据存储在dataBean中
			dataBean.setB(b);
			dataBean.setC(c);
			double s=-1;
			s= (a+b)*c/2.0;
			dataBean.setArea(s);
			//将数据存储在dataBean中
			dataBean.setMess("梯形");
		}
		catch(Exception e){
			dataBean.setArea(-1);
			dataBean.setMess("" + e);
		}
		response.sendRedirect("inputData.jsp");
	 }
}

四、实验结果

实验6-1:

运行input.jsp
在这里插入图片描述

验证a=0时:
在这里插入图片描述

提交后:
在这里插入图片描述

验证有实根:
在这里插入图片描述

验证无实根:
在这里插入图片描述

实验6-2:

运行inputData.jsp
在这里插入图片描述

输入数据:
在这里插入图片描述

提交后:
在这里插入图片描述

五、讨论

1.MVC模式的核心思想是有效地组合“视图”、“模型”和“控制器”。
2.在JSP技术中,视图是一个或多个JSP页面,其作用主要是向控制器提交必要的数据和为模型提供数据显示。
3.模型是一个或多个Javabean对象,用于存储数据。
4.控制器是一个或多个servlet对象,根据视图提交的要求进行数据处理操作,并将有关的结果存储到Javabean中,然后servlet使用重定向方式请求视图中的某个JSP页面更新显示。
5.在MVC模式中,模型也可以由控制器负责创建和初始化。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 我行我“速” 设计师:Amelia_0503 返回首页