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

本文探讨了在小型项目中避免使用复杂框架的情况,分享了一种基于MVC模式的JavaWeb程序实现。通过包结构、数据库配置、CRUD操作以及URL过滤和字符集设置,展示了如何用Servlet进行基础功能开发。文章还提到了设计模式的应用,如单例模式和策略模式,并鼓励读者尝试使用反射机制和注解,以简化配置。
摘要由CSDN通过智能技术生成

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

先上图,基于MVC模式的包结构:


然后聊聊增删改查,开始上Util包代码:

首先数据库配置文件的加载——JdbcUtil

1、(.properties文件的加载方式很多,大家可以上论坛搜索下)

2、单例模式此处建议使用饿汉式减少线程冲突,不建议以下模式,设计模式大家可以参考我上传的 “Java常用设计模式源码”

http://download.csdn.net/detail/zyp689/9828252

package com.zyp168.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/*
 * 数据库访问JDBC工具类
 */
public class JdbcUtil {
	// ---单例模式---

	private static JdbcUtil jdbcUtil;
	private static Properties properties = new Properties();
	private static String jdbc_driver;
	private static String jdbc_url;
	private static String jdbc_user;
	private static String jdbc_pwd;
	//懒汉式-单例模式
	private JdbcUtil() {

	}
	public static JdbcUtil getInstance() {
		if (jdbcUtil == null) {
			jdbcUtil = new JdbcUtil();
		}
		return jdbcUtil;

	}
	// ---静态代码块---
	static {
		InputStream inputStream = Thread.currentThread().getContextClassLoader()
				.getResourceAsStream("mysqlConfig.properties");
		try {
			properties.load(inputStream);
		} catch (IOException e) {
			e.printStackTrace();
		}
		jdbc_driver = properties.getProperty("driver");
		jdbc_url = properties.getProperty("url");
		jdbc_user = properties.getProperty("user");
		jdbc_pwd = properties.getProperty("pwd");
		try {
			Class.forName(jdbc_driver);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	// ---获取连接---
	public Connection getConnection() {
		Connection connection = null;
		try {

			connection = DriverManager.getConnection(jdbc_url, jdbc_user, jdbc_pwd);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;

	}

	// ---关闭资源---
	public void close(Connection connection, Statement stmt, ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if (stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if (connection != null) {
			try {
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}

注:单例模式

package com.zyp168.single;

/**
 * 单例模式
 * 
 * 饿汉式的优势在于能够有效解决线程并发问题; static修饰的变量会被作为GC的root根节点不能被回收;static
 * 字段(类的成员变量)在类的所有实例中只存在一次;static会将被修饰者与类直接产生引用关系,而非与类的实例。
 * final修饰的变量值不会改变可节省空间,修饰的类不能被继承。
 * 
 */
public class SingleTest {
	public static void main(String[] args) {
		// 由于private修饰并重写了构造方法,故不能使用new LSingle()创建对象
		LSingle.getInstance();
		ESingle.getInstance();
	}
}

/*
 * 懒汉式
 */
class LSingle {
	private static LSingle lSingle = null;

	private LSingle() {
		//拒绝外部类new LSingle()方式创建对象
	}

	public static LSingle getInstance() {
		if (lSingle == null) {
			lSingle = new LSingle();
		}
		return lSingle;
	}

}

/*
 * 饿汉式
 */
class ESingle {
	// 此处final是为了节省空间,可以不要
	private static final ESingle eSingle = new ESingle();

	private ESingle() {
		//拒绝外部类new ESingle()方式创建对象
	}

	public static ESingle getInstance() {
		return eSingle;
	}
}
注:不同数据库的配置文件格式:(下面是mysql版、 oracle XE版、sqlserver2008 XE版)



其次CRUD模版——JdbcTemplate

package com.zyp168.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


/*
 * Jdbc的模板:提取出更新和查询方法封装
 */
public class JdbcTemplate {
	// 单例模式:static修饰的字段可以直接建立引导
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值