用mvc模式,整理前两次的代码并增加登陆注册
简单的servlet连接mysql数据库 使用mvc的登录注册
commons-dbutils-1.6
mysql-connector-java-5.1.40-bin
c3p0-0.9.5.2
mchange-commons-java-0.2.11
这里就要联系到前面的jsp-1了(以下全复制粘贴)
在MVC的项目中一般不会直接去访问JSP,都是通过.do来转发。
这样做的好处是:
1 所有请求全部通过action来转发,这样便于整体框架的处理。比如,可以加入登陆到某个页面的权限控制,只需要在配置文件中配置,而不用再每个JSP文件中加入相关的逻辑。
2 与数据库,文件等底层存储层连接,读取数据的代码可以在类(action)中执行。这样做,一方面可以将很多方法复用,另一方面使JSP页面的代码变得简单而容易维护。
3 其实.do也就是MVC当中的C,是控制器。在整个系统中起到中央枢纽的作用。先通过它的话就可以把逻辑代码隐藏在后台,使JSP文件作为单纯的VIEW分离出来,降低了系统的耦合性。
基本的意思就是在每次访问页面的时候都要访问一次服务器,并根据其结果判断能否访问。
就是mvc的分层的思想了
jdbcutils(数据库连接池-----c3p0)
package com.javaweb.utils; import java.sql.Connection;
import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; /**
* MAVEN
* 实现数据连接,通过数据库连接池(C3P0来获取DataSource)
* DataSource:数据库连接对象
*
*/
public class JdbcUtils { private static DataSource dataSource=null; static{
//找到c3p0-config里默认名为intergalactoApp的连接池
dataSource=new ComboPooledDataSource("intergalactoApp");
} /**
* 获取数据连接
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException{
return dataSource.getConnection();
} /**
* 关闭数据库连接
* @param conn
* @throws SQLException
*/
public static void closeConn(Connection conn) throws SQLException{
if(conn!=null){
conn.close();
}
} }
上一篇写了那么多的数据库连接池
这次导个jar就简单明了很多了
DBDao(数据库操作工具-----dbutils)
package com.javaweb.dao; import java.sql.Connection;
import java.sql.SQLException;
import java.util.List; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler; import com.javaweb.dao.impl.DBDaoImpl;
import com.javaweb.utils.JdbcUtils; public class DBDao<T> implements DBDaoImpl<T> { private QueryRunner queryRunner=new QueryRunner(); @Override
public List<T> selectAll(String sql, Class<T> clazz, List<Object> params) {
Connection conn=null;
try {
conn = JdbcUtils.getConnection();
if(params!=null && !params.isEmpty()){
return queryRunner.query(conn, sql, new BeanListHandler<>(clazz), params.toArray());
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
} @Override
public T selectOne(String sql, Class<T> clazz, List<Object> params) {
Connection conn=null;
try {
conn = JdbcUtils.getConnection();
if(params!=null && !params.isEmpty()){
return queryRunner.query(conn, sql, new BeanHandler<>(clazz), params.toArray());
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
} @Override
public int insert(String sql, List<Object> params) {
Connection conn=null;
try {
conn = JdbcUtils.getConnection();
if(params!=null && !params.isEmpty()){
return queryRunner.update(conn, sql, params.toArray());
}
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
@Override
public int update(String sql, List<Object> params) {
Connection conn=null;
try {
conn = JdbcUtils.getConnection();
if(params!=null && !params.isEmpty()){
return queryRunner.update(conn, sql, params.toArray());
}
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
} @Override
public int delete(String sql, List<Object> params) {
Connection conn=null;
try {
conn = JdbcUtils.getConnection();
if(params!=null && !params.isEmpty()){
return queryRunner.update(conn, sql, params.toArray());
}
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
} @Override
public int insertOrUpdate(String sql, List params) {
// TODO Auto-generated method stub
return 0;
} }
同上一篇很多玩意,这次一个query就能省下很多不必要的代码
基本代码所要用到的方法都在前两篇有提及
mvc

所以
mvc我就根据目录来说一下了mvc就是model-view-control
其中简单的说
view
就是用户响应的收集,响应结果的显示
用.jsp来表示,webcontent
control
就是对用户响应的任务分配
用servlet来表示,com.javaweb.action
model
就是任务的具体完成
而其中
service是服务类,根据任务来划分什么服务
entity是实体类,就是实体,没什么好说的
utils是工具类,调用数据库,或者对字符串分割等。这类加工型操作
dao.impl是接口,表示应该具有什么操作
dao操作类,实现接口,对数据的操作,重点是逻辑方面
例如
userDao
package com.javaweb.dao; import java.util.List; import com.javaweb.dao.impl.UserDaoImpl;
import com.javaweb.entity.User; public class UserDao extends DBDao<User> implements UserDaoImpl { @Override
public User login(String sql, Class<User> clazz, List<Object> params) {
// TODO Auto-generated method stub
return selectOne(sql,clazz,params);
} @Override
public int register(String sql, List<Object> params) {
// TODO Auto-generated method stub
return insert(sql,params);
} }
假如用户要登录
我可以直接使用DBDao里的selectOne来实现登录
但是方法明里没有用户没有登录
这样逻辑就不清晰了
而我现在用UserDao继承DBDao,并在里面的login调用selectOne
这样一来逻辑就清晰很多了
代码有需要就下载吧
http://pan.baidu.com/s/1bpl9XSj
用mvc模式,整理前两次的代码并增加登陆注册的更多相关文章
- Extjs MVC模式开发,循序渐进(一)
本文讲述extjs mvc的Helloworld,tabPanel,event,页面布局layout等内容. 本页包含:MVC模式案例(一)~MVC模式案例(六),从搭建extjs mvc到点击按钮生 ...
- MVC 模式和模型 2
MVC框架 一个实现 MVC 模式的应用包含模型.视图.控制器 3 个模块: 模型:封装了应用的数据和业务逻辑,负责管理系统业务数据 视图:负责应用的展示 控制器:负责与用户进行交互,接收用户输入.改 ...
- 生活中的MVC模式,一个吃货的理解。
以下是生活中对于MVC模式的领悟,虽然可笑,轻喷. 2015年 8月 26日 M => Model 模型 我认为叫做模具更好的理解.批量加工生产具有相同特征的东西. ...
- 谈谈MVC模式
谈谈MVC模式 作者: 阮一峰 1. 如何设计一个程序的结构,这是一门专门的学问,叫做"架构模式"(architectural pattern),属于编程的方法论. MVC模式 ...
- Spring mvc 模式小结
http://www.taobaotesting.com/blogs/2375 1.spring mvc简介 Spring MVC框架是一个MVC框架,通过实现Model-View-Controlle ...
- [转]MVC模式已死?何不试试MOVE
在36Kr看到一篇译文,主要是提出一些新的概念,升华老的MVC模式.看上很不错,转过来,做个记录. ========================= 华丽的分割线 ================= ...
- MVC模式学习笔记
一.如何设计一个程序的结构,这是一门专门的学问,叫做“架构模式”(architectural pattern),属于编程的方法论. MVC模式就是架构模式的一种,我觉得它不仅适用于开发软件,也适用于其 ...
- 【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)
一. iOS 项目简介 1. iOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类 ...
- MVC模式-----struts2框架
MVC模式-----struts2框架 一.struts MVC模式 1.概述 MVC是模型(model)---视图model(view)---控制器(control)的缩写,是一种用于将逻辑.数据和 ...
随机推荐
- jquery 图片轮换
jquery 图片轮换 1.下载jquery.superslide.2.1.1.js (百度搜索) 2.下载Jquery-1.4.1.js(百度搜索下载) 准备工作好了,下面开始实现 3.html & ...
- CountDownLatch分析
1 什么是CountDownLatch呢? 先看看官网的定义 :一种同步帮助,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成. 现在由我来解释什么是CountDownLatch吧:比如说我 ...
- java虚拟机内存
-Xmx10240m:代表最大堆 -Xms10240m:代表最小堆 -Xmn5120m:代表新生代 -XXSurvivorRatio=3:代表Eden:Survivor = 3 根据Gen ...
- 31.TCP/IP 三次握手与四次挥手
TCP/IP三次握手 TCP建立连接为什么是三次握手,而不是两次或四次? TCP,名为传输控制协议,是一种可靠的传输层协议,IP协议号为6. 顺便说一句,原则上任何数据传输都无法确保绝对可靠,三次握手 ...
- C#----接口的显式实现
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 接口 { ...
- 【mybatis-SqlSession的方法总结】
SqlSession 实例在 MyBatis 中是非常强大的一个类.SqlSession 实例中有所有执行语句的方法,提交或回滚事务,还有获取映射器实例. 在 SqlSession 类中有超过 20 ...
- 微信小程序分列显示数据
效果图 wxml代码 <view class='onehandle5'> <block wx:for="{{3}}" wx:for-index="k&q ...
- BKMyFAQ
邮箱配置如图 发送格式: { "bk_app_code": "bk_monitor", #该字段可以查看文件:/data/install/.app.token ...
- ASP.NET控件之RequiredFieldValidator控件
作用:对textbox或者其他输入框进行非空验证: 属性:ControlToValidate (选择要指向的控件) ErrorMessage(错误,输入要显示的错误信息) 应用方法: 原型: Demo ...
- c# Relative Path convert to Absolute Path
Reference: http://stackoverflow.com/questions/4796254/relative-path-to-absolute-path-in-c http://sta ...