[Java][SQL Server][Tomcat] Java本地服务器读取SQL Server中的数据及账号密码核对

前言:该小项目使用 Java Tomcat 本地服务器,实现了读取 SQL Server 数据以及将输入的账号密码与数据库中已有的账号密码进行比对的功能,Java 源代码下载链接:[Java][SQL Server][Tomcat] Java本地服务器读取SQL Server中的数据及账号密码核对

1 系统概述

1.1 系统简介

基于微信小程序实现学校信息门户中校内通知、公示公告、校内新闻和学术讲座的便捷查看。

1.2 术语表

该文档涉及到的术语如表1所示。

表 1 详细设计术语表
序号术语或缩略语说明性定义
1微信小程序微信小程序是一种不需要下载安装即可使用的应用,用户使用微信扫一扫或搜一下即可打开应用。
2数据库数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
3信息门户信息门户是指利用网络浏览器访问组织内部和外部关键信息的单一入口,解决信息超载问题,利用先进的搜索及索引技术构建起一个内联网环境,用来从不同的信息系统和互联网中搜索和获取信息。
4爬虫爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
5PMProject Manager,项目经理
6逻辑层小程序开发框架的逻辑层使用 JavaScript 引擎为小程序提供开发者 JavaScript 代码的运行环境以及微信小程序的特有功能。逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。
7视图层框架的视图层由 WXML 与 WXSS 编写,由组件来进行展示。将逻辑层的数据反映成视图,同时将视图层的事件发送给逻辑层。

1.3 系统运行环境

  1. 软件环境:

系统所需要的软件环境如表2所示。

表 2 系统运行的软件环境
分类名称版本语种
PC操作系统Windows 10家庭中文版简体中文
数据库平台Microsoft SQL Server2019Sql
服务器端IntelliJ IDEA2020.1Java
Tomcat9.0.44
开发环境Java14.0.1Java
  1. 硬件平台

系统运行的硬件平台如表3所示。

表 3 系统运行的硬件平台
设备名称设备要求
PC装有 Java 14.0.1 及以上版本、 Apache Tomcat 对应版本 、Microsoft SQL Server 数据库 2019及以上版本

1.4 开发环境

该程序开发环境如表4所示。

表 4 程序开发环境
分类名称版本语种
PC操作系统Windows 10家庭中文版简体中文
开发平台IntelliJ IDEA2020.1Java
开发平台Tomcat9.0.44Java
数据库平台Microsoft SQL Server2019Sql

2 模块设计

2.1 模块2 Java Tomcat 服务器模块

2.1.1 设计图

该模块的设计图如图1所示。

图1 Java Tomcat 服务器模块设计图

2.1.2 功能描述

该部分包含九个类,该部分为数据库和微信小程序之间的桥梁模块,搭建服务器作为数据库和微信小程序通信的中枢。

2.1.3 输入数据

若需要检验用户的登录名和密码,需要在GET指定URL时同时传递username和password数据。

2.1.4 输出数据

若访问的为用户登录鉴权接口,则根据用户传递的数据返回success(登陆成功)或error(登录失败)。

若访问的为各类通知对应的接口,则返回JSON格式的通知数据,包含信息标题title,发布日期date,文章主体article和文章中包含的图片的URL地址image。

2.1.5 数据设计

该部分的数据设计如表5所示。
表 5 Java Tomcat 服务器模块数据设计
名称数据结构元素类型功能
informationArrayListString存储从数据库中获取的信息
ctDatabaseTable读取数据库的数据
jsonOutputStringchar作为JSON格式的数据供微信小程序读取

2.1.6 算法和流程

1.  **if** 访问通知获取接口:  {
2.    	获取数据库连接  
3.   	从数据库的指定表中读取信息  
4.   	根据不同列名将数据按照对应格式存储到List  
5.List中的数据转换为JSON格式  
6.   **if** 接口被以GET或POST格式访问:  
7.       在网页上输出JSON格式的信息  }
8.   **if** 访问登录鉴权接口:  {
9.   	获取数据库连接  
10.  	获取前端传递的信息  
11.  	将传递的信息与数据库中的信息进行比对  
12.  	**if** 比对成功:  
13.      	在网页上输出 success 的信息  
14.  	**else**:  
15.      	在网页上输出 error 的信息 }

3.4.7 函数实现

该部分的函数说明如表6所示。

表 6 Java Tomcat 服务器模块函数说明
函数名称功能参数返回值算法说明全局变量
informationDatabase构造函数String lableNameNone完成对数据库的链接工作None
getInformation获取通知信息并存储到Notification数组中NoneJSON格式的通知字符串从数据库的指定表中获取信息,根据不同列将信息分类存储,并转换为JSON格式None
Information构造函数信息标题title,发布日期date,文章主体article和文章中图片的URL地址imageNone赋值语句None
doGet网页传递来的信息和回应的信息HttpServletRequest request, HttpServletResponse responseNone当用户使用GET方式访问时给出相应的反应None
doGet网页传递来的信息和回应的信息HttpServletRequest request, HttpServletResponse responseNone当用户使用POST方式访问时给出相应的反应None
userDatabase构造函数NoneNone赋值语句None
checkUser确认登录信息用户登录username, 用户登录密码password若查到,返回对象User,否则返回null将传递进来的信息与数据库信息进行查询比对,若找到,返回信息,否则返回nullNone
getTitle赋值Nonetitle赋值语句None
setTitle取值titleNone赋值语句None
getDate赋值Nonedate赋值语句None
setDate取值dateNone赋值语句None
getArticle赋值Nonearticle赋值语句None
setArticle取值articleNone赋值语句None
getImage取值Noneimage赋值语句None
setImage赋值imageNone赋值语句None
getUsername赋值Noneusername赋值语句None
setUsername取值usernameNone赋值语句None
getPassword赋值Nonepassword赋值语句None
setPassword取值passwordNone赋值语句None

代码:

/**
 *  Name:       Information.java
 *  Author:     LIN Guocheng
 *  Date:       2021-3-28
 *  Function:   用于存取校内通知的标题、发布时间和文章主体。
 */
public class Information {

    private String title;
    private String date;
    private String article;
    private String[] image;

    public Information(String title, String date, String article, String[] image) {
        this.title = title;
        this.date = date;
        this.article = article;
        this.image = image;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getArticle() {
        return article;
    }

    public void setArticle(String article) {
        this.article = article;
    }

    public void setImage(String[] image) {
        this.image = image;
    }

    public String[] getImage() {
        return image;
    }
}

package myServlet;

import java.io.IOException;
import java.io.Writer;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import database.informationDatabase;



public class announcementServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        //设置响应头允许ajax跨域访问
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "GET,POST");

        Writer out = response.getWriter();
        String jsonOutput = "";
        informationDatabase nd = new informationDatabase("schoolAnnouncements");
        try {
            jsonOutput = nd.getInformation();
            out.write(jsonOutput);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }


        out.flush();
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request,response);

    }

}

package database;

import model.Information;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.fastjson.*;



public class informationDatabase {
    String lableName = "";
    Connection ct = null;
    PreparedStatement pestmt = null;
    String jsonOutput = "";
    private List<Information> information = new ArrayList<Information>();
    public informationDatabase(String lableName) {
        try {
            this.lableName = lableName;
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            ct = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=schoolNews", "这里输入数据库用户名", "这里输入数据库密码");
            if (ct != null) {
                System.out.println("数据库连接成功");
            } else {
                System.out.println("数据库连接失败");
            }

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

    // 获取通知信息并存储到Notification数组中
    public String getInformation() throws SQLException {
        try {
            System.out.println("正在打包发送 校内通知");

            pestmt = ct.prepareStatement("select * from " + this.lableName + " order by date desc");
            ResultSet rs = pestmt.executeQuery(); // 将数据库响应的查询结果放在rs中

            while(rs.next()) {

            	//System.out.println(rs.getString(1)+",");	//标题
            	//System.out.println(rs.getString(2)+",");
            	//System.out.println(rs.getString(3)+",");
                String[] imgUrls = rs.getString(4).split(","); // 将image字符串按逗号分割,成为数组
                Information information = new Information(rs.getString(1),rs.getString(2),rs.getString(3),imgUrls);
                this.information.add(information);
            }
            jsonOutput = JSON.toJSONString(information);
            System.out.println(jsonOutput);
            return jsonOutput;
        } catch (Exception e) {
            e.printStackTrace();
            return "转换JSON出错";
        } finally {
            ct.close();
            pestmt.close();
        }

    }


}
package database;


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

import model.User;

public class userDatabase {
    Connection ct = null;
    PreparedStatement pestmt = null;
    public userDatabase(){
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            ct=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=schoolNews", "数据库用户名", "数据库密码");
            if(ct != null){
                System.out.println("数据库连接成功");
            }
            else{
                System.out.println("数据库连接失败");
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    // 确认登录信息
    public User checkUser(String username,String password) throws SQLException{
        try{
            System.out.println("正在确认登录信息");
            pestmt=ct.prepareStatement("select * from [User] where convert(nvarchar(255),username)=? and convert(nvarchar(255),password)=?");
            pestmt.setString(1, username);
            pestmt.setString(2, password);
            ResultSet rs=pestmt.executeQuery(); // 将数据库响应的查询结果放在rs中
            System.out.println("数据库响应结果为:" + rs.toString());

            User user = new User();

            while(rs.next()){
                user.setUsername(rs.getString(1));//第一个属性
                user.setPassword(rs.getString(2));//第二个属性
                System.out.println("用户信息为:" + user.getUsername() + " " + user.getPassword());
                return user;	///查到就返回对象
            }
            return null;
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }finally{
            ct.close();
            pestmt.close();
        }
    }
}



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;
    }

}
package myServlet;

import java.io.IOException;
import java.io.Writer;
import java.sql.SQLException;

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

import model.User;
import database.userDatabase;


public class userServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        //设置响应头允许ajax跨域访问
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "GET,POST");

        //获取微信小程序get的参数值并打印
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("微信小程序中获得的内容为:username:" + username + " password:" + password);

        userDatabase userDatabase =new userDatabase(); // 建立输入信息比对对象
        HttpSession session=request.getSession(); // 创建保存信息对象
        User user=(User) session.getAttribute("user");

        if(user == null){//第一次进入
            try {
                user= userDatabase.checkUser(username, password);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }///如果账户密码正确,把返回的对象抛给user,不正确对象则为空
        }

        session.setAttribute("user", user);///保存对象
        Writer out = response.getWriter();
        if(user!=null){///有对象,用户名密码正确
            out.write("success");//向小程序返回结果
        }else{//对象为空
            out.write("error");
        }
        out.flush();
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request,response);

    }

}


2.1.8 全局数据结构与该模块的关系

该模块为数据库和微信小程序相互通信的中枢模块,与数据库之间的通信通过JDBC进行,与微信小程序之间的通信依赖于微信小程序的主动访问。

2.2 数据库设计

2.2.1 数据库及数据表

本系统内使用的数据库系统为 Microsoft SQL Server 2019 数据库,数据库中包含表
User, schoolAnnouncements, schoolArticles, schoolLectures 和 schoolNews
五张表,分别用于用户登录鉴权、公告公示、校内通知、学术讲座和校内新闻的存储。

2.2.2 数据结构设计

五张表中,User 表的数据结构设计如表7所示,schoolAnnouncements, schoolArticles,
schoolLectures 和 schoolNews 表的数据结构设计如表8所示。

表 7 User 表的数据结构设计
列名数据类型允许Null值
usernamenchar(10)
passwordntext
表 8 schoolAnnouncements, schoolArticles, schoolLectures 和 schoolNews 表的数据结构设计
列名数据类型允许Null值
titlenvarchar(50)
datenvarchar(50)
articlentext
imagentext
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值