使用mvc设计模式来实现安卓的服务器端登录功能的小demo

mvc设计模式常常用于javaweb项目中,它的主要目的是将业务的逻辑、数据访问、界面分离。
在这个demo中,我们使用jdbc来连接数据库。并且在安卓客户端访问了之后,网页将返回一个json。

你需要用到的一些工具

在写代码之前,你肯定需要一些工具,他们有软件,也有你在开发需要用到的一些jar包:

  1. eclipse(可以创建动态web项目)、mysql数据库、tomcat、navicat数据库操作软件
  2. 所需要的jar包 gson(将对象转化为json)、mysql-connector-java(jdbc中用于连接数据库)所需要的jar包
  3. 项目的目录如下:
    项目目录

一、使用navicat创建数据表

新建一个stus表 如上图所示
之后在表中填入数据,以便后面的验证。

二、web工程连接数据库

创建来了一个工具类,用来连接数据库
里面加载了一个配置文件jdbc.properties,里面放了使用jdbc连接数据库的一些参数
配置文件的一些内容
第一行为jdbc加载的驱动(不用管) 第二行为连接的数据库的地址(图上显示的就是我连接的数据库为我本机的student) 第三行、第四行则是你数据库的用户名和密码

工具类具体代码如下:

package com.demo.util;

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;

public class JDBCUtil {

	static String driverClass = null;
	static String url = null;
	static String name = null;
	static String password = null;

	static {
		try {
			// 1. 创建一个属性配置对象
			Properties properties = new Properties();
			// InputStream is = new FileInputStream("jdbc.properties");

			// 使用类加载器,去读取src底下的资源文件。 
			InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
			// 导入输入流。
			properties.load(is);

			// 读取属性
			driverClass = properties.getProperty("driverClass");
			url = properties.getProperty("url");
			name = properties.getProperty("name");
			password = properties.getProperty("password");

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 获取连接对象
	 * 
	 * @return
	 */
	public static Connection getConn() {
		Connection conn = null;
		try {
			Class.forName(driverClass);
			// 静态代码块 ---> 类加载了,就执行。 java.sql.DriverManager.registerDriver(new Driver());
			// DriverManager.registerDriver(new com.mysql.jdbc.Driver());
			// DriverManager.getConnection("jdbc:mysql://localhost/test?user=monty&password=greatsqldb");
			// 2. 建立连接 参数一: 协议 + 访问的数据库 , 参数二: 用户名 , 参数三: 密码。
			conn = DriverManager.getConnection(url, name, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}

	/**
	 * 释放资源
	 * 
	 * @param conn
	 * @param st
	 * @param rs
	 */
	public static void release(Connection conn, Statement st, ResultSet rs) {
		closeRs(rs);
		closeSt(st);
		closeConn(conn);
	}

	public static void release(Connection conn, Statement st) {
		closeSt(st);
		closeConn(conn);
	}

	private static void closeRs(ResultSet rs) {
		try {
			if (rs != null) {
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			rs = null;
		}
	}

	private static void closeSt(Statement st) {
		try {
			if (st != null) {
				st.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			st = null;
		}
	}

	private static void closeConn(Connection conn) {
		try {
			if (conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			conn = null;
		}
	}
}

三、dao层数据操作

先定义一个接口UserDao,再写一个实现类UserDaoImpl来实现接口中的方法。

package com.demo.dao;

/*
 * dao定义了对用户表的访问规则
 */
public interface UserDao {

	// 客户端的登录返回一个boolean类型验证是否登录成功
	boolean login(String userName, String passWord);
}

这个login方法中使用的一些对象Connection、PreparedStatement、ResultSet 都是jdbc中常用的一些对象,就不展开叙述了,书中讲的很详细。

package com.demo.dao.impl;

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

import com.demo.dao.UserDao;
import com.demo.util.JDBCUtil;

public class UserDaoImpl implements UserDao {
	Connection conn = null;
	PreparedStatement ps = null;
	ResultSet rs = null;

	@Override
	// 返回类型为判断的结果
	public boolean login(String userName, String passWord) {
		// TODO Auto-generated method stub

		try {
			//连接数据库
			conn = JDBCUtil.getConn();
			
			//sql语句 检索stus表中username 和 password
			String sql = "select * from stus where username=? and password=?";

			// 创建ps对象,ps中存储了数据库中的数据
			ps = conn.prepareStatement(sql);
			ps.setString(1, userName);
			ps.setString(2, passWord);
			// 进行判断 rs为判断的结果
			rs = ps.executeQuery();
			return rs.next();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JDBCUtil.release(conn, ps, rs);
		}

		return false;
	}

}

四、servlet容器与业务逻辑

json对象:里面封装了我们需要返回json的一些参数
规定:code=0,登录成功 code=1,登录失败

package com.demo.bean;

public class jsonbean {
	public int code;
	public String msg;

	public int getCode() {
		return code;
	}

	public void setCode(int code) {
		this.code = code;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

}

使用get请求

package com.demo.servlet;

import java.io.IOException;

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

import com.demo.bean.jsonbean;
import com.demo.dao.UserDao;
import com.demo.dao.impl.UserDaoImpl;
import com.google.gson.Gson;

/**
 * Servlet implementation class LoginServlet
 */
public class LoginServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 提交的数据有可能有中文
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=utf-8");

		// 1.获取客户端提交的信息
		String userName = request.getParameter("username");
		String passWord = request.getParameter("password");
		System.out.println("userName=" + userName + " passWord=" + passWord);
		//2.实例化一个userDaoImpl来处理数据
		UserDao dao = new UserDaoImpl();
		boolean isSuccess = dao.login(userName, passWord);
		// 3.针对dao的返回结果,做出相对应的响应,并且将数据分装进jsonbean对象中
		jsonbean jb = new jsonbean();
		if (isSuccess) {
			// response.getWriter().write("登录成功");
			jb.setCode(0);
			jb.setMsg("登录成功");
		} else {
			// response.getWriter().write("用户名或者密码错误");
			jb.setCode(1);
			jb.setMsg("登录失败");
		}
		//4.将jsonbean对象转化为json数据 并且将响应打印出来
		Gson gson = new Gson();
		String json = gson.toJson(jb);
		response.getWriter().println(json);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

五、将项目部署到tomcat上,并且验证是否成功

提前在数据库中插入数据
在这里插入图片描述
在下图中,用get请求体请求,username为qimin,password为123,与数据库匹配成功,返回一段json数据给客户端。
在这里插入图片描述
到目前为止,这个简单的登录功能的demo就开发完了。

接下来的工作就是开发安卓客户端,安卓客户端的工作是通过一个请求,发送对应的username和password,然后服务器就会检索这个数据,来判断用户名和密码是否正确,再返回对应的一个json。安卓客户端再根据返回的json,来进行下一步的业务逻辑。

第一次写博客,我也是个java的初学着,里面有些术语还是会很含糊不清,写的不好的地方,多多理解。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问题。首先,MVC是一种常见的软件架构模式,它将应用程序分为三个核心部分:模型、视图和控制器。DAO是数据访问对象的缩写,它是一种数据访问设计模式,用于将数据访问逻辑与业务逻辑分离。 对于一个web购物系统,我们可以按照以下步骤进行设计实现: 1. 模型层:模型层负责处理数据的存储和管理。我们可以使用数据库来存储商品信息、订单信息等。使用DAO设计模式,我们可以创建一个商品DAO和一个订单DAO,用于处理数据的增、删、改、查等操作。同时,我们也需要定义商品和订单的数据模型,以便在控制器和视图中进行使用。 2. 视图层:视图层负责呈现数据给用户。我们可以使用HTML、CSS和JavaScript等技术来设计实现网页界面。在实现网页界面时,我们可以使用模板引擎来动态生成HTML代码,以便根据数据模型中的内容来呈现不同的页面。 3. 控制器层:控制器层负责处理用户的请求和业务逻辑。我们可以使用PHP、Java或其他编程语言来实现控制器层。在控制器层中,我们可以调用商品DAO和订单DAO中的方法来访问数据库,并根据用户的请求来实现不同的业务逻辑。例如,当用户提交订单时,我们可以从商品DAO中查询商品信息,并将订单信息插入到订单DAO中。 以上就是使用MVC+DAO设计模式设计实现一个web购物系统的大致思路。当然,在实际开发中,还需要考虑安全性、性能优化、用户体验等方面的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值