MVC简单分层思想(连接数据库)

图片内容是所有的包名,文件名。

1.创建(M)模型

package oa.bean;

public class User {

    private String userName;
    private String passWord;

    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassWord() {
        return passWord;
    }
    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    @Override
    public String toString() {
        return "User [userName=" + userName + ", passWord=" + passWord + "]";
    }

}

2.创建DAO层

创建Dao层接口

package oa.dao;

import oa.bean.User;

/**
 * @author Administrator
 *
 */
public interface IUserDao {

    public boolean login(User user);

    public boolean insert(User entity);
}

2.创建Dao层实现类

package oa.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import oa.Util.JDBCuntl;
import oa.bean.User;

public class UserDaoImpl implements IUserDao {

    // 封装数据库操作属性

    Connection conn = null;

    PreparedStatement pstm = null;

    ResultSet rs = null;

    // 第一步:声明返回值变量
    boolean falg = false;

    // 登录
    @Override
    public boolean login(User user) {

        // 第二步:获取连接对象
        try {
            conn = JDBCuntl.getConnection();
            // 第三步:声明sql语句
            String sql = "select * from user";

            // 第四步:根据sql语句创建预处理对象
            pstm = conn.prepareStatement(sql);

            // 第五步:执行查询
            rs = pstm.executeQuery();

            // 第六步:判断
            while (rs.next()) {
                String uname = rs.getString(1);
                String upwd = rs.getString(2);

                if (uname.equals(user.getUserName())
                        && upwd.equals(user.getPassWord())) {
                    return true;
                }
            }

        } catch (Exception e) {

            e.printStackTrace();
        } finally {
            // 第八步:释放资源
            try {
                JDBCuntl.close(rs, pstm, conn);
            } catch (SQLException e) {

                e.printStackTrace();
            }
        }

        // 判断
        /*
         * if("admin".equals(user.getUserName()) &&
         * "123456".equals(user.getPassWord())){ return true; }else{ return
         * false; }
         */

        return false;
    }

    // 注册
    @Override
    public boolean insert(User entity) {

        try {
            // 第二步:获取连接对象
            conn = JDBCuntl.getConnection();

            // 第三步:声明sql语句(插入)
            String sql = "insert into user(userName,passWord) values(?,?)";

            // 第四步:根据sql语句出创建对象
            pstm = conn.prepareStatement(sql);

            // 第五步:为占位符赋值
            int index = 1;
            pstm.setObject(index++, entity.getUserName());
            pstm.setObject(index++, entity.getPassWord());

            // 第六步:执行语句
            int i = pstm.executeUpdate();

            // 第七步:判断执行
            if (i > 0) {
                falg = true;
            }

        } catch (Exception e) {

            e.printStackTrace();
        } finally {
            try {
                JDBCuntl.close(null, pstm, conn);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return falg;
    }

}

3.创建Service层

1.创建service层接口

package oa.service;

import oa.bean.User;

public interface IUserService {

	public boolean login(User user);

	public boolean insert(User entity);
}

2.创建service的实现类

package oa.service;

import oa.bean.User;
import oa.dao.IUserDao;
import oa.dao.UserDaoImpl;

public class UserServiceImpl implements IUserService {

	// 封装实体操作类
	private IUserDao uDao = new UserDaoImpl();

	@Override
	public boolean login(User user) {

		return uDao.login(user);
	}

	@Override
	public boolean insert(User entity) {

		return uDao.insert(entity);
	}

}

4.建立一个工具链接数据库

package oa.Util;

import java.sql.*;
import java.util.Properties;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;

/**
 * 获取数据库连接对象的工具类
 * @author Administrator
 * @version 1.0
 */
public class JDBCuntl {

    private static String driverClass = null;
    private static String url = null;
    private static String user = null;
    private static String password = null;

    //通过静态块获取jdbc.properties中的数据库驱动信息并初始化静态成员变量
    static{
        Properties props = new Properties();

        InputStream is = JDBCuntl.class.getClassLoader().getResourceAsStream("jdbc.properties");

            try {
                props.load(is);

                driverClass = props.getProperty("jdbc.driver");
                url = props.getProperty("jdbc.url");
                user = props.getProperty("jdbc.user");
                password = props.getProperty("jdbc.password");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            /*driverClass="com.mysql.jdbc.Driver";
            url="jdbc:mysql://localhost:3306/user";
            user="root";
            password="1";*/

    }

    /**
     * 根据获取的数据库驱动信息来创建数据库连接对象并返回
     * @return 连接对象
     * @throws Exception
     */
    public static Connection getConnection() throws Exception{
        Connection conn = null;

        Class.forName(driverClass);

        conn = DriverManager.getConnection(url, user, password);

        return conn;

    }

    /**
     * 统一关闭JDBC资源的方法
     * @param rs 结果集对象
     * @param stmt 语句对象
     * @param conn 连接对象
     * @throws SQLException
     */
    public static void close(ResultSet rs,Statement stmt,Connection conn) throws SQLException{
        if(rs != null){
            rs.close();
            rs = null;
        }

        if(stmt != null){
            stmt.close();
            stmt = null;
        }

        if(conn != null){
            conn.close();
            conn = null;
        }
    }

}

其中的文件是方便读取数据库,也方便更改数据库
文件内容是:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/user
jdbc.user=root
jdbc.password=1

如果连接数据库有问题,可以测试数据库
测试代码:

package oa.Util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class TestUtil {

    /**
     * @param args
     */
    public static void main(String[] args) {

        try {
            Connection conn=JDBCuntl.getConnection();
            PreparedStatement psmt=conn.prepareStatement("select * from user");
            ResultSet rs=psmt.executeQuery();

            while (rs.next()) {

                System.out.println(rs.getString(1)+"\t"+rs.getString(2));
            }
            JDBCuntl.close(rs, psmt, conn);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

5.创建Servlet(控制器 C)

package oa.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

public class LoginSuccess extends HttpServlet {

	/**
	 * Constructor of the object.
	 */
	public LoginSuccess() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 *
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doPost(request, response);
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 *
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();

		out.println("登录成功!欢迎你:" + request.getParameter("user"));

		out.flush();
		out.close();
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
	}

}

6.创建登录页面,注册页面

<!DOCTYPE html>
<html>
<head>
<title>Login.html</title>

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

<script type="text/javascript">
	function register() {

		window.location = "register.html";

	}
</script>

</head>

<body>
	<h1>欢迎使用XXXX点餐系统</h1>
	<form action="LoginServlet" method="post">
		用户名:<input type="text" name="user"><br> <br> 密码:<input
			type="password" name="pwd"><br> <br> <input
			type="submit" value="提交">     <input
			type="button" value="注册" onclick="register()">     <input
			type="reset" value="重置">
	</form>
</body>
</html>

7.创建一些跳转页面(成功,失败页面)

成功页面   此处用servlet实现

response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();

		out.println("登录成功!欢迎你:" + request.getParameter("user"));

		out.flush();
		out.close();

失败页面    

response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();

		out.print("登录失败!用户名或者密码错误!");

		out.flush();
		out.close();

8.创建注册页面和注册成功失败页面

package oa.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

import oa.bean.User;
import oa.service.IUserService;
import oa.service.UserServiceImpl;

public class RegisterService extends HttpServlet {

	/**
	 * Constructor of the object.
	 */
	public RegisterService() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 *
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doPost(request, response);
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to
	 * post.
	 *
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();

		// 获取用户输入的数据
		String userName = request.getParameter("user");
		String passWord = request.getParameter("pwd");

		request.setCharacterEncoding("UTF-8");

		// 创建实体类
		User entity = new User();

		// 为实体对象赋值
		entity.setUserName(userName);
		entity.setPassWord(passWord);

		// 调用Service层实现用户登录业务
		IUserService uService = new UserServiceImpl();

		boolean falg = uService.insert(entity);

		if (falg==true) {
			response.sendRedirect("rSuccess.html");
		}else{
			response.sendRedirect("rFail.html");
		}

		out.flush();
		out.close();
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException
	 *             if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
	}

}
注册页面

<!DOCTYPE html>
<html>
  <head>
    <title>register.html</title>

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>

  <body>
    <form action="RegisterService" method="post">
    用户姓名:<input type="text" name="user"><br/><br/>

    密码:<input type="password" name="pwd"><br/><br/>
     <input type="submit" name="提交" value="提交"><br/>

    </form>
  </body>
</html>

成功页面

<!DOCTYPE html>
<html>
  <head>
    <title>rSuccess.html</title>

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>

  <body>
   	<font color="red" size="6">注册成功</font>
  </body>
</html>

失败页面

<!DOCTYPE html>
<html>
  <head>
    <title>rFail.html</title>

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>

  <body>
   	<font color="red" size="6">注册失败</font>
  </body>
</html>

此处一定要在webRoot下的

        WEB—INF下的

            lib文件内将数据库jar包导入《一定要导入jar包》

时间: 2024-10-14 14:13:22

MVC简单分层思想(连接数据库)的相关文章

【blade的UI设计】理解前端MVC与分层思想(bat面试深度回顾)

前言 这里扯到面试,完全是因为最近校招要来了,很多大三的同学一定按捺不住心中的焦躁,其中有期待也有彷徨,或许更多的是些许担忧,最近在开始疯狂的复习了吧 这里小钗有几点建议给各位: ① 不要看得太重,关心则乱,太紧张反而表现不好 ② 好的选择比坚持更重要 这点小钗便深有体会了,因为当年我是搞.net的,凭着这项技能想进bat简直就是妄想,于是当时我就非常机智的转了前端,另一个同学也非常机智的转了安卓 所以各位想进大公司,还需要提前关注各个公司最大的缺口是什么,找不准缺口基本无望进大公司的 ③ 积累

初识mvc分层思想

首先要清楚的是: mvc是一种设计模式,一种分层思想,没有具体的技术与之对应,无论是js还是java或者其他的技术都可以运用. 既然是分层那么这些层都有哪些职责呢? View层(界面层): 为用户展示数据,渲染由controller层和module层处理完的数据. Controller层(业务逻辑层): 接收界面层的数据,对接受到的数据进行封装和类型转换. 调用模型层的服务进行业务逻辑的处理. 调用合适的视图去渲染数据. Model层(模型层 ): 提供算法,比如:业务算法实现,数据持久算法等.

PHP实现mvc模式的思想

什么是MVC? 简单的说就是将网站源码分类.分层. MVC三个字母的含义: M:Model 模型,负责数据库操作. V:View 视图,负责调用Model调取数据,再调用模板,展示出最终效果. C:Controller 控制器,程序的入口,决定改调用哪个View,并告诉View该做什么. 如此说来,程序的执行顺序是C-V-M 或 C-M ,和MVC的名字正好相反. 为什么要MVC? 1.能使网站程序物理结构更合理. 当用PHP建设一个网站的时候,最笨的方法,你可能把每个页面建成一个PHP文件.如

从Microsoft.AspNet.Identity看微软推荐的一种MVC的分层架构

Microsoft.AspNet.Identity简介 Microsoft.AspNet.Identity是微软在MVC 5.0中新引入的一种membership框架,和之前ASP.NET传统的membership以及WebPage所带来的SimpleMembership(在MVC 4中使用)都有所不同. Microsoft.AspNet.Identity是符合微软开放Owin标准里面Security标准的一种实现.且在MVC 5中默认使用EntityFramework作为Microsoft.A

浅谈单片机程序设计中的“分层思想”

"分层思想"并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用.看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种恍然大悟的感觉.如果说我不懂LCD怎么驱动,那好办,看一下datasheet,参考一下别人的程序,很快就可以做出来.但是如果不懂程序设计的思想的话,会给你做项目的过程中带来很多很多的困惑. 参考了市面上各种各样的嵌入式书籍,MCS-51,AVR ,ARM 等都有看过,但是没有发现有哪本是介绍设计思想的,就算有也是凤毛麟角.写程序不难

分层思想

分层思想也是一种开发模式 servlet的三个功能: (1)接受表单数据 (2)处理业务逻辑 (3)分发转向 但是如果将所有的servlet都放在一起,servlet就会很乱,假设数据库改变,所有有代码都需要重新写,为了减轻servlet的负担,就采用了分层的思想 分层[降低耦合度,提高聚合程度] 将servlet中的服务类代码放在service中, 将servlet中对数据的控制代码放在DAO中, 从而减轻servlet的负担. 分层后的职能: servlet:获取表单数据,调用业务逻辑,分发

Asp.Net MVC学习总结(一)——Asp.Net MVC简单入门

出处:http://www.cnblogs.com/SeeYouBug/p/6401737.html 一.MVC简单入门 1.1.MVC概念 视图(View) 代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML.XML和Applet. 模型(Model) 表示用户对其数据的操作的一个封转.可以分为视图模型(view model)和领域模型(domain models),视图模型就是在视图与控制器之间传输数据的一个封转,而领域模型就是业务逻辑,后台数据模型等的一个集

数据库调优分层思想

数据库调优分层思想 1.调优策略 1)*号的处理(只提取必要字段,减少流量) 最好是用,有用的字段,减少流量. 表结构会改变,增加或者减少某列,如果*号全部查询出来 会造成代码逻辑错误. 2)大SQL(拆分,逐步缩小结果集) 大SQL执行起来非常耗时, where 后面带子句,或者读表联合查询. 或者临时表 暂时存储结果集 3)合理的索引(where子句后面的条件) 4)类型转换(‘’符号的使用) 在进行查询操作的时候把  ‘’带上 5)尽量不要用范围查询,或者缩小检索范围(程序逻辑update

hdu 4845 状压bfs(分层思想)

拯救大兵瑞恩 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 255    Accepted Submission(s): 99 Problem Description 1944年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩.瑞恩被关押在一个迷宫里,迷宫地形复杂,但是幸好麦克得到了迷宫的地形图.