Este artículo comparte con usted la implementación de Javaweb del sistema de gestión de información estudiantil para su referencia. El contenido específico es el siguiente
Edición inicial
No hay páginas adicionales para la versión inicial. Debido a que no he aprendido mucho sobre el front-end, la interfaz es fea. Tecnologías principales: JSP, Javabean, Servlet, JDBC Las páginas principales son las siguientes:
Página de inicio de sesión
Página de inicio
Agregar estudiantes
Ver a todos los estudiantes
Investigación de los estudiantes
Directorio de proyectos
base de datos
Dos tablas, tabla de usuario y tabla de estudiantes. Para usar la herramienta DButils, asegúrese de prestar atención a la coincidencia del nombre del atributo de la tabla de la base de datos y los métodos get () y set () de Javabean. Por ejemplo, el desanimado en la tabla T_USER es: String private Uname, getuname (), setUname () en Javabean.
Crear tabla T_USER (UID char (32) Clave primaria, uname varchar (40) no nulo, uppassword varchar (40) no nulo);
Crear tabla t_student (sid char (32) clave primaria, sname varchar (40) no nulo, género varchar (6) no nulo, birthday char (10), tellphone varchar (15) no nulo, correo electrónico varchar (40), descripción varchar (500));
Un pequeño punto de conocimiento
Acceso
Al iniciar sesión, si el nombre de entrada de nombre o contraseña está vacío se juzga por el código JS de la página de inicio de sesión. Cuando ninguno esté vacío, consulte la base de datos a través de la información del nombre de usuario. Si se encuentra el usuario, el inicio de sesión se registrará correctamente, de lo contrario es necesario determinar si es un nombre de usuario o un error de contraseña. Esta transacción se procesa en la capa de servicio, y la capa DAO solo es responsable de encontrar usuarios a través de nombres de usuario.
Código de servicio de usuarios:
Public Class UserService {private userDao userDao = new UserDao (); Public User Consuly (Formulario de usuario) lanza Exception {User User = userDao.query (formulario); // Usuario no encontrado if (user == null) {Throw New Exception ("El nombre del usuario no existe"); } // Se encontró al usuario, pero la contraseña no coincidía si (! Form.getUpassword (). Equals (user.getUpassword ()))) {tirar nueva excepción ("error de contraseña"); } Return User; }}Filtro de filtro
Para evitar que los usuarios que no iniciaran sesión puedan acceder directamente a otras páginas, se necesita un filtro. Coloque todas las páginas fuera de la página de inicio de sesión por separado en una carpeta de usuarios. Cuando el usuario inicie sesión correctamente, guarde la información del usuario en la propiedad "SessionSuser" de la sesión. El filtro determina si esta propiedad está vacía. Si está vacío, significa que el inicio de sesión del usuario no tiene éxito y no lo liberará. Vaya directamente a la página de inicio de sesión. Si no está vacío, suelte. El código principal del filtro:
Public void dofilter (solicitud de servletRequest, respuesta de servicio de servicio, cadena de filtro de filtro) lanza ioexception, servletException {// 1. Obtener sesión // 2. Determine si hay un usuario en la sesión. Si es así, libera // 3. De lo contrario, vaya a la página de inicio de sesión httpservletRequest req = (httpservletRequest) solicitud; Usuario user = (usuario) req.getSession (). GetAttribute ("sessionUser"); if (user! = null) {chain.dofilter (solicitud, respuesta); } else {httpservletResponse resp = (httpservletResponse) respuesta; resp.sendedirect (req.getContextPath () + "/index.jsp"); }}Consulta de combinación de múltiples condiciones
En la página de búsqueda avanzada, hay cuatro opciones para elegir: nombre del estudiante, género, número de teléfono móvil y dirección de correo electrónico. Las cuatro condiciones se pueden organizar y combinar arbitrariamente. Encontré este problema antes al escribir proyectos QT. Usé declaraciones SQL de empalme en ese momento, pero no esperaba que usar "donde 1 = 1" sería muy problemático. El siguiente código es clásico y utiliza consultas difusas para hacer que la búsqueda sea más humana.
Lista pública <Sentuent> Query (Student s) {try {StringBuilder sql = new StringBuilder ("Seleccione * de T_Student Where 1 = 1"); Lista <S Object> Params = New ArrayList <Sectus> (); if (s.getsname ()! = null &&! s.getsname (). tril (). isEmpty ()) {sql.append ("¿y te gusta?"); params.add ("%" + s.getsname () + "%"); } if (s.getgender ()! = null &&! s.getgender (). tril (). isEmpty ()) {sql.append ("y género =?"); params.add (s.getGender ()); } if (s.gettellphone ()! = null &&! s.gettellphone (). trim (). isEtimty ()) {sql.append ("¿Y contar phone?"); params.add ("%" + s.gettellphone () + "%"); } if (s.getEmail ()! = null &&! s.getEmail (). Trim (). isEmpty ()) {sql.append ("¿Y por correo electrónico?"); params.add ("%" + s.getEmail () + "%"); } return Qr.query (sql.ToString (), new Beanlisthandler <Student> (Student.Class), params.toarray ()); } catch (Exception e) {Throw New RuntimeException (e); }}Edición de evolución: paginación
Muestre las páginas de consulta para hacerlas más hermosas. La página es como: Página N/Total M Página de inicio Página anterior 1 2 3 4 5 6 7 8 9 10 Página siguiente última página.
El efecto de paginación es el siguiente:
Datos requeridos para la paginación:
Página actual: Pagecode
Páginas totales: TotalPage
Registro de registro total: TotalRecord
Número de registros por página: PageSize
Datos de página actuales: Beanlist
Page
¡Dado que estos datos pagados siempre deben pasar de un lado a otro entre capas! Encapsulamos estos datos pagados en un Javabean, que se llama frijoles paginado, como PageBean. Al usar consultas de múltiples condiciones y hacer clic en la página 2, el hipervínculo en la página 2 no tiene condiciones de consulta, y las condiciones de consulta se perderán, por lo que debemos mantener las condiciones de consulta en todos los enlaces en la página. ¡Queremos guardar la condición como una cadena para la URL de la página!
El código es el siguiente:
clase pública PageBean <t> {private entero pagecode; // número de página actual Páginas enteras privadas; // Tamaño de datos por página Integer privado TotalRecord; // Records totales Lista privada <T> beanlist; // El registro de la página actual se define como un genérico. Para usar URL de cadena privada directamente en el futuro; // Las condiciones después de la URL se combinan en múltiples condiciones // Devuelve el número total de páginas Integer Public GetTotalPage () {int tp = TotalRecord/Pagesize; return TotalRecord%PageSize == 0? TP: TP+1; } ... // El método Get, establecido del atributo ...}Procesamiento de la paginación en cada capa
Página JSP: Mostrar datos de visualización y "Página N/Total M Páginas Página anterior 1 2 3 4 5 6 7 8 9 10 Página siguiente última página"; Pase Pagecode al servlet
Servlet: cree un objeto PageBean, asigne valores a todos los atributos de PageBean, y luego pase Pagecode y pageice a la capa DAO; Acepte el objeto PageBean devuelto por DAO, guárdelo en el campo de solicitud y vuelva a la página
Servicio: actúa como intermediario, no es necesario procesar transacciones
DAO: Obtenga Pagecode y PageSize, cree el objeto PageBean, consulte la base de datos para obtener TotalRecord y BeanList, y devuelva PageBean.
El código para el número de página de procesamiento de la página JSP:
<center> página $ {pb.pageCode} página/total $ {pb.totalpage} página <a href = "$ {pb.url} & pc = 1" rel = "nofollow" externo "> página de inicio </a> <c: if test =" $ {pb.pagecode> 1} "> <a href =" $ {pb.url } & pc = $ {pb.pageCode-1} "rel =" externo nofollow "> página anterior </a> </c: if> <!-Cálculo de la tabla de número de página de página Comienza end-> <c: elige> <c: when test =" $ {pb.totalpage <= 10} "> <c: set var =" inicio "valor =" 1 "> </c: set> <c: set var =" valor = "$ {pb.totalPage}"> </c: set> </c: when> <c: lo contrario> <%-fórmula de cálculo-%> <c: set var = "begin" value = "$ {pb.pageCode-5}"> </c: set> <c: set var = "end" value = "$ {pb.pagode+4}" </c: <%-<%-<%-<% Overflow de encabezado-%> <c: if test = "$ {begin <1}"> <c: set var = "begin" value = "1"> </c: set> <c: set var = "end" value = "10"> </c: set> </c: if> <%-tail overflow-%> <c: if test = "$ {end> pb.totalpage}" Set = "set" valor = "$ {pb.totalPage-9}"> </c: set> <c: set var = "end" value = "$ {pb.totalPage}"> </c: set> </c: if> </c: lo contrario> </c: elija> <%de la lista de número de página-%> <c: foratar var = "i" comienzo = "$ {{=" } "> <c: elegir> <c: when test =" $ {i eq pb.pageCode} "> [$ {i}] </c: when> <c: lo contrario> <a href =" $ {pb.url} & pc = $ {i} "> [$ {i}] </a> </c: lo contrario> </c elección </c: el elección de test = "$ {pb.pageCode <pb.totalPage}"> <a href = "$ {pb.Url} & pc = $ {pb.pagecode+1}"> siguiente página </a> </c: if> <a href = "$ {pb.url} & pc = $ {pb.totalpage}" Página </a> </Center>Código de consulta de combinación de múltiples condiciones después de agregar paginación
Public PageBean <Sentuent> Query (Student S, Int PC, Int PS) {try {PageBean <Student> pb = new PageBean <entudent> (); pb.setPageCode (PC); PB.SetPageSize (PS); /** Consulta el registro total*/ StringBuilder numSQL = new StringBuilder ("Seleccionar recuento (*) de t_student"); StringBuilder wheresql = new StringBuilder ("donde 1 = 1"); Lista <S Object> Params = New ArrayList <Sectus> (); if (s.getsname ()! = null &&! s.getsname (). tril (). isEmpty ()) {wheresql.append ("¿y sname?"); params.add ("%" + s.getsname () + "%"); } if (s.getgender ()! = null &&! s.getgender (). tril (). isEmpty ()) {wheresql.append ("y género =?"); params.add (s.getGender ()); } if (s.gettellphone ()! = null &&! s.gettellphone (). trim (). isEmpty ()) {wheresql.append ("¿Y contar?"); params.add ("%" + s.gettellphone () + "%"); } if (s.getEmail ()! = NULL &&! S.GetEmail (). Trim (). isEtimty ()) {wheresql.append ("¿Y correo electrónico como?"); params.add ("%" + s.getEmail () + "%"); } Número de número = (número) Qr.query (numSQL.Append (wheresql) .ToString (), new salarHandler (), params.toarray ()); int totalRecord = number.intValue (); pb.settotalRecord (TotalRecord); / * * Obtenga el conjunto de resultados BeanList */ StringBuilder sql = new StringBuilder ("Seleccionar * de t_student"); StringBuilder LimitsQl = new StringBuilder ("¿Limit?,?"); params.add ((pc-1)*ps); params.add (ps); Lista <deuding> Students = Qr.query (SQL.Append (Wheresql) .Append (LimitsQl) .ToString (), New Beanlisthandler <Student> (Student.Class), params.toarray ()); PB.SetBeanList (estudiantes); regresar Pb; } catch (Exception e) {Throw New RuntimeException (e); }}Para obtener más materiales de aprendizaje, preste atención al tema especial "Desarrollo del sistema de gestión".
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.