基于javaweb的MVC开发模式
MVC开发模式
所谓MVC开发模式,是指JSP+Servlet+JavaBean设计模式。即将程序划分为3部分功能,分别给出设计,实现。
MVC:Model-View-Controller
(1)Model层:Model指模型部分,一般在应用中Model层包括业务处理层和数据访问层。数据访问层主要是对数据库的一些操作的封装。业务处理层应用JavaBean构建, JavaBean主要是用作将从View层获取的数据和数据库的数据进行桥接。除却JavaBean以外,若想构建分布式应用系统,可以应用EJB组件进行业务逻辑层的构建。
(2)Controller层:Controller指控制部分,一般是对View层提交的请求为其设置对应的Servlet进行特定功能的处理,这里的进行特定功能的处理一般是编写在Model中的业务处理层中的。Controller一般只是在Web应用中充当一个中介者的作用。
(3)View层:View指视图部分,这一部分的内容是展示给用户实际进行交互的,通常使用JSP和HTML进行构建。
综上来说,一个小型完整的基于MVC设计模式的Web应用程序的处理流程应该如下:
由上面的图中我们可以看出,用户在客户端(Web应用的客户端即为浏览器)中发出请求的时候,请求首先由View层的JSP/HTML将HTTP请求传给控制器中对应的Servlet,然后由Servlet负责调用Model层中的业务逻辑处理部分进行要求的处理,处理期间如果设计数据库的操作,则与数据库进行操作,最后全部操作结束之后,由业务逻辑层将结果发给控制层,控制层以HTTP响应的形式将结果发送回客户端。
一个MVC模式示例
设计程序完成复数运算,用户在页面上输入两个复数的实部和虚部,并选择运算类型,程序完成复数的指定运算。
1. View层的编写
input:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>提交数据页面</title>
</head>
<body>
<form method="post" action="caculate">
<!-- 提交后进入Servlet -->
请输入第一个复数的实部:<input type="text"name="r1"/><br>
请输入第一个复数的虚部:<input type="text"name="i1"/><br>
选择运算类型
<select name="oper">
<option>+</option>
<option>-</option>
<option>*</option>
<option>/</option>
</select><br/>
请输入第二个复数的实部:<input type="text"name="r2"/><br>
请输入第二个复数的虚部:<input type="text"name="i2"/><br>
<input type="submit" value="计算"/>
</form>
</body>
</html>
output:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>显示结果页面</title>
</head>
<body>
<%=request.getAttribute("outputMessage") %>
</body>
</html>
2. Controller层的编写
Controller层主要编写接受View层请求的Servlet。示例Servlet如下:
package zhr.servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import zhr.Complex;
/**
* Servlet implementation class CaculateServlet
*/
@WebServlet("/caculate")
public class CaculateServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public CaculateServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
double r1=Double.parseDouble(request.getParameter("r1"));
double i1=Double.parseDouble(request.getParameter("i1"));
String oper=request.getParameter("oper");
double r2=Double.parseDouble(request.getParameter("r2"));
double i2=Double.parseDouble(request.getParameter("i2"));
Complex c1=new Complex(r1,i1);
Complex c2=new Complex(r2,i2);
String result="";
if("+".equals(oper))
result=c1.add(c2).info();
else if("-".equals(oper))
result=c1.sub(c2).info();
else if("*".equals(oper))
result=c1.div(c2).info();
request.setAttribute("outputMessage",result);
RequestDispatcher rd=request.getRequestDispatcher("/output.jsp");
rd.forward(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
3. Model层的编写
package zhr;
public class Complex {
private double real;
private double ima;
public Complex() {}
public Complex(double real, double ima) {
this.real = real;
this.ima = ima;
}
public double getReal() {
return real;
}
public void setReal(double real) {
this.real = real;
}
public double getIma() {
return ima;
}
public void setIma(double ima) {
this.ima = ima;
}//返回值 参数 必须两个复数对象this,一个参数
public Complex add(Complex a) {
double x=this.real+a.real;
double y=this.ima+a.ima;
Complex z=new Complex(x,y);
return z;
}//this+a
public Complex sub(Complex a) {
double x=this.real-a.real;
double y=this.ima-a.ima;
Complex z=new Complex(x,y);
return z;
}//this+a
public Complex mul(Complex a) {
double x=this.real*a.real;
double y=this.ima*a.ima;
Complex z=new Complex(x,y);
return z;
}
public Complex div(Complex a) {
double z=a.real*a.real+a.ima*a.ima;
double x=(this.real*a.real+this.ima*a.ima)/z;
double y=(this.ima*a.real-this.real*a.ima)/z;
return new Complex(x,y);
}
public String info() {
if(ima>=0.0)
return real+"+"+ima+"*i";
else
return real+"-"+(-ima)+"*i";
}
}
下一篇: Android与MVC设计模式相关操作
推荐阅读
-
什么是面向对象 不错的一篇面向对象的PHP开发模式(简写版)
-
ASP.NET MVC 5 实现基于Quartz.net 的任务调度管理平台(二)
-
基于MVC .NET Core动态角色的授权
-
基于spring Boot的微信开发————AccessToken的缓存方案(一)
-
【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持
-
基于jQuery的弹出框插件开发教程
-
基于asp.net的登录页面开发
-
Git 项目推荐 | 基于 laravel4.2 开发的多用户博客系统
-
基于阿里云物联网的APP简单开发
-
《精通struts:基于mvc的Java web设计与开发》