Recientemente, aprendí un pequeño proyecto de cierto sitio web. Como tengo clases durante el día, las escribí todas por la noche. Lo completé hoy.
El proyecto implementa principalmente un cargador de archivos, cargando archivos locales en la base de datos del servidor (local) a través del inicio de sesión del cliente.
Primero, cree dos tablas de la siguiente manera:
Una tabla de información de archivo
Crear tabla `fileInfo` (` fname` char (50) no nulo, `finfo` blob no null,` fid` int (10) no null auto_incement, clave primaria (`fid`)) motor = innodb auto_incement = 4 default Charset = utf8;
Una tabla de información del usuario
Crear tabla `user` (` username` char (25) no nulo, `contraseña` char (25) no nulo,` useID` int (10) no nulo automo_increment, clave primaria (`useID`)) motor = innodb Auto_incement = 19 default = utf8;
Clase de usuario
paquete fileUpload; import java.io.serializable; /** Clase de entidad de usuario*/ Clase pública El usuario implementa serializable {private static final long serialversionUid = -72790933338433393181l; private int usuid; // Número de usuario String private Usename; // Nombre de usuario String private String Usepsd; // User Password Public User () {} Public User (String Usename, String UseSd) {super (); this.USeName = Usename; this.usepsd = usePsd; } Public User (int useID, string usame, string ussepsd) {super (); this.useid = useID; this.USeName = Usename; this.usepsd = usePsd; } public int getUseID () {return UseId; } public void setuseId (int useID) {this.useID = useID; } public String getUseName () {return Usename; } public void setUSeName (String Usename) {this.UseName = useame; } public String getUsepsd () {return ussePsd; } public void setUsepsd (string usePsd) {this.USEPSD = USEPSD; }}Clase de servicio de usuarios
paquete fileUpload; / *** Clase de operación de inicio de sesión y registro de usuario*/ import java.sql.connection; import java.sql.drivermanager; import java.sql.preparedStatement; import java.sql.resultset; import java.sql.sqlexception; Public Class UserService {Conexión privada conn = null; PTMT de preparación privada Ptmt = NULL; Resultset privado rs = nulo; // Inicio de sesión del usuario Public Boolean Login (usuario de usuario) {String url = "jdbc: mysql: // localhost: 3306/fileUpload"; // Conexión de base de datos String String sql = "Seleccionar * del usuario donde username =? Y contraseña =?"; Pruebe {class.forname ("org.gjt.mm.mysql.driver"). NewInStance (); conn = drivermanager.getConnection (url, "root", "1995520"); ptmt = conn.preparestatement (sql); ptmt.setString (1, user.getUseName ()); ptmt.setString (2, user.getUsepsd ()); rs = ptmt.executeQuery (); if (rs.next ()) {return true; }} catch (Exception e) {E.PrintStackTrace (); } finalmente {try {rs.close (); ptmt.close (); } Catch (Sqlexception e) {E.PrintStackTrace (); }} return false; } // Registro de registro de usuario Boolean Register (usuario de usuario) {System.out.println ("Hola"); String url = "jdbc: mysql: // localhost: 3306/fileUpload"; // Conexión de base de datos String String sql = "Insertar en los valores del usuario (nombre de usuario, contraseña) (?,?)"; Pruebe {class.forname ("org.gjt.mm.mysql.driver"). NewInStance (); conn = drivermanager.getConnection (url, "root", "1995520"); ptmt = conn.preparestatement (sql); ptmt.setString (1, user.getUseName ()); ptmt.setString (2, user.getUsepsd ()); ptmt.executeUpdate (); } catch (Exception e) {E.PrintStackTrace (); devolver falso; } finalmente {try {//rs.close (); ptmt.close (); } Catch (Sqlexception e) {E.PrintStackTrace (); }} return verdadero; }}Clase Fileiofo
paquete fileUpload; import java.io.serializable; /** Clase de entidad de archivo*/ clase public FileInfo implementa serializable {private static final long serialversionUid = 2554622626228481455l; private int fid; // File Número de cadena privada fname; // nombre de archivo Private byte [] fcontent; // File Content public FileInfo () {} public FileInfo (String fname, byte [] fcontent) {super (); this.fname = fname; this.fcontent = fcontent; } public FileInfo (int fid, string fname, byte [] fcontent) {super (); this.fid = fid; this.fname = fname; this.fcontent = fcontent; } public int getfid () {return fid; } public void setfid (int fid) {this.fid = fid; } public String getFname () {return fname; } public void setfname (string fname) {this.fname = fname; } public byte [] getfcontent () {return fcontent; } public void setfContent (byte [] fcontent) {this.fcontent = fcontent; }}Clase de servicio de archivos
paquete fileUpload; / *** Clase de operación de carga de archivo*/ import java.sql.connection; import java.sql.drivermanager; import java.sql.preparedStatement; import java.sql.sqlexception; Public Class FileService {Conexión privada Conn = NULL; PTMT de preparación privada Ptmt = NULL; // Guardar el archivo en la base de datos public boolean save (fileInfo file) {string url = "jdbc: mysql: // localhost: 3306/fileUpload"; // Conexión de la base de datos String String sql = "Insertar en el valor de FileInfo (FNAME, FINFO) (?,?)"; Pruebe {class.forname ("org.gjt.mm.mysql.driver"). NewInStance (); conn = drivermanager.getConnection (url, "root", "1995520"); ptmt = conn.preparestatement (sql); ptmt.setString (1, file.getfname ()); ptmt.setbytes (2, file.getfcontent ()); ptmt.executeUpdate (); } catch (Exception e) {E.PrintStackTrace (); devolver falso; } finalmente {try {ptmt.close (); } Catch (Sqlexception e) {E.PrintStackTrace (); }} return verdadero; }} paquete fileUpload;
import java.io.ioException; import java.net.serversocket; import java.net.socket; /** Iniciar clase de servidor*/ public class starterver {@supplesswarnings ("recursos") public static void main (string [] args) {try {// 1. Cree un socket del lado del servidor, es decir, Serversocket, especifique el puerto vinculado y escuche este puerto Serversocket Serversocket = New Serversocket (8888); Socket de socket = nulo; System.out.println ("El servidor se ha iniciado, esperando que el cliente se conecte ..."); // Escuche a largo plazo para esperar la conexión del cliente mientras (verdadero) {// 2. Llame al método Accept () para comenzar a escuchar, esperando la conexión del cliente Socket = Serversocket.accept (); // crear un nuevo hilo ServerThread ServerThread = nuevo ServerThread (Socket); // Iniciar el hilo ServerThread.start (); }} Catch (ioException e) {// TODO Generado automáticamente BLOCK E.PRINTSTACKTRACE (); }}}} [Java] Ver Play View Code Slices derivados de mi código Slices Paquete FileUpload; import java.io.ioException; / ** * Iniciar la clase Client */ public class StartClient {public static void main (string [] args) lanza IOException {SocketClient Client = new SocketClient (); client.showmainmenu (); // show menú principal}}paquete fileUpload;
import java.io.ioException; import java.io.objectInputStream; import java.io.objectOutputStream; import java.net.socket; import javax.swing.JOptionPane; /** Clase multithreading del lado del servidor*/ public class ServerThread extiende el subproceso {static socket socket = null; Private static objectInputStream ois = null; // Object Input Stream Private ObjectOutputStream OOS = NULL; // Output Outtutse Stream privado UserService US = New UserService (); // Usuario Business Object private FileService fs = new FilesService (); // Archivo Object // Initialize public PublicThread (socket) {Serverthread.socket = socket; } public void run () {try {ois = new ObjectInputStream (Socket.getInputStream ()); // Recibir mensajes enviados por el cliente oos = new ObjectOutputStream (Socket.getOutputStream ()); // Se usa para enviar mensajes al cliente CommandTransfer Transfer = (CommandTransfer) ois.Readobject (); // leer la operación de comando enviada por el cliente al servidor transferir = ejecutar (transferir); // Ejecutar la operación de comando enviada por el cliente al servidor oos.writeObject (transferir); // Responder al cliente} Catch (ioException | ClassNotFoundException e) {E.PrintStackTraace (); }}/** Ejecutar la operación de comando enviada por el cliente al servidor*/ private CommandTransfer Ejecute (comandante de transferencia) {string cmd = transfer.getcmd (); // Obtener el comando para la operación actual if (cmd.equals ("login")) {// usuarios de usuarios de usuarios de usuarios de usuarios = (usuario) transfer.getData (); Boolean Flag = us.login (usuario); if (flag) joptionPane.showMessEdialog (NULL, "¡Inicie sesión con éxito!"); transfer.setFlag (bandera); if (flag) {// juzga si el inicio de sesión es exitoso transfer.setResult ("¡Iniciar sesión con éxito!"); } else {transfer.setResult ("El nombre de usuario o la contraseña son incorrectos, ¡inicie sesión nuevamente!"); }} else if (cmd.equals ("registrar")) {// Registro de usuarios usuarios de usuario = (usuario) transfer.getData (); US.Register (usuario); // registrar la bandera booleana del usuario = us.register (usuario); if (flag) joptionPane.ShowMessEdialog (NULL, "¡Regístrese con éxito!"); transfer.setFlag (bandera); if (flag) {transfer.setResult ("¡Registre exitoso!"); } else {transfer.setResult ("¡Registre fallido!"); }} else if (cmd.equals ("uploadfile")) {fileInfo file = (fileInfo) transfer.getData (); fs.save (archivo); bandera booleana = fs.save (archivo); if (flag) joptionPane.showMessEdialog (nulo, "¡cargado con éxito!"); transfer.setFlag (bandera); if (flag) {transfer.setResult ("¡cargado con éxito!"); } else {transfer.setResult ("¡Cargar fallido!"); }} transferencia de retorno; }} paquete FileUpload; import java.io.bufferedInputStream; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.ioException; import java.io.objectInputStream; import java.io.objectOutputStream; import java.net.socket; import java.net.unknownHosTexception; import java.util.scanner; / ** * clase de menú principal */ public class SocketClient {Scanner input = new Scanner (System.in); Socador de socket estático privado = nulo; // SOCKE DE CLIENTE // Menú principal Public void showmainmenu () lanza ioException {System.out.println ("****** Bienvenido a XX Archivo Supente *******"); System.out.println ("1.login/n2.register/n3.login"); System.out.println ("**********************************"); System.out.println ("Seleccione:"); int la elección = input.nextInt (); // Obtener selección del usuario socket = new Socket ("localhost", 8888); switch (elección) {Caso 1: showLogin (); // Iniciar sesión para romper; Caso 2: showregister (); // Registro de descanso; Caso 3: System.out.println ("Bienvenido para apoyar este sistema"); System.exit (0); predeterminado: system.out.println ("La entrada es incorrecta!"); System.exit (0); }} // Registro de usuario privado void showregister () lanza ioexception {user user = new user (); Comandatransfer transfer = new CommandTransfer (); int count = 0; // número de tiempos de inicio de sesión mientras (verdadero) {count ++; if (Count> 3) {System.out.println ("¡No ha podido iniciar sesión 3 veces consecutivas, el programa sale!"); System.exit (0); } System.out.print ("Ingrese el nombre de usuario:"); user.setUseName (input.next ()); System.out.print ("Ingrese la contraseña:"); user.setUsepsd (input.next ()); System.out.print ("Ingrese la contraseña nuevamente:"); Cadena repassword = input.next (); if (! user.getusepsd (). Equals (Repassword)) {System.out.println ("Las contraseñas ingresadas dos veces son inconsistentes!"); System.out.println ("*********************"); continuar; } transfer.setCmd ("registrar"); transfer.setData (usuario); Pruebe {sendData (transfer); // Enviar datos al servidor transferte = getData (); // Obtenga los datos devueltos por el servidor System.out.println (transfer.getResult ()); // Salida Pantalla Result System.out.println ("***********************************************"); if (transfer.isflag ()) {break; // Si el registro es exitoso, el registro no se repetirá}} Catch (desconocidoHosTexception e) {E.PrintStackTrace (); } catch (ioException e) {E.PrintStackTrace (); } Finalmente {}} showLogin (); // Iniciar sesión después de que el registro sea exitoso} // Obtener datos de servidor public static commandTransfer getData () lanza IOException {// método generado automáticamente, stub ObjectInputStream OIS = NULL; CommandTransfer res = null; intente {if (socket.isClosed ()) socket = new Socket ("localhost", 8888); ois = nuevo ObjectInputStream (Socket.GetInputStream ()); res = (CommandTransfer) ois.readObject (); } Catch (ioException e) {// tODO Auto Generated BLOCK E.PrintStackTRace (); } Catch (ClassNotFoundException e) {// TODO Auto Generado Bloque E.PrintStackTrace (); } finalmente {if (ois! = null) {try {ois.close (); //socket.close (); } Catch (ioException e) {// tODO Auto Generated BLOCK E.PrintStackTRace (); }}} return Res; } /** Subir archivo* / private void showuploadFile () lanza ioexception {system.out.println ("Ingrese la ruta absoluta para cargar el archivo:"); Ruta de cadena = input.next (); FileInfo file = null; FileInputStream fis = null; BufferedinputStream bis = null; String fname = Path.Substring (Path.lastIndexof ("/") + 1); intente {fis = new FileInputStream (ruta); byte [] fcontent = new byte [fis.available ()]; bis = new BufferedInputStream (FIS); bis.read (fcontent); file = nuevo fileInfo (fname, fcontent); } catch (FileNotFoundException e) {E.PrintStackTrace (); } finalmente {bis.close (); fis.close (); } Transferencia de commandTransfer = new CommandTransfer (); transfer.setCmd ("uploadFile"); transfer.setData (archivo); Pruebe {sendData (transfer); // Enviar datos al servidor transferte = getData (); // Obtenga los datos devueltos por el servidor System.out.println (transfer.getResult ()); // Salida de la pantalla Resultado} Catch (desconocido Etecido E) {E.PrintStackTraace (); } catch (ioException e) {E.PrintStackTrace (); } Finalmente {}} // Enviar datos al servidor public static void sendData (CommandTransfer cmd) lanza IOException {// TODO Método Generado automático STUB ObjectOutputStream oos = null; Pruebe {if (Socket.isClosed ()) // juzga si el socket está cerrado. Si está cerrado, abra el socket = nuevo socket ("localhost", 8888); oos = new ObjectOutputStream (Socket.getOutputStream ()); oos.writeObject (CMD); } Catch (ioException e) {// tODO Auto Generated BLOCK E.PrintStackTRace (); }} // El usuario inicia sesión en private void showlogin () lanza ioexception {user user = new User (); Comandatransfer transfer = new CommandTransfer (); while (true) {System.out.print ("Ingrese el nombre de usuario:"); user.setUseName (input.next ()); System.out.print ("Ingrese la contraseña:"); user.setUsepsd (input.next ()); transfer.setCmd ("Login"); transfer.setData (usuario); Pruebe {sendData (transfer); // Enviar datos al servidor transferir = getData (); // Obtenga los datos devueltos por el servidor System.out.println (transfer.getResult ()); // Salida de la salida System.out.println ("*******************************************************************************************************************************************************************************enBeada"); "); if (transfer.isflag ()) {break; // Si el registro es exitoso, el registro no se repetirá}} Catch (desconocidoHosTexception e) {E.PrintStackTrace (); } catch (ioException e) {E.PrintStackTrace (); } finalmente {}} showuploadFile (); // cargue el archivo después de iniciar sesión con éxito}}}Las representaciones de operación son las siguientes:
El archivo se ha guardado en la base de datos. Este proyecto es bastante bueno para los amigos que desean practicar la comunicación de socket y MySQL.
Lo anterior es el cargador de archivos simple de implementación Java+MySQL introducido por el editor. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!