[Java]JavaWeb开发中的MVC设计模式

article/2025/8/22 17:54:42

一、有关Java Web与MVC设计模式

     学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容。但是我们之前自己编写的应用一般存在无条理性,对于一个小型的网站这样的编写没有任何问题,但是一但我们需要编写大型的web工程的话,我们现有的编写模式会造成web应用的可扩展性较差,而且一但出现问题不能准确的定位出问题出在哪里。

     Java是一门应用设计模式比较广泛的语言。目前主流提出的23种设计模式均可在Java语言编写的程序中所应用。目前主流在Java Web应用中应用的最广泛的设计模式便是MVC模式,目前的主流Web框架大多也是基于MVC设计模式所编写的。

二、MVC在Java Web应用中的具体应用

所谓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进行构建(个人比较喜欢以HTML嵌入JSP的方式来构建网页)。

综上来说,一个小型完整的基于MVC设计模式的Web应用程序的处理流程应该如下:

      由上面的图中我们可以看出,用户在客户端(Web应用的客户端即为浏览器)中发出请求的时候,请求首先由View层的JSP/HTML将HTTP请求传给控制器中对应的Servlet,然后由Servlet负责调用Model层中的业务逻辑处理部分进行要求的处理,处理期间如果设计数据库的操作,则与数据库进行操作,最后全部操作结束之后,由业务逻辑层将结果发给控制层,控制层以HTTP响应的形式将结果发送回客户端。

三、一个MVC设计模式的小例子

我们的这个例子是运用MVC技术和基本的Java Web技术进行一个用户注册和信息查询的Web应用的制作。项目工程文件夹目录如下:

1.View层的编写

在这里我们模仿制作一个用户进行的注册界面,并在表单中指定接受请求并处理该页面的Servlet。View层主要是由jsp、HTML编写而成。

其中的一个jsp示例文件如下:

<%@ page language="java" import="java.util.*" contentType="text/html"; charset="utf-8" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>用户注册界面</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body style="text-align=:center"><form action="${pageContext.request.contextPath}/servlet/RegisterServlet" method="post"><table width="60%" border="1"><tr><td>用户名</td><td><input type="text" name="userName"></td></tr><tr><td>密码</td><td><input type="password" name="passWord"></td></tr><tr><td>你出生的城市是哪里</td><td><input type="text" name="answer"></td></tr><tr><td><input type="reset" value="清空"></td><td><input type="submit" value="注册"></td></tr></table></form></body>
</html>

在jsp文件中我们指定了接受该页面并进行处理的表单。表单在Web应用中是十分重要的,目前Web应用的前后端传输数据的时候多数都要用到表单。

2.Controller层的编写

Controller层主要编写接受View层请求的Servlet。示例Servlet如下:

import java.io.IOException;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 com.gaodongyan.bean.UserBean;
import com.gaodongyan.service.ResigerInfo;@WebServlet("/ResigerServlet")
public class ResigerServlet extends HttpServlet {private static final long serialVersionUID = 1L;public ResigerServlet() {super();}/*UserBean:userName,passWord,answer* 在doGet()方法中,我们利用HttpServletRequest类中封装的方法进行对页面元素的调用*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {UserBean user = new UserBean();user.set_userName(request.getParameter("userName"));user.set_passWord(request.getParameter("passWord"));user.set_answer(request.getParameter("answer"));String sql = "INSERT INTO USERINFO ([username],[password],[answer]) values (" + user.get_userName() + "," + user.get_passWord() + "," +user.get_answer() + ")";ResigerInfo resigerInfo = new ResigerInfo();resigerInfo.interToDb(sql);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

3.Model层的编写

Model层在具体的编写中包括dao层和bean层还有service层。

(1)bean层:bean层中编写数据模型类。

示例Bean如下:

public class UserBean {private String userName;private String passWord;private String answer;public void set_userName(String userName) {this.userName = userName;}public void set_passWord(String passWord) {this.passWord = passWord;}public void set_answer(String answer) {this.answer = answer;}public String get_userName() {return userName;}public String get_passWord() {return passWord;}public String get_answer() {return answer;}
}

(2)dao层负责与数据库进行交互。

示例dao层如下:其中GetConnection类返回一个数据库连接,UpdateDb类负责通过调用GetConnection来获得一个连接对象,再进行具体的数据库操作。

class GetConnection {private String url;private String userName;private String password;Connection conn ;public Connection getConnection() {try {Class.forName("com.mysql.jdbc.Driver");}catch(ClassNotFoundException e) {}try {conn = DriverManager.getConnection(url, userName, password);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return conn;}
}

注:在此处略去了数据库连接所需要的url、username、password。在具体操作的时候则需要指定这三项。 

public class UpdateDb {Connection conn;Statement stmt;ResultSet result;public void doUpdate(String sql) {GetConnection getedConnection = new GetConnection();conn = getedConnection.getConnection();try {stmt = conn.createStatement();stmt.executeQuery(sql);} catch (SQLException e) {e.printStackTrace();}}
}

(3)service层:service层负责编写具体的业务逻辑,由于我们的示例中的业务逻辑比较简单,故此处编写的代码较少。对于大型项目来说,业务逻辑层一般需要进行很多的业务处理。

示例如下:

public class ResigerInfo {//We can set a unique sql in this place.public void interToDb(String sql) {UpdateDb updateDb = new UpdateDb();updateDb.doUpdate(sql);}
}

4.Demo总结

      博文中贴出的代码是用户注册时需要的步骤。由于多个类和层间存在调用关系,所以大家在看贴出的源码时可能会有理解的问题。所有类都已经在最开始的项目结构图中体现了,相信对比着项目结构图大家都会很容易明白MVC设计模式的基本调用历程。


http://chatgpt.dhexx.cn/article/Y4nVHtOV.shtml

相关文章

MVC设计模式及流程

MVC设计模式&#xff1a; 概述&#xff1a; 是一种开发结构合理、能使前后端分离、流程控制逻辑、业务逻辑调用与展示逻辑分离&#xff0c;实现高内聚&#xff0c;低耦合的设计模式。 M:数据实体模型(Model或Entity): 每一个类的成员变量字段对应数据库字段对应(对应的Entity…

SpringMVC(一)MVC设计模式

一、简介 MVC设计模式一般是指MVC框架&#xff0c;Model数据模型层&#xff0c;View视图层&#xff0c;Controller控制层。 使用MVC目的是将M和V实现代码分离&#xff0c;使统一程序有不同的表现形式。其中&#xff0c;View定义比较清晰&#xff0c;指用户界面。 web项目中&a…

MVC设计模式和UML类图

文章目录 一、UML 类图&#xff1a;二、MVC 设计模式 一、UML 类图&#xff1a; 14中UML图&#xff1a;https://blog.csdn.net/yoyo328/article/details/78009237 二、MVC 设计模式 MVC是常用的设计模式之一&#xff0c;将整个程序分为三个层次&#xff1a;视图模式层&…

JSP的MVC设计模式

文章目录 一. MVC模式概念1. M&#xff1a;Model&#xff08;模型&#xff09;2. V&#xff1a;View&#xff08;视图&#xff09;3. C&#xff1a;Controller&#xff08;控制器&#xff09;&#xff1a;4. 图示理解 二. MVC案例1. WebContent内容2. servlet包内容3. entity包…

MVC设计模式学习(一)

笔者对于MVC也是初学&#xff0c;写这篇文章的主要目的是方便自己去理解MVC的相关内容&#xff0c;所以有些描述并不是那么专业和全面&#xff0c;请多多包涵。 一、MVC设计模式概述 MVC全名是Model View Controller&#xff0c;是模型(model)&#xff0d;视图(view)&#xff…

MVC设计模式含义和优点

MVC模式&#xff08;Model-View-Controller&#xff09;是 软件工程 中的一种 软件架构 模式&#xff0c;把软件系统分为三个基本部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。 MVC模…

什么是MVC设计模式

直接上图&#xff0c;其中model 和view大家经常写&#xff0c;就不说了 有人可能并不清楚controller 到底是啥&#xff0c;其实就是经常写的 data source ,delegate,outlet什么的 先撇开那些乱七八糟的箭头单看他们之间的分界线&#xff0c;view与controller、model与controll…

MVC设计模式详解

MVC(Model View Controller)模型(model)&#xff0d;视图(view)&#xff0d;控制器(controller)&#xff1a; MVC本来是存在于Desktop程序中的&#xff0c;M是指数据模型&#xff0c;V是指用户界面&#xff0c;C则是控制器。使用MVC是将M和V的实现代码分离&#xff0c;从而使同…

MVC 设计模式概述

(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/53292312) 1、MVC设计模式: 如图所示,MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型 (Model)、视图(View)和控制器(Contr…

mvc设计模式与三层架构

mvc与三层架构 1.什么是mvc设计模式 写 Java Web 项⽬时会发现&#xff0c;一个中型或者大型项目随着代码的增多&#xff0c;会发现&#xff1a;代码既可以写在 src目 录下&#xff0c;也可以写在WebContent目 录下。 src 下可以建很多包&#xff0c; WebContent 下可以建很多…

随机游走模型

6.2.1 随机游走模型&#xff08;Random Surfer Model&#xff09; 《这就是搜索引擎&#xff1a;核心技术详解》第6章链接分析&#xff0c;本章主要介绍一些著名的链接分析方法。本节为大家介绍随机游走模型&#xff08;Random Surfer Model&#xff09;。 6.2 两个概念模型及算…

图嵌入表示学习—Node Embeddings随机游走

Random Walk Approaches for Node Embeddings 一、随机游走基本概念 想象一个醉汉在图中随机的行走&#xff0c;其中走过的节点路径就是一个随机游走序列。 随机行走可以采取不同的策略&#xff0c;如行走的方向、每次行走的长度等。 二、图机器学习与NLP的关系 从图与NLP的…

图机器学习——2.1 节点嵌入:基于随机游走

嵌入&#xff08;embedding&#xff09;方法是目前文本分析&#xff0c;知识图谱相关中非常常见的一种算法。其为表示学习的一类方法&#xff0c;可以自动地从数据中学习“有用”的特征&#xff0c;并可以直接用于后续的具体任务。后面学习的相关嵌入学习均为表示学习中的内容。…

Python模拟随机游走

随机游走模型由首先由爱因斯坦在1926年以数学方式描述。由于自然界中的许多实体会以不可预知的方式移动&#xff0c;因此随机游走模型用来描述这种不稳定的移动。在这种移动模型中&#xff0c;移动节点随机选择一个方向和速度来从当前位置移动到新的位置。下面展示一维和多维情…

Python基于随机游走模型的PageRank算法及应用

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/86812933 资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/86812933 基于随机游走模型的 PageRank 算法及应用 一、课题背景介绍 1.1 随机游走模型 随机游走也称随机漫步&…

图——随机游走算法

文章目录 推荐基本概念PageRankPersonalRankTextRankSimRank 推荐基本概念 其中用户user[A,B,C],物品item[a,b,c,d]&#xff0c;用户和物品有以下的关系 上述便是一个典型的二分图&#xff0c;我们用G(V,E)来表示&#xff0c;其中V为用户user和物品item组成的顶点集即[A,B,C,…

python二维随机游走_Python模拟随机游走图形效果示例

本文实例讲述了Python模拟随机游走图形效果。分享给大家供大家参考,具体如下: 在python中,可以利用数组操作来模拟随机游走。 下面是一个单一的200步随机游走的例子,从0开始,步长为1和-1,且以相等的概率出现。纯Python方式实现,使用了内建的 random 模块: # 随机游走 i…

随机游走 推荐系统论文阅读

emmmm本篇博客主要写了&#xff0c;自己阅读的一些论文&#xff0c;做了一些笔记&#xff0c;主要是记录。 基于深度随机游走的协同过滤推荐算法_刘靖凯 推荐算法&#xff1a;召回和排序 召回步骤常用的算法有协同过滤算法、隐语义算法 常用的协同过滤算法有基于用户的协同过…

理解随机游走

随机游走 基本思想 从一个或一系列顶点开始遍历一张图。在任意一个顶点&#xff0c;遍历者将以概率1-a游走到这个顶点的邻居顶点&#xff0c;以概率a随机跳跃到图中的任何一个顶点&#xff0c;称a为跳转发生概率&#xff0c;每次游走后得出一个概率分布&#xff0c;该概率分布…

随机游走问题

随机游走指的是在一个点以等可能的概率走向下一个点。 问题1&#xff1a; Link:https://www.luogu.com.cn/problem/P3232 题意&#xff1a;这道题其实相当于求每条边经过的期望次数。 思路&#xff1a;每条边经过的期望次数不好算&#xff0c;我们想到点经过的期望次数。于…