1. 程式人生 > 其它 >jsp mvc模式及例項計算一元二次方程的根

jsp mvc模式及例項計算一元二次方程的根

前言

這週一直比較忙,所以一直沒有學習新的東西,所以決定本週的部落格主要鞏固一下課堂知識。


MVC模式

  • M(模型:Model):用於儲存資料的物件。
  • V(檢視:View):向控制器提交所需資料、顯示模型的資料。
  • C(控制器:Controller):負責具體的業務邏輯操作

個人感悟

MVC模型的思想與博主之前學python時的分而治之的思想有很大的相似的,可以彼此借鑑,主要就是讓一個大的專案進行分割,然後各司其職,也和大資料思想中的“鬆耦合,緊內聚”,有一定相似之處。

例項(計算一元二次方程的根)

Model:主要採用Javabean進行資料的儲存的修改。

package pg1;

public
class Equation { double a, b, c; //方程的三個係數 String rootOne, rootTwo;//儲儲存存方程的兩個跟 boolean squareEquation;//儲存方程是否為二次方程 True/False public double getA() { return a; } public void setA(double a) { this.a = a; } public double getB() { return b; } public void setB(double b) { this.b = b; }
public double getC() { return c; } public void setC(double c) { this.c = c; } public String getRootOne() { return rootOne; } public void setRootOne(String rootOne) { this.rootOne = rootOne; } public String getRootTwo() { return rootTwo; } public void setRootTwo(String rootTwo)
{ this.rootTwo = rootTwo; } public boolean getIsSquareEquation() { return squareEquation; } public void setIsSquareEquation(boolean b) { squareEquation = b; } }

檢視:採用jsp頁面進行資料的獲取以及結果的展示
input.jsp:獲取資料

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<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>//from表單讓使用者提交資料
</body>
</html>

show.jsp:展示結果

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:useBean id="equation" class="pg1.Equation" scope="request"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
一元二次方程的係數是:
<br>二次項係數:<jsp:getProperty property="a" name="equation"/>
	一次項係數:<jsp:getProperty property="b" name="equation"/>
	常數項:<jsp:getProperty property="c" name="equation"/>
<br>是一元二次方程嗎?<jsp:getProperty property="isSquareEquation" name="equation"/>
<br>方程的兩個根是:<jsp:getProperty property="rootOne" name="equation"/>
<jsp:getProperty property="rootTwo" name="equation"/>

</body>
</html>

控制器:使用servlet進行資料的邏輯執行。

package pg1;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HandleData extends HttpServlet {
	@Override
	public void init(ServletConfig config) throws ServletException {
		super.init(config);
	}

	@Override
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Equation equ = new Equation();
		request.setAttribute("equation", equ);
		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.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);
	}

	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
}

web.xml可用於不同模組之間的連結。

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

效果

在這裡插入圖片描述
在這裡插入圖片描述

總結

個人感覺程式碼並沒有太高的難度,主要是對這種模式的感悟和理解,再以後再編寫程式碼是要有意識的使用這種模式。