前言
这周一直比较忙,所以一直没有学习新的东西,所以决定本周的博客主要巩固一下课堂知识。
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>
效果
总结
个人感觉代码并没有太高的难度,主要是对这种模式的感悟和理解,再以后再编写代码是要有意识的使用这种模式。