频道栏目
首页 > 资讯 > Android > 正文

Android客户端与Servlet交互逻辑学习之RegisterServlet的具体逻辑

18-07-21        来源:[db:作者]  
收藏   我要投稿

这里主要就慢慢地来解析一下RegisterServlet的具体逻辑

首先吧,我们需要在myeclipse重新创建一个WebProject

在这里我就直接命名为SecondServlet了

创建后我们就能看到这么堆东西了:

我们在src这个文件夹里面创建一个test包用来存放servlet文件:

然后在test包里面就可以创建我们的servlet文件了,当然了,这里创建的就是RegisterServlet

下面我先贴一下RegisterServlet的相关代码吧

package test;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

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

import net.sf.json.JSONObject;


public class RegisterServlet extends HttpServlet {

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

	/**
	 * Destruction of the servlet. 

	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. 

	 *
	 * 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 {
		response.setContentType("text/html;charset=utf-8"); // 设置响应报文的编码格式
		PrintWriter pw = response.getWriter(); // 获取 response 的输出流
		pw.println("xxxx"); // 通过输出流把业务逻辑的结果输出
		pw.flush();
		
	}

	/**
	 * The doPost method of the servlet. 

	 *
	 * 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 {

		String userTable="user";
		String name = request.getParameter("userName"); // 从 request 中获取名为 account 的参数的值
		String password = request.getParameter("userPassword"); // 从 request 中获取名为 password 的参数的值
		System.out.println("name:" + name + "\npassword:" + password); // 打印出来看一看
		ResultSet resultSet;
		String result="";
		int updateResult=-1;
		/* 这里我们做一个最简单的注册逻辑,当然,你的实际业务可以相当复杂 */
		try {
			Connection connect = DBUtil.getConnection();
			Statement statement = (Statement) connect.createStatement(); // Statement可以理解为数据库操作实例,对数据库的所有操作都通过它来实现
			String sqlQuery = "select * from " + userTable + " where userName='" + name + "'";
			resultSet = statement.executeQuery(sqlQuery); // 先查询同样的账号(比如手机号)是否存在
			if(resultSet.next()){ // 已存在
				result ="existed";
			} else { // 不存在
				String sqlInsertPass = "insert into " + userTable + "(userName,userPassword) values('"+name+"','"+password+"')";
				// 更新类操作返回一个int类型的值,代表该操作影响到的行数
				updateResult= statement.executeUpdate(sqlInsertPass); // 插入帐号密码
				if(updateResult!=-1){
					result="ok";
				}else {
					result="false";
					}
				}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
		response.setContentType("text/html;charset=utf-8"); // 设置响应报文的编码格式
		JSONObject object=new JSONObject();
		object.put("result", result);
		String res=JSONObject.fromObject(object).toString();
		PrintWriter out = response.getWriter();
		out.print(res);
		out.flush();
	}

	/**
	 * Initialization of the servlet. 

	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
	}

}

虽然这代码看起来是挺长的,但是在这次要完成的东西中,我们要关注的其实也就只是doPost()方法,因为在客户端方面,我是打算用post方法来发送请求的,所以在Servlet 方面接收数据也就是doPost()。

说了这么多,终于可以进入主题了,那现在就来慢慢分析doPost()的代码吧

String userTable="user";
String name = request.getParameter("userName"); // 从 request 中获取名为 account 的参数的值
String password = request.getParameter("userPassword"); // 从 request 中获取名为 password 的参数的值

首先吧,开始的时候我们需要的就是获取从服务端发送过来的数据了,request.getParmeter()就是这么个作用。


Connection connect = DBUtil.getConnection();
Statement statement = (Statement) connect.createStatement(); // Statement可以理解为数据库操作实例,对数据库的所有操作都通过它来实现

这两句的话就是进行数据库操作了,基本涉及到数据库操作的都需要进行这个操作

另外附上DBUtil的代码,这个工具类用于进行Servlet与数据库连接


package test;

import java.sql.*;

import com.mysql.*;

public class DBUtil {
	private static Connection mConnection;

 /**
  * 获取数据库连接
  * 
  * @return 唯一数据库连接
  */
 public static Connection getConnection() {
  if (mConnection == null) {
String url = "jdbc:mysql://localhost:3306/user"; // 数据库的Url
try {
 Class.forName("com.mysql.jdbc.Driver"); // java反射,固定写法
 mConnection = (Connection) DriverManager.getConnection(url, "root", "1040322934ss");
 System.out.println("创建数据库连接");
} catch (ClassNotFoundException e) {
 e.printStackTrace();
} catch (SQLException e) {
 System.out.println("SQLException: " + e.getMessage());
 System.out.println("SQLState: " + e.getSQLState());
 System.out.println("VendorError: " + e.getErrorCode());
}
  }
  return mConnection;
 }

 /**
  * 查询操作
  * 
  * @param querySql
  *查询操作SQL语句
  * @return 查询
  * @throws SQLException
  */
 public static ResultSet query(String querySql) throws SQLException {
  Statement stateMent = (Statement) getConnection().createStatement();
  return stateMent.executeQuery(querySql);
 }

 /**
  * 插入、更新、删除操作
  * 
  * @param insertSql
  *插入操作的SQL语句
  * @return
  * @throws SQLException
  */
 public static int update(String insertSql) throws SQLException {
  Statement stateMent = (Statement) getConnection().createStatement();
  return stateMent.executeUpdate(insertSql);
 }

 /**
  * 关闭数据库连接
  */
 public static void closeConnection() {
  if (mConnection != null) {
try {
 mConnection.close();
 mConnection = null;
} catch (SQLException e) {
	System.out.println("数据库关闭异常:[" + e.getErrorCode() + "]" + e.getMessage());
}
  }
 }
}

url,连接数据库的用户名和密码自己定义

url为所连接数据库的路径

这部分就是具体的查表逻辑了,定义mysql查询语句,然后用statement.executeQuery()进行数据库操作,操作完后会返回一个resultSet对象,resultSet对象存放了查询到的内容

查询完后, 需要执行帐号存在判断,如果resultSet是有内容的,就说明数据库查到了已存在要注册的帐号。resuletSet.next()就是判断resultSet对象是否有内容的

对应查询的结果,返回不同的内容给客户端。例如查到了,想返回给客户端的就是existed。

最后,这部分就是准备返回东西给客户端了。可以看出,我们主要是想把那个result 返回给客户端。

在之前我们的result只是一个只有结果的字符串,就比如"existed"这样而已,我们并不想返回这么个东西给客户端,返回的结果应该是一个json主体的字符串才对。 那么我们需要做的就是

单纯的字符串→jsonObject对象

jsonObject对象→json主体的字符串

转化到了最后,返回的应该是{"result":"existed"}这么一个字符串,而不是"existed"

到了这里,RegisterServlet端解析完毕

相关TAG标签
上一篇:Maven打jar包,排除部分包
下一篇:iOS开发之有关SDWebImage的知识点总结
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站