• MVC模式认识



    前言

    在Servlet中编写html的画面输出不是好的主意,在JSP上编写Java语言也不是很建议;对于Java程序代码与呈现画面的html等混杂在一起,非但撰写不易、日后对维护人员也不友好,而且对大型项目的分工合作也是一大困扰,将来若需要转换为其它页面模板技术上也会遇到很大麻烦。


    一、MVC模式的介绍

    MVC是Model、View、Controller的缩写,是编写JSP的一种模式。

    1. Model是模型层

    也称为数据可持续层
    主要用到JavaBean技术
    实现对业务逻辑处理,数据类(结果的保存)

    1. View是视图层

    主要是用JSP/HTML技术来实现
    对页面的输入和结果的输出

    1. Controller是控制层

    主要使用Servlet技术
    接收用户的请求
    调用方法,处理业务来得到结果
    根据结果来跳转目的页面(实现页面跳转)

    MVC模式关键在结果:

    • 结果的保存是采用JavaBean即Java对象。
    • 结果的获取是通过Servlet来调用Java的方法得到。
    • 结果的显示需要在JSP的页面中去显示。
    • 结果的传递关键在于通过作用域对象(request或session对象)把Java对象从Servlet传递给JSP。

    MVC中数据传递步骤:

    一、在Servlet中

    • 创建JavaBean对象;在flower.grass.crateJavaBeanclass目录下
    JavaBeanClass bean = new JavaBeanClass();
    
    • 1
    • 接收输入JSP页面发送的请求数据存储到JavaBean;
    • 调用Java方法得到结果;
    • 将JavaBean实例保存到相应的作用域对象中,例如request、session中;
    //request对象
    request.setAttribute("keyWord",bean);
    //session对象
    HttpSession session = request.getSession(true);
    session.setAttribute("keyWord",bean);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 跳转到结果页面JSP上。
    //request
    RequestDispatcher dis = request.getRequestDispatcher(结果URL地址"xxx.Jsp")dispatcher.forward(request,respone);//请求xxx.Jsp中的结果
    //session
    forward或者是重定向都可以
    
    • 1
    • 2
    • 3
    • 4

    二、输出JSP页面

    • 显示JavaBean的数据(结果)
    • 标签来显示结果,用如下标记来获取Servlet所创建的JavaBean的引用:
    <jsp:useBean id = "keyword" type = "flower.grass.crateJavaBeanclass" 
    scope = "request/session"/>
    
    • 1
    • 2
    • 在JSP页面显示具体数据
    <jsp:getProperty name="keyword" property="Java属性"
    
    • 1
    • EL表达式则可以直接使用
    ${keyword.属性名}
    
    • 1

    EL的具体使用可以看:大佬连接

    二、使用MVC简单做一个题目

    题目:用户通过JSP页面输入三角形的三边或梯形的上底、下底和高给一个servlet控制器,控制器负责计算三角形和梯形的面积,并将结果存储到数据模型中,然后请求JSP页面显示数据模型中的数据。。

    1.模式设计分析

    • 模型层JavaBean:封装类Compute_Bean的属性
    • 视图层View:用login.jsp来输入三角形的三条边或者是梯形的上底、下底、高。
    • 控制层Servlet:从login.jsp三角形的三条边或者是梯形的上底、下底、高的数据,创建响应的JavaBean实例,验证输入的合法性后计算三角形或梯形的面积从而输出结果。

    2.代码解读

    1. Model:
    package com.example;
    
    public class Compute_Bean {
    	private double number1 = 0;
    	private double number2 = 0;
    	private double number3 = 0;
    	private double result;
    	private String name = "null";
    	private String number1_name = "null";
    	private String number2_name = "null";
    	private String number3_name = "null";
    	
    	public void setNumber1(double newNumber1) {
    		number1 = newNumber1;
    	}
    	public double getNumber1() {
    		return number1;
    	}
    	
    	
    	public void setNumber2(double newNumber2) {
    		number2 = newNumber2;
    	}
    	public double getNumber2() {
    		return number2;
    	}
    	
    	
    	public void setNumber3(double newNumber3) {
    		number3 = newNumber3;
    	}
    	public double getNumber3() {
    		return number3;
    	}
    	
    	
    	public void setResult(double newResult) {
    		result = newResult;
    	}
    	public double getResult() {
    		return result;
    	}
    	
    	public void setName(String newName) {
    		name = newName;
    	}
    	public String getName() {
    		return name;
    	}
    	
    	public void setNumber1_name(String newNumber1_name) {
    		number1_name = newNumber1_name;
    	}
    	public String getNumber1_name() {
    		return number1_name;
    	}
    	
    	public void setNumber2_name(String newNumber2_name) {
    		number2_name = newNumber2_name;
    	}
    	public String getNumber2_name() {
    		return number2_name;
    	}
    	
    	public void setNumber3_name(String newNumber3_name) {
    		number3_name = newNumber3_name;
    	}
    	public String getNumber3_name() {
    		return number3_name;
    	}
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    1. View:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>求 三角形/梯形 面积</title>
    </head>
    <body>
    	<jsp:useBean id="compute_bean" class="com.example.Compute_Bean" scope="request" />
    
    	<h1>求 三角形/梯形 面积</h1>
    	<form action="Compute_Servlet" method="post">1/上底:<input type="text" name="number1" value=<jsp:getProperty name="compute_bean" property="number1" />>	<br>2/下底:<input type="text" name="number2" value=<jsp:getProperty name="compute_bean" property="number2" />> <br>3/高:	<input type="text" name="number3" value=<jsp:getProperty name="compute_bean" property="number1" />>	<br> 
    				<input type="submit" name="submit" value="求三角形面积"><br>
    				<input type="submit" name="submit" value="求梯形面积">	<br>
    	</form>
    	
    	
    	<table border="1">
    	  	<tr>
    		    <th><jsp:getProperty name="compute_bean" property="number1_name" /></th>
    		    <th><jsp:getProperty name="compute_bean" property="number2_name" /></th>
    		    <th><jsp:getProperty name="compute_bean" property="number3_name" /></th>
    		    <th><jsp:getProperty name="compute_bean" property="name" /></th>
    	  	</tr>
    	  	<tr>
    		    <td><jsp:getProperty name="compute_bean" property="number1" />	</td>
    		    <td><jsp:getProperty name="compute_bean" property="number2" />	</td>
    		    <td><jsp:getProperty name="compute_bean" property="number3" />	</td>
    		    <td><jsp:getProperty name="compute_bean" property="result" />	</td>
    	  	</tr>
    	</table>
    	
    </body>
    </html>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    1. Controller
    package com.example;
    
    import jakarta.servlet.RequestDispatcher;
    import jakarta.servlet.ServletException;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    import org.apache.jasper.tagplugins.jstl.core.Out;
    
    /**
     * Servlet implementation class Compute_Servlet
     */
    public class Compute_Servlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public Compute_Servlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
    	/**
    	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		request.setCharacterEncoding("utf-8");
    		response.setContentType("text/html;charset=utf-8");
    		Compute_Bean compute_bean = new Compute_Bean();
    		request.setAttribute("compute_bean", compute_bean);
    		double number1 = Double.parseDouble(request.getParameter("number1"));
    		double number2 = Double.parseDouble(request.getParameter("number2"));
    		double number3 = Double.parseDouble(request.getParameter("number3"));
    		String mess = request.getParameter("submit");
    		
    		
    		compute(number1, number2, number3, mess, compute_bean);
    		RequestDispatcher dispatcher = request.getRequestDispatcher("login.jsp");
    		dispatcher.forward(request, response);
    		System.out.print(compute_bean.getResult());
    	
    	}
    
    	
    	public void compute(double num1, double num2,double num3, String mess, Compute_Bean bean) {
    		boolean flag = mess.contains("三角");
    		
    		bean.setNumber1(num1);
    		bean.setNumber2(num2);
    		bean.setNumber3(num3);
    		
    		if(flag) {
    			double p = (num1 + num2 + num3) * 0.5;
    			double result = Math.sqrt(p * (p-num1) * (p-num2) * (p-num3));
    			bean.setResult(result); 
    			bean.setName("三角形面积"); 
    			bean.setNumber1_name("边1"); 
    			bean.setNumber2_name("边2"); 
    			bean.setNumber3_name("边3"); 
    		}
    		else {
    			double result = (num1 + num2) * num3 * 0.5;
    			bean.setResult(result);
    			bean.setName("梯形面积"); 
    			bean.setNumber1_name("上底"); 
    			bean.setNumber2_name("下底"); 
    			bean.setNumber3_name("高");
    		}
    		
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
  • 相关阅读:
    nodejs+vue客户管理管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计
    软件调研、研发、设计、管理、验收文档(全文档整理)
    AI项目十三:PaddleOCR训练自定义数据集
    ChatGPT与音乐领域的新篇章
    数据分析师到底是做什么的?写Python或SQL语句?
    零基础真的可以学习Python吗?答案是:可以!
    nginx端口映射后,跳转带的是内网端口而不是内网端口
    “次世代”究竟是什么?次世代角色建模又该怎么学?
    从祖师级到新生代,48位开发者的“武功秘籍”
    浅谈大数据算法
  • 原文地址:https://blog.csdn.net/ex_6450/article/details/127686693