4.NetBeans开发服务端servlet(java)的相关内容。

1.数据库准备

create database whoere;                       //创建数据库
use whoere;
create table email(                           //创建数据表,根据需要自行定义,比如基本的账号密码,我还设置了经纬度用于获取用户的位置
`id` int unsigned auto_increment,
`account` varchar(20) not null,
`password` varchar(20) not null,
`Latitude` double,
`Longitude` double,
`Intention` varchar(100),
primary key(`id`)
)engine=InnoDB default charset=utf8;

设置模拟数据(随意):


2.转战NetBeans(各种IDE都可以啦,比如Eclipse、Ij之类的)

安装过程我就不废话了,直接撸码!(需要用到的jar包也放在百度云了,记得导入库中哦)

首先是User类,都是基本的get和set函数。

package net.whoere;
/**
 *
 * @author SuSu
 */
public class User {
    //账户(email)
    private String account;
    //密码
    private String password;
    //经度
    private double Latitude;
    //纬度
    private double Longitude;
    //意图
    private String Intention;

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    
    public double getLatitude(){
        return Latitude;
    }
    
    public void setLatitude(double Latitude){
        this.Latitude = Latitude;
    }
    
     public double getLongitude(){
        return Longitude;
    }
    
    public void setLongitude(double Longitude){
        this.Longitude = Longitude;
    }
    
    public String getIntention(){
        return Intention;
    }
    
    public void setIntention(String Intention){
        this.Intention = Intention;
    }
}

接着是DBManager类,实现数据库的连接与关闭。

package net.whoere;
/**
 *
 * @author SuSu
 */
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class DBManager extends HttpServlet {

    ServletConfig config;                             //定义一个ServletConfig对象
    private static String username;                   //定义数据库用户名
    private static String password;                   //定义数据库连接密码
    private static String url;                        //定义数据库连接URL
    private static Connection connection;             //定义连接

    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);                                  //继承父类的init()方法
        this.config = config;                                //获取配置信息
        username = config.getInitParameter("DBUsername");    //获取数据库用户名
        password = config.getInitParameter("DBPassword");    //获取数据库连接密码
        url = config.getInitParameter("ConnectionURL");      //获取数据库连接URL
    }
//连接数据库
    public static Connection getConnection() {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            connection = DriverManager.getConnection(url, username, password);
        } catch (ClassNotFoundException | InstantiationException
                | IllegalAccessException | SQLException ex) {
            Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex);
        }
        return connection;
    }
//关闭连接,ResultSet是返回数据库的查询内容。
    public static void closeAll(Connection connection, Statement statement,
            ResultSet resultSet) {
        try {
            if (resultSet != null) {
                resultSet.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException ex) {
            Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
//没有ResultSet的是关闭修改、增加数据操作(因为不用返回结果)
     public static void closeAll(Connection connection, Statement statement) {
        try {
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException ex) {
            Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

UserDAO类

package net.whoere;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sf.json.JSONObject;
/**
 *
 * @author SuSu
 */
public class UserDAO {
    //查询账户是否存在,存在返回具体User对象,否则为空。
    public static User queryUser(String account) {
        //连接数据库
        Connection connection = DBManager.getConnection();
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        //SQL查询语句
        StringBuilder sqlStatement = new StringBuilder();
        sqlStatement.append("select * from email where account=?");        //问号?的地方会被account替换

        //设置数据库的字段值
        try {
            preparedStatement = connection.prepareStatement(sqlStatement.toString());
            preparedStatement.setString(1, account);

            resultSet = preparedStatement.executeQuery();                  //执行查找语句,获得返回信息
            User user = new User();
            if (resultSet.next()) {                                        //生成User对象并返回
                user.setAccount(resultSet.getString("account"));           //设置账户、密码,根据返回的内容还可以设置其他信息
                user.setPassword(resultSet.getString("password"));
                return user;
            } else {
                return null;
            }
        } catch (SQLException ex) {
            Logger.getLogger(UserDAO.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        } finally {
            DBManager.closeAll(connection, preparedStatement, resultSet);               //关闭连接
        }
    }
     //查询其他用户的信息,返回json格式,内容包括账号,位置,意图。
     public static JSONObject queryUser()  {
        String sql1="select account,Latitude,Longitude,Intention from whoere.email";    //sql语句
        Connection connection = DBManager.getConnection();
        PreparedStatement preparedStatement = null;
        
        Map<String, String> message = new HashMap<>();
        JSONObject jsonObject = new JSONObject();
        try {
            preparedStatement = connection.prepareStatement(sql1);
        } catch (SQLException ex) {
            Logger.getLogger(UserDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        ResultSet resultSet = null;
        try {
            resultSet = preparedStatement.executeQuery();
            for(int i = 1;resultSet.next();i++) {
                 message.put("account", resultSet.getString("account"));
                 message.put("Latitude", ""+resultSet.getDouble("Latitude"));
                 message.put("Longitude", ""+resultSet.getDouble("Longitude"));
                 message.put("Intention", resultSet.getString("Intention"));
                 jsonObject.put(i, message);
            }
        } catch (SQLException ex) {
            Logger.getLogger(UserDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
            
        DBManager.closeAll(connection, preparedStatement, resultSet);
      
        return jsonObject;
    }
    //修改位置信息
    public static void UpdateLocation(String account,String Latitude,String Longitude) {
        Connection connection = DBManager.getConnection();
        PreparedStatement preparedStatement = null;
        
        //生成SQL代码
        StringBuilder sqlStatement = new StringBuilder();
        sqlStatement.append("update whoere.email set Latitude = ? ,Longitude = ? where account = ?");
         //设置数据库的字段值
        try {
            preparedStatement = connection.prepareStatement(sqlStatement.toString());
            preparedStatement.setString(1, Latitude);
            preparedStatement.setString(2, Longitude);
            preparedStatement.setString(3, account);
            preparedStatement.executeUpdate();
        } catch (SQLException ex) {
            
        } finally {
            DBManager.closeAll(connection, preparedStatement);
        }
    
    }
    //实现注册账号功能(还有些问题!)
    public static void Register(String account,String password){
        //获得数据库的连接对象
        Connection connection = DBManager.getConnection();
        PreparedStatement preparedStatement = null;
        //生成SQL代码
        StringBuilder sqlStatement = new StringBuilder();
        sqlStatement.append("insert into whoere.email (account,password) values (?,?)");
         //设置数据库的字段值
        try {
            preparedStatement = connection.prepareStatement(sqlStatement.toString());
            preparedStatement.setString(1, account);
            preparedStatement.setString(2, password);
            preparedStatement.executeUpdate();
        } catch (SQLException ex) {
            
        } finally {
            DBManager.closeAll(connection, preparedStatement);
        }
    
    }
}

接着我们先建立一个LoginServlet吧,用于登录

package net.whoere;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;

/**
 *
 * @author SuSu
 */
public class LoginServlet extends HttpServlet {
     @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 设置响应内容类型  
        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");

        try (PrintWriter out = response.getWriter()) {

            //获得请求中传来的用户名和密码
            String account = request.getParameter("account").trim();
            String password = request.getParameter("password").trim();

            //密码验证结果
            Boolean verifyResult = verifyLogin(account, password);

            Map<String, String> params = new HashMap<>();
            JSONObject jsonObject = new JSONObject();

            if (verifyResult) {
                params.put("Result", "success");
            } else {
                params.put("Result", "failed");
            }

            jsonObject.put("params", params);
            out.write(jsonObject.toString());
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
    //验证用户名密码是否正确
    private Boolean verifyLogin(String userName, String password) {
        User user = UserDAO.queryUser(userName);
        //账户密码验证
        return null != user && password.equals(user.getPassword());
    }
}


(持续更新中!)

猜你喜欢

转载自blog.csdn.net/qq_42289906/article/details/80707060