欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于javaweb的MVC开发模式

程序员文章站 2022-04-02 10:21:31
...

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应用程序的处理流程应该如下:
基于javaweb的MVC开发模式
由上面的图中我们可以看出,用户在客户端(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";
	}
}