实现MVC模式的CRUD实例(一般的教材上看不到)

MVC初识--在MVC框架下实现CRUD 任务目标 业务目标: 搭建 MVC 架构, 实现数据 CRUD 技能目标: 掌握并运用 MVC 设计模式实现数据操作 任务过程 理解 mvc 概念 创建包结构,并理解每一层的作用 添加各层代码 实现前后端的访问 1.MVC设计模式 Web MVC中的M(模型)-V(视图)-C(控制器)概念和标准MVC概念一样,Web MVC标准架构,如下图所示: M:(Model) 模型 : 应用程序的核心功能,管理这个模块中用的数据和值(bean,dao) JavaBeans :是Java中一种特殊的类(换言之: 阅读详情

实例包括如下文件:

M部分:Student.java,包含了数据库访问代码,能够表示学生信息,封装了对学生操作的基本方法。

C部分:StudentServlet.java,完成增删改查的控制。

V部分:studentlist.jsp和edituser.jsp,前者显示学生列表,以及添加、删除、修改的入口,后者用于添加和修改。

配置文件:web.xml

下面分别给出相关文件。

----------------------------------------Student.java-----------------------------------------------------------

 package javabean;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class Student {
 
 private Connection con;
 
 private Statement stmt;
 
 private ResultSet rs;
 
 private String sid;
 private String sname;
 private String sage;
 
 /*
  * 获取所有学生信息
  */
 public List getAllStudents(){
  List list = new ArrayList();
  String sql = "select * from student";
  try{
   rs = executeQuery(sql);
   while(rs.next()){
    Student temp = new Student();
    temp.setSid(rs.getString(1));
    temp.setSname(rs.getString(2));
    temp.setSage(rs.getString(3));
    list.add(temp);
   }
  }catch(Exception e){
   System.out.println(e.toString());
  }finally{
   close();
  }
  return list;
 }
 
 /*
  * 添加学生
  */
 public void add(Student stu){
  String sql = "insert into student values('"+stu.getSid()+"','"+stu.getSname()+"',"+stu.getSage()+")";
  try{
   executeUpdate(sql);
  }catch(Exception e){
   System.out.println(e.toString());
  }finally{
   close();
  }
 }
 
 /*
  * 删除学生
  */
 public void delete(String sid){
  String sql = "delete from student where sid='"+sid+"'";
  try{
   executeUpdate(sql);
  }catch(Exception e){
   System.out.println(e.toString());
  }finally{
   close();
  }
 }
 
 /*
  * 修改学生
  */
 public void edit(Student stu){
  String sql = "update student set sname='"+stu.getSname()+"',sage="+stu.getSage()+" where sid='"+stu.getSid()+"'";
  try{
   int n = executeUpdate(sql);
   System.out.println("--------------"+n);
  }catch(Exception e){
   System.out.println(e.toString());
  }finally{
   close();
  }
 }
 
 /*
  * 根据学号查询学生
  */
 public Student findStudentById(String sid){
  String sql = "select * from student where sid='"+sid+"'";
  try{
   rs = executeQuery(sql);
   if(rs.next()){
    Student temp = new Student();
    temp.setSid(rs.getString(1));
    temp.setSname(rs.getString(2));
    temp.setSage(rs.getString(3));
    return temp;
   }
  }catch(Exception e){
   System.out.println(e.toString());
  }finally{
   close();
  }
  return null;
 }
 
 /*
  * 执行更新等操作
  */
 public int executeUpdate(String sql)throws SQLException,ClassNotFoundException{
  return getStatement().executeUpdate(sql);
 }
 
 /*
  * 关闭对象
  */
 public void close(){
  if(rs!=null)
   try{rs.close();}catch(Exception e){}
  if(stmt!=null)
   try{stmt.close();}catch(Exception e){}
  if(con!=null)
   try{con.close();}catch(Exception e){}
 }
 
 /*
  * 执行有结果集返回的查询
  */
 public ResultSet executeQuery(String sql) throws SQLException,ClassNotFoundException{
  return getStatement().executeQuery(sql);
 }
 
 /*
  * 获取语句对象
  */
 public Statement getStatement() throws SQLException,ClassNotFoundException{
  if(stmt==null){
   stmt = getConnection().createStatement();
  }
  return stmt;
 }
 
 /*
  * 获取连接
  */
 public Connection getConnection() throws SQLException,ClassNotFoundException{
  if(con==null){
   Class.forName("oracle.jdbc.driver.OracleDriver");
   con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.102.206:1521:orcl","training","123456");
  }
  return con;
 }

 public String getSid() {
  return sid;
 }

 public void setSid(String sid) {
  this.sid = sid;
 }

 public String getSname() {
  return sname;
 }

 public void setSname(String sname) {
  this.sname = sname;
 }

 public String getSage() {
  return sage;
 }

 public void setSage(String sage) {
  this.sage = sage;
 }
 
 public static void main(String[] args){
  Student student = new Student();
 }
}

----------------------------------------StudentServlet.java----------------- --------------------------------

package servlet;

import java.io.IOException;
import java.util.List;

import javabean.Student;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class StudentServlet extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  doPost(request,response);
 }


 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  request.setCharacterEncoding("gb2312");
  String sid = request.getParameter("sid");
  String sname = request.getParameter("sname");
  String sage = request.getParameter("sage");
  String action =  request.getParameter("action");
  
  // 调用业务方法
  Student student = new Student();
  if(action.equals("list")){ // 显示列表
   List list = student.getAllStudents();
   request.setAttribute("studentlist",list);
  }else if(action.equals("add")){ //添加
   Student info = new Student();
   info.setSid(sid);
   info.setSname(sname);
   info.setSage(sage);
   student.add(info);
  }else if(action.equals("edit")){ // 修改
   Student info = new Student();
   info.setSid(sid);
   info.setSname(sname);
   info.setSage(sage);
   student.edit(info);
  }else if(action.equals("findedit")){ // 修改之前的查询
   Student info = student.findStudentById(sid);
   request.setAttribute("student",info);
  }else if(action.equals("delete")){ // 删除学生
   student.delete(sid);
  }else if(action.equals("findadd")){
   
  }
  
  String forward;
  if(action.equals("findedit")){
   request.setAttribute("type","edit"); // 在界面上用于判断是添加界面还是修改界面
   forward = "edituser.jsp";
  }else if(action.equals("findadd")){
   request.setAttribute("type","add"); // 在界面上用于判断是添加界面还是修改界面
   forward = "edituser.jsp";
  }else if(action.equals("list")){
   forward = "studentlist.jsp";
  }else{
   forward = "student?action=list";
  }
  
  RequestDispatcher rd = request.getRequestDispatcher(forward);
  rd.forward(request,response);
 }

}

----------------------------------------studentlist.jsp---------------------------------------------------------

<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
  <head>
     <title>所有学生信息</title>
  </head>
  <body>
     <h1>学生列表</h1>
     <table>
        <tr>
           <td>学号</td><td>姓名</td><td>年龄</td>
        </tr>
        <c:forEach var="student" items="${studentlist}">
            <tr>
               <td>${student.sid}</td>
               <td>${student.sname}</td>
               <td>${student.sage}</td>
               <td><a href="student?action=delete&sid=${student.sid}">删除</a></td>
               <td><a href="student?action=findedit&sid=${student.sid}">修改</a></td>
            </tr>
        </c:forEach>
     </table>
     <a href="student?action=findadd">添加学生</a>
  </body>
</html>

----------------------------------------edituser.jsp -----------------------------------------------------------

 <%@ page language="java" pageEncoding="gb2312" contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%
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>My JSP 'edituser.jsp' starting page</title>
  </head>
 
  <body>
    <h2> <c:if test="${type==/"add/"}"> 添加学生</c:if> <c:if test="${type==/"edit/"}">  修改学生</c:if> </h2>
    <form action="student?action=${type}" method="post">
    <table>
       <tr>
          <td>学号</td>

             <td>

               <c:if test="${ empty student }"> <input type="text" name="sid"></c:if>

               <c:if test="${! empty student }"> <input type="hidden" name="sid" value="${student.sid}">${student.sid} </c:if>  

            </td>
       </tr>
       <tr>
          <td>姓名</td><td><input type="text" name="sname" <c:if test="${! empty student }"> value="${student.sname}" </c:if> ></td>
       </tr>
       <tr>
          <td>年龄</td><td><input type="text" name="sage" <c:if test="${! empty student }"> value="${student.sage}" </c:if>></td>
       </tr>
       <tr>
          <td><input type="submit" value="确定"></td><td><input type="reset" value="重置"></td>
       </tr>
    </table>
    </form>
  </body>
</html>

----------------------------------------web.xml-----------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>StudentServlet</servlet-name>
    <servlet-class>servlet.StudentServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>StudentServlet</servlet-name>
    <url-pattern>/student</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


该实例需要添加的内容:
1、增加验证部分。
2、增加异常处理部分。
3、增加日志部分。
4、增加国际化部分。
5、增加分页功能。
6、增加灵活的查询功能。

Java Web CRUD操作与MVC模式实战教程 Java Web应用架构是企业级应用开发中不可或缺的部分,它涉及了从客户端浏览器到服务器端的多种组件。Java Web架构主要包括前端展示层、业务逻辑层以及数据持久层。前端展示层主要负责与用户进行交互,使用HTML、CSS和JavaScript等技术构建用户界面。业务逻辑层则由Java Servlet和JavaServer Pages (JSP)等组件构成,处理业务逻辑和请求转发。数据持久层是与数据库或其他存储系统进行数据交换的层,通常利用JDBC或ORM框架(如Hibernate)来实现。 阅读详情

相关推荐

实现Struts框架的CRUD完整操作实例

本文还有配套的精品资源,点击获取 简介:Struts是一个MVC框架,用于简化J2EE Web应用程序开发。本实例深入探讨了如何在Struts框架下实现CRUD操作,涵盖了从表单处理到数据库操作的完整流程。我们将分析关键组件,如ActionForm、Action类、ActionMapping、DispatcherServlet、ActionForward和JSP,以及如何配...

weixin_35238815的博客 1090

SpringMVC——CRUD操作 (包含JavaConfig的方式)

目录 一、SpringMVC完成CRUD 0、导入相关依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </...

Guizy 2323

Spring MVC CRUD操作全解

Spring MVC是一个构建Web应用程序的流行框架,采用Java语言开发,遵循了MVC(Model-View-Controller)设计模式。它的出现使Java Web开发更加轻便、灵活,提供了一种清晰的方式来分离关注点,分别负责数据、页面展示和业务逻辑的处理。CRUD操作,是创建(Create)、读取(Read)、更新(Update)和删除(Delete)四种基础数据处理操作的统称。它们是所有数据库交互操作的核心,确保了应用程序能够持久化地存储和管理数据。

weixin_30798867的博客 789

MVC3和MVC4中CRUD操作

MVC3和MVC4中CRUD操作

syaguang2006的专栏 1152

C#与MySQL的MVC架构CRUD操作实践

MVC(Model-View-Controller)架构是一种广泛应用于Web应用程序开发的设计模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。通过将应用程序的业务逻辑、数据处理和用户界面分离,MVC实现了业务逻辑和用户界面的解耦,从而提高了代码的可维护性和可扩展性。核心思想是将数据(Model)、展示(View)和控制(Controller)分离,确保数据逻辑与表现逻辑分离,降低模块间的耦合度,从而使得代码更加清晰、易于管理。

weixin_36073714的博客 790

利用OTSU阈值算法在ZYNQ上实现浒苔识别

利用OTSU阈值算法进行图像二值化,结果用HDMI显示

qq_38075564的博客 1276

创建空的MVC5-控制器实现CRUD操作

上一期中介绍了两表的约束关系的建立,这期将实现两表的增删改查。该文章仍然是基于MVC项目模型下首先在Views文件下创建一个名为User的文件夹1.增删改查时需要注意Roles表的RoleId的数据,增加的数据必须在RoleId数据的基础之上。如图表中RoleId没有17这个数据此时增删改查如果是17将会报错。2.添加视图时必然会出现User文件是空的情况,此时布局页不能找到User文件,这时需要手动输入User文件的路径。

m0_74473137的博客 1248

【HarmonyOS】ArkUI的组件扩展

ArkuI的组件扩展主要是通过等装饰器来对于一些常用的自定义组件进行封装, 来简化UI开发流程, 提高自定义组件的可复用性。

2302_79763237的博客 1170

MVC CRUD 的两种方法

//Index.cshtml@model IQueryable&lt;MvcExam2.Models.Product&gt;@{    Layout = null;}&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;    &lt;meta name="viewport" content="width=device-width" /&gt;    &

dxm809的博客 664

服务器基础知识介绍

服务器,不仅仅是一台高性能计算机,更是网络的核心节点,承担着网络服务的责任。然而,相较于普通计算机,服务器对于稳定性、安全性和性能等方面提出了更高的要求,这使得它们在数字化浪潮中傲然独立。在硬件成本结构中,CPU和芯片组占据约50%的成本,内存占15%,外部存储占10%,其余硬件约占25%。服务器的逻辑结构与普通计算机相似,但由于其需要提供高性能计算,对稳定性、可靠性、安全性、可扩展性和可管理性的要求更高。服务器的分类多种多样,根据产品形式可分为塔式服务器、机架服务器、刀片服务器和机柜服务器。

m0_73576645的博客 1883

Ubuntu 20.04下Cube-Studio云原生平台单机部署全攻略(附避坑指南)

本文详细介绍了在Ubuntu 20.04系统上单机部署Cube-Studio云原生平台的完整流程,包括环境准备、Docker配置、Rancher与Kubernetes集群部署以及Cube-Studio核心组件安装。特别提供了官方文档未涵盖的实战技巧和常见问题解决方案,帮助开发者高效完成部署并避免常见陷阱。

weixin_29313423的博客 466

JavaWeb之用MVC模式实现简单的数据CRUD功能

前言 写Java Web项目时会发现,一个中型或者大型项目 随着代码的增多,会发现:代码既可以写在src目录下,也可以 写在WebContent目录下。src下可以建很多包 ,WebContent下可以建很多文件夹。 所以问题就来了:一个新的类 到底往哪个目录下的哪个文件夹里写? 此时解决办法就是:需要一个模式去规范,到底哪个类该往哪里写 MVC设计模式 下面先来看看什么是MVC: M:Model(模型)。应用程序的核心功能,管理这个模块中庸的数据和值(bean, dao);用于状态改变(一般是业务逻辑)如

莱克博尔德的博客 864

Android15音频进阶之音效配置与解析(一百三十一)

本篇目的:Android15音频进阶之音效配置与解析。

Android系统攻城狮 2147

Spring MVC 实现CRUD功能

Spring web项目开发 一、Spring MVC 项目搭建 二、Spring MVC 集成 MyBatis 三、Spring MVC 实现CRUD功能 新增 更新 删除 查询 使用乐观锁在数据库层面防止并发操作 ...

不务正业的野猴子 1215

【人工智能】在 cc-switch 中配置 AnyRouter 接入 Claude Code 完整指南

本文介绍了在cc-switch工具中配置AnyRouter中转服务以接入Claude Code的详细步骤。主要内容包括:1) 准备API令牌和端点地址;2) 填写基础信息和模型参数;3) 保存配置并重启终端生效;4) 常见问题排查方法。重点强调了API地址格式、模型ID准确性以及配置写入的必要性,帮助用户顺利完成中转服务配置,实现Claude 4.5版本的正常使用。

奶爸的编程之路,也就一周冷个三天 3107

YOLOv11涨点改进 | 检测头Head改进篇 | 利用DynamicConv高效动态卷积改进YOLOv11检测头,DyHead通过增强检测头操作,轻量化改进、提高模型目标检测的精度

本文提出了一种基于动态卷积(DynamicConv)的YOLOv11检测头改进方法v11Detect_DyHead。该方法通过引入多专家机制和动态权重调整,在增加参数量的同时保持较低计算复杂度,有效解决了低FLOPs模型难以从大规模预训练中获益的问题。文章详细介绍了DynamicConv模块的原理和实现,包括其参数高效特性、多专家机制和动态权重生成方式。同时提供了完整的代码实现和添加该模块的具体步骤,并给出了相应的YAML配置文件。实验表明,该方法在保持较低计算开销的同时显著提升了模型性能,适用于视觉和语言

Ai缝合怪、助力小伙伴高效发论文 537

【MVC】MVC格式下的CRUD

相关文章: 【MVC】MVC分页 【Servlet】CRUD–修改 【Servlet】CRUD–查找 【Servlet】CRUD–增加 【Servlet】CRUD–删除 1 建表,准备数据 2 准备实体类 Actor.java package bean; public class Actor { private int id; private String first_name; private String last_name; private String last_u

Awt_FuDongLai的博客 2997

AI硬件加速:CPU vs GPU性能对比

AI硬件加速:CPU vs GPU性能对比 关键词:人工智能、硬件加速、CPU、GPU、性能对比、硬件架构、并行计算、优化策略、项目实战 摘要: 本文将深入探讨AI

AI天才研究院 1914

MVC开发模式&三层架构_MyBatis+web的CRUD的实例流程

MVC/MyBatis+web-CRUD MVC思想 目的:实现责任分离,把业务代码从视图中剥离出来 M: Model:模型对象(封装业务操作,算法,可重复使用,JavaBean).DAO Domain V: View:视图(界面,JSP,HTML) C: Controler:控制器(控制界面跳转,Servlet) 三层架构 就是把业务划分成:表现层、业务逻辑层、数据访问层。目的是为了“高内聚低...

小云很优秀 716

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

MVC模式与三层架构

控制器(Controller)调用业务逻辑层(BLL);业务逻辑层调用数据访问层(DAL);业务逻辑层将数据返回给控制器;控制器将数据传递给视图(View);视图展示数据给用户。

/*多学习 不油腻*/ 4854

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

使用MVC实现CRUD

使用MVC实现CRUD 使用MVC实现CRUD时使用到的方法总结: 请求发送时的Restful风格 MVC自动注入对象属性 @modelAttribute提前运行,查询已保存数据 数据隐含模型BindingAwareModelMap使用,与表单提交对象交互 @PathVariable获取URL参数,查询、删除指定id的对象 1-Restful风格 在表单提交时,传统页面只能够提交get与post两个请求,但有办法给表单加上PUT与DELETE请求,操作如下: <form id=

她的妈妈爱上我的博客 497

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

.NET MVC5+EF6简单实现CRUD小案例

这是第一次写博客,只是将自己所学到的东西写下来,写的不好请见谅 使用环境: VS2015+EF6+SQL Server LocalDB(VS2015自带数据库) 创建一个MVC应用程序 选择一个空的项目,记得勾上MVC,不进行身份验证,把右边的勾取消 编写模型类 因为我是打算做一个迷你的用户管理CRUD系统,所以需要创建一个User类,在解决方案资源管理器的Models文件夹下,右击新建类,创...

weixin_44552757的博客 497

[spring] Spring MVC - CRUD 操作

除了 Rest API 部分改成了 Controller 之外,其他没什么变化,还是使用这个实现方式,因此关于 CRUD 的部分——即 hibernate 实现的部分,这里不会过多涉及也因此,这部分的代码实现应该还是挺快的,毕竟主要还是 HTML 模板+controller 实现。

GoldenaArcher的博客 1364

用MVC模式进行CRUD接调存转(配置文件+CRUD)

准备工作 一. 导入自己的项目 二. 配置MVC需要的项目、配置文件… 1.把webapp的 login.xml()文件改成jsp的 1.1.怎么改? 先复制以前的HTML文件里的内容,在新建jsp文件,再把除了jsp文件的第一行(设置编码的)剩下的全部替换掉 2.新建一个文件夹user 3.在user文件夹下建Service(模型层)项目和Servlet(控制层)项目 这里是文件夹名加模型层和控制层 三.配置XML文件(配置文件) 1.步骤:webapp–WEB-INF–>web.xml

Yikh_0809的博客 637

抛弃框架:基于MVC模式的CRUD和Servlet(最简单的JavaWeb程序)

对于一些小项目模块时,很多时候我们使用繁琐的框架实在有些麻烦(导包多还可能版本不兼容,搭建麻烦),当离开框架后我们如何更好的撸代码呢?本文首先感谢我的老师龙sir的授业指导,文中部分代码和思想来源于我的老师,我只是结合自己的编程经验和实际开发对其进行了总结和修改整理,希望同大家分享,如果有不足之处望大家指出,希望大家能够共同学习和进步! 先上图,基于MVC模式的包结构: 然后聊聊增删改

Zyp689的博客 707

Spring MVC之CRUD(简单实现)

初步实现SpringMVC增删改查搭建springMVC环境基本构建CRUD 搭建springMVC环境 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://j

qq_43580544的博客 1300
上一篇: 学生给老师的一道思考题
下一篇: 我来了,在这里当老师了!
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值