java做的QQ怎么实现把聊天记录插到数据库中!!!

java做的QQ怎么实现把聊天记录插到数据库中!!!,第1张

先看你的数据库类型是什么,要先下载对应数据库的数据库驱动,具体连接方法请参见:http://database.51cto.com/art/201006/204217.htm 或者http://blog.csdn.net/cxwen78/article/details/6863696 ,这里是一个连接mysql的例子,其他数据库请搜索java常用数据库连接字符串,应该能找到,只需要更换连接字符串和驱动就可以了,代码几乎不用更改。

Java Web 实现网页聊天可以分为以下几个步骤:

1. 前端页面设计:设计网页聊天室 UI 界面,包括聊天消息显示、输入框、发送按钮等。

2. 后端实现:采用 Java Web 框架,如 Spring、Spring MVC、Spring Boot,搭建后台服务器,接收前端的消息,处理和存储聊天记录数据,并将聊天记录发送给前端。

3. Ajax 实现前后端交互:使用 Ajax 技术实现前端页面和服务器之间的实时数据传输。

4. WebSocket 实现实时通信:使用 WebSocket 协议,建立客户端和服务器之间的连接,实现即时消息通信,并提供在线状态检测功能。

5. 聊天记录存储:使用数据库技术,如 MySQL、Oracle 等,存储聊天记录数据,并实现聊天记录的查看和搜索功能。

需要注意的是,Java Web 实现网页聊天需要考虑消息的加密和用户身份验证等安全问题,并使用线程池等技术优化服务器性能,提高聊天室的并发能力。

综上所述,Java Web 实现网页聊天比较复杂,需要前、后端技术的综合运用。但是,Java Web 框架提供了很多优秀的工具和解决方案,减轻了开发人员的工作负担,同时 Java 语言本身也具有跨平台、高效稳定等优点,适合开发服务器端应用。

服务端 用户名 y 密码 1 客户端代码在我的评论里,这敲不了那么多字,没办法。

登陆实现类:class Login

package com.server

import java.awt.Color

import java.awt.Font

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import java.awt.event.WindowAdapter

import java.awt.event.WindowEvent

import javax.swing.JButton

import javax.swing.JFrame

import javax.swing.JLabel

import javax.swing.JPasswordField

import javax.swing.JTextField

public class Login {

boolean f=false//按登录时设置的一个标志

private JFrame frame = new JFrame("Welcome To MLDN")

//设置窗体

private JButton submit = new JButton("登陆")//设置登录按钮

private JButton reset = new JButton("重置")//设置重置按钮

private JLabel nameLab = new JLabel("服务器:") //标签实例化

private JLabel passLab = new JLabel("密 码:")//标签实例化

private JLabel infoLab = new JLabel("服务器登陆系统")//标签实例化

private JTextField nameText = new JTextField(10)//单行文本输入条

private JPasswordField passText = new JPasswordField() //单行密码文本输入条

public Login(){//登录窗口构造方法

Font fnt = new Font("Serief",Font.ITALIC + Font.BOLD,12)//设置字体

infoLab.setFont(fnt) // 设置标签的显示文字

submit.addActionListener(new ActionListener(){ //采用内部匿名类

public void actionPerformed(ActionEvent e){

if(e.getSource()==submit){ //判断触发器源是否是提交按钮

String tname = nameText.getText() //得到输入的用户名

String tpass = new String(passText.getPassword()) //得到输入的密码,此时通过getPassageword()方法返回的是字符数组

LoginCheck log = new LoginCheck(tname,tpass) //实例化LoginCheck对象,传入输入的用户名和密码

if(log.validate()){//对用户名和密码进行验证

try{ //线程异常处理try

Thread.sleep(2000) //2秒后打开聊天窗口

f=true//登录成功后的表示项为true

frame.dispose() //关闭本窗口

}catch(Exception e1){//异常获取

e1.printStackTrace()

}

}else{

infoLab.setText("登陆失败,错误的用户名或密码!") //登录失败

}

}

}

})

reset.addActionListener(new ActionListener(){ //采用内部匿名类

public void actionPerformed(ActionEvent e){

if(e.getSource()==reset){ //判断触发器源是否是提交按钮

nameText.setText("")//设置文本框中的内容

passText.setText("")//设置文本框中的内容

infoLab.setText("服务器登陆系统")//恢复标签显示

}

}

})

frame.addWindowListener(new WindowAdapter(){//加入窗口监听

public void windowClosing(WindowEvent e){ }

})// 加入事件

frame.setLayout(null)//使用绝对定位

nameLab.setBounds(5,5,60,20)//设置标签的位置及大小

passLab.setBounds(5,30,60,20)//设置标签的位置及大小

infoLab.setBounds(5,65,220,30)//设置标签的位置及大小

nameText.setBounds(65,5,100,20)//设置文本域的位置及大小

passText.setBounds(65,30,100,20)//设置密码域的位置及大小

submit.setBounds(165,5,60,20)//设置按钮的位置及大小

reset.setBounds(165,30,60,20)//设置按钮的位置及大小

frame.add(nameLab)//向窗体加入标签

frame.add(passLab)//向窗体加入标签

frame.add(infoLab)//向窗体加入标签

frame.add(nameText)//向窗体加入文本框

frame.add(passText)//向窗体加入密码框

frame.add(submit)//向窗体加入按钮

frame.add(reset) //向窗体加入按钮

frame.setSize(280,130)//设置窗体大小

frame.getContentPane().setBackground(Color.green) //设置窗体的背景颜色

frame.setLocation(300,200) //设置窗体在电脑桌面上的位置

frame.setVisible(true)//显示窗口

while(f==false){ //当登录失败时,一直循环运行,

}

new MyServer()//显示窗体页面

}

}

验证登陆实现类 class LoginCheck

package com.server

public class LoginCheck {

private String name //用户名

private String password //密码

//构造方法

public LoginCheck(String name,String password){

this.name = name //传递用户名

this.password = password //传递密码

}

//验证用户名和密码

public boolean validate(){

//验证方法

if("y".equals(name)&&"1".equals(password)){ //判断用户名和密码是否正确

return true//返回true

}else{

return false //返回false

}

}

}

package com.server

import java.awt.*

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import java.io.BufferedReader

import java.io.InputStreamReader

import java.io.PrintWriter

import java.net.ServerSocket

import java.net.Socket

import java.text.DateFormat

import java.util.Date

import javax.swing.*

聊天实现类 class MyServer

public class MyServer {

protected JLabel lab10

// 全体变量,做传递的一个组件

String s = "已经成功连接"

// 初始字符串,在两个聊天窗口链接成功时输出,同时作为两个窗口传递字符的一个变量

// 构造方法

public MyServer(){

try{//异常处理

JFrame frame=new JFrame("服务器窗口")

//设置窗体

frame.setLayout(null)

//让布局管理器为空,使用绝对定位

Font fnt=new Font("Serief",Font.PLAIN,40)//字体设置

Font fnt1=new Font("Serief",Font.PLAIN,20)//字体设置

//我的用户名显示

JLabel lab1=new JLabel("服务器名:",JLabel.LEFT)

//标签实例化,文本左对齐

lab1.setBounds(8, 10, 100, 20)

//设置组件位置及大小

frame.add(lab1)

//添加组件

JTextField text2=new JTextField(30)//单行文本输入组件

text2.setBounds(150, 10, 200, 20)//设置组件位置及大小

text2.setEnabled(false)//文本条不可编辑

text2.setText("笑笑聊天室")//输入内容

text2.setFont(fnt1)//设置字体

frame.add(text2)//添加组件

//服务器IP显示

JLabel lab2=new JLabel("当前服务器IP:",JLabel.LEFT)

//标签实例化,文本左对齐

lab2.setBounds(8, 45, 100, 20)//设置组件位置及大小

frame.add(lab2)//添加组件

JTextField text3=new JTextField(30)//单行文本输入组件

text3.setBounds(150, 45, 200, 20)//设置组件位置及大小

text3.setEnabled(false)

//文本不可编辑

text3.setText("127.0.0.1")//输入内容

text3.setFont(fnt1)//设置字体

frame.add(text3)

//添加组件

//服务器端口显示

JLabel lab3=new JLabel("当前服务器端口:",JLabel.LEFT)

//标签实例化,文本左对齐

lab3.setBounds(8, 80, 100, 20)//设置组件位置及大小

frame.add(lab3)//添加组件

JTextField text4=new JTextField(30)//单行文本输入组件

text4.setBounds(150, 80, 200, 20)//设置组件位置及大小

text4.setEnabled(false)//文本不可编辑

text4.setText("8888")//输入内容

text4.setFont(fnt1)//设置字体

frame.add(text4)//添加组件

//聊天记录显示

JLabel lab4=new JLabel("聊天记录如下:",JLabel.LEFT)

//标签实例化 文本左对齐

lab4.setBounds(8, 115, 100, 20)//设置组件位置及大小

frame.add(lab4)//添加组件

final JTextArea text1=new JTextArea()//多行文本输入组件

text1.setEnabled(false)//文本不可编辑

text1.setLineWrap(true)//自动换行

JScrollPane scr=new JScrollPane(text1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS) //设置滚动条,水平和垂直滚动条始终显示

scr.setBounds(8, 150, 450, 350)//设置组件位置及大小

frame.add(scr)//添加组件

//聊天输入窗口及确定

JLabel lab5=new JLabel("请输入聊天内容:",JLabel.LEFT) //标签实例化,文本左对齐

lab5.setBounds(8, 500, 100, 20)//设置组件位置及大小

frame.add(lab5)//添加组件

final JTextArea text5=new JTextArea()//多行文本输入组件

text5.setLineWrap(true)//自动换行

JScrollPane scr2=new JScrollPane(text5,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS)//设置滚动条,水平和垂直滚动条始终显示

scr2.setBounds(150, 500, 300, 50)//设置组件位置及大小

frame.add(scr2)//添加组件

final JButton but=new JButton("确定")//设置确定按钮

but.setFont(fnt)//添加字体设置

but.setBounds(480, 500, 200, 50)//设置组件位置及大小

but.addActionListener(

new ActionListener(){ //采用内部匿名类

public void actionPerformed(ActionEvent e){

if(e.getSource()==but){ //判断触发器源是否是提交按钮

text1.append("笑笑: "+lab10.getText()+"\n ")//在聊天记录上添加文本

text1.append(text5.getText()+"\n") //将输入的聊天内容输出在聊天记录上

s=text5.getText()//得到聊天内容

text5.setText("")// 将聊天窗口内容设置为空

}

}

})

frame.add(but)//添加组件

//当前时间显示

JLabel lab7=new JLabel("时间显示:",JLabel.LEFT)//标签实例化,文本左对齐

lab7.setBounds(450, 20, 100, 20)//设置组件位置及大小

frame.add(lab7)//添加组件

DateFormat df=DateFormat.getDateTimeInstance()//取得系统时间

String df2= df.format(new Date()) //将时间转换成字符串

JLabel lab8=new JLabel(df2,JLabel.LEFT)//标签实例化,文本左对齐

lab8.setBounds(520, 20, 130, 20)//设置组件位置及大小

frame.add(lab8)//添加组件

lab10=lab8//传递时间显示,以便能在聊天记录上显示记录时间

new Time(lab8) //使时间动态显示

//用户列表显示

JLabel lab6=new JLabel("用户列表:",JLabel.LEFT)//标签实例化,文本左对齐

lab6.setBounds(500, 40, 100, 20)//设置组件位置及大小

frame.add(lab6)//添加组件

JTextArea text6=new JTextArea()//标签实例化,文本左对齐

text6.setEnabled(false)//文本不可编辑

text6.setLineWrap(true)//自动换行

JScrollPane scr3=new JScrollPane(text6,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS)//设置滚动条,水平和垂直滚动条始终显示

scr3.setBounds(460, 70, 220, 420)//设置组件位置及大小

frame.add(scr3)//添加组件

//窗口的属性

frame.setSize(700,600)//窗口大小

frame.getContentPane().setBackground(Color.pink)//窗口的背景颜色

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)//关闭窗口时关闭程序

frame.setLocation(100,50)//在电脑桌面上出现的位置

frame.setVisible(true)//显示窗口

//连个窗口连接

//建立Server Socket并等待连接请求

ServerSocket server =new ServerSocket(8889)

Socket socket=server.accept()

//连接建立,通过Socket获取连接上的输入/输出流

BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()))

final PrintWriter out =new PrintWriter(socket.getOutputStream())

//先读取Client发送的数据,然后从标准输入读取数据发送给Client当接收到bye时关闭连接

String s1="",s2=""

//标志字符串,作为传递字符串使用

//得到其他窗口传递的字符串,并判断是否结束

while(!(s1=in.readLine()).equals("bye")){

text6.setText("可可在线") //当连接成功是在用户列表中 输出用户名字

if(!s1.equals("")){ //如果传递的字符串不为 空

text1.append("可可: "+lab10.getText()+"\n ")//在聊天记录上添加文本

text1.append(s1+"\n") //将输入的聊天内容输出在聊天记录上

}

s2=s//将在聊天窗口中得到的字符串传递给输出字符串

for(s2.equals("")||s2.equals(null)s2=s){//当传递的字符串为空时等待用户输入聊天内容

}

s=""//将在聊天窗口中得到的字符串设为空

if(!s2.equals("")&&!s2.equals(null)){// s2不为空时做

out.println(s2) //向其他窗口输出字符串

}

out.flush()//输出聊天内容

}

//关闭连接

in.close()

out.close()

socket.close()

server.close()

}catch(Exception e){

}

}

//main函数

public static void main(String args[]){

new Login()//登录实现 } }

}

}

时间类 class Time

package com.server

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import java.text.SimpleDateFormat

import java.util.Date

import javax.swing.JLabel

import javax.swing.Timer//时间类

public class Time {

public Time(JLabel time){

//构造方法 this.setTimer(time)

//设置时间

}

public void setTimer(JLabel time){

//设置时间方法

final JLabel varTime = time

//传递组件

Timer timeAction = new Timer(1000, new ActionListener() {

//时间监听

public void actionPerformed(ActionEvent e) {

long timemillis = System.currentTimeMillis()//得到系统时间

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")//转换日期显示格式

varTime.setText(df.format(new Date(timemillis)))//输出得到的时间

}

})

timeAction.start() //开启线程

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9976437.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存