Este artigo compartilha com você a implementação Javaweb do sistema de gerenciamento de informações dos alunos para sua referência. O conteúdo específico é o seguinte
Edição inicial
Não há páginas adicionais para a versão inicial. Como não aprendi muito sobre o front-end, a interface é feia. Principais tecnologias: JSP, Javabean, Servlet, JDBC As páginas principais são as seguintes:
Página de login
Página inicial
Adicione alunos
Veja todos os alunos
Inquérito de estudantes
Diretório do projeto
banco de dados
Duas tabelas, tabela de usuários e tabela de estudantes. Para usar a ferramenta DBUTILS, preste atenção à correspondência da nomeação de atributos da tabela de banco de dados e dos métodos get () e set () de Javabean. Por exemplo, a uname na tabela T_USER é: Private String Uname, getUname (), setUname () em Javabean.
Crie a Tabela T_User (UID char (32) Chave primária, uname varchar (40) não nula, uppassword varchar (40) não nulo);
Crie a Tabela T_Student (Sid Char (32) Chave primária, SNAME VARCHAR (40) NÃO NULL, Gênero Varchar (6) Não NULL, Char de Aniversário (10), Tellphone Varchar (15) NÃO NULL, email Varchar (40), Descrição Varchar (500));
Um pequeno ponto de conhecimento
Conecte-se
Ao fazer login, se o nome de usuário ou a caixa de entrada de senha está vazia é julgada pelo código JS da página de login. Quando nenhum deles estiver vazio, consulte o banco de dados através das informações do nome do usuário. Se o usuário for encontrado, o login será conectado com sucesso, caso contrário, será necessário determinar se é um nome de usuário ou um erro de senha. Essa transação é processada na camada de serviço e a camada DAO é responsável apenas por encontrar usuários através de nomes de usuário.
Código do UserService:
classe pública UserService {private userdao userdao = new userdao (); Public User Query (Formulário do Usuário) lança Exceção {Usuário Usuário = Userdao.Query (Form); // Usuário não encontrado se (usuário == null) {lança nova exceção ("Nome do usuário não existe"); } // O usuário foi encontrado, mas a senha não correspondeu a if (! Form.getUpassword (). Equals (user.getUswordword ()))) {lança nova exceção ("erro de senha"); } retornar usuário; }}Filtro filtro
Para impedir que os usuários que não sejam conectados a poder acessar diretamente outras páginas, é necessário um filtro. Coloque todas as páginas fora da página de login separadamente em uma pasta de usuários. Quando o usuário efetuar login com sucesso, salve as informações do usuário na propriedade "SessionUser" da sessão. O filtro determina se essa propriedade está vazia. Se estiver vazio, significa que o login do usuário não tiver sucesso e não o liberará. Vá diretamente para a página de login. Se não estiver vazio, solte -o. O código principal do filtro:
Public void Dofilter (Solicitação de servletRequest, resposta servletResponse, cadeia de filtro) lança IoException, servletexception {// 1. Obtenha sessão // 2. Determine se há um usuário na sessão. Nesse caso, libere // 3. Caso contrário, vá para a página de login httpServletRequest req = (httpServletRequest) solicitação; Usuário do usuário = (usuário) req.getSession (). GetAttribute ("sessionUser"); if (usuário! = null) {Chain.Dofilter (solicitação, resposta); } else {httpServletResponse resp = (httpServletResponse) Resposta; resp.sendRedirect (req.getContextPath () + "/index.jsp"); }}Consulta combinada de várias condições
Na página de pesquisa avançada, há quatro opções a serem escolhidas: nome do aluno, gênero, número do telefone celular e endereço de e -mail. As quatro condições podem ser organizadas e combinadas arbitrariamente. Encontrei esse problema antes ao escrever projetos QT. Eu usei declarações SQL de emenda na época, mas não esperava que o uso de "onde 1 = 1" fosse muito problemático. O código a seguir é clássico e usa consultas difusas para tornar a pesquisa mais humana.
Lista pública <very Student> Query (estudante s) {tente {stringbuilder sql = new stringbuilder ("selecione * de t_student onde 1 = 1"); List <ject> params = new ArrayList <ject> (); if (s.getsName ()! = null &&! params.add ("%" + s.getsName () + "%"); } if (s.getGender ()! = null &&! params.add (s.getgender ()); } if (s.getTellphone ()! = null &&! params.add ("%" + s.getTellphone () + "%"); } if (s.getEmail ()! = null &&! params.add ("%" + s.getEmail () + "%"); } Retornar Qr. } catch (Exceção e) {lança nova RunTimeException (e); }}Evolution Edition: Paginação
Exiba as páginas de consulta para torná -las mais bonitas. A página é como: Página N/Total M Página inicial Página anterior 1 2 3 4 5 6 7 8 9 10 Próxima página última página.
O efeito da paginação é o seguinte:
Dados necessários para a paginação:
Página atual: PageCode
Páginas totais: TotalPage
Contagem total de registros: TotalRecord
Número de registros por página: PageSize
Dados da página atual: Lista de bean
PageBean
Como esses dados paginados devem sempre ser passados entre as camadas! Encapsamos esses dados paginados em um Javabean, que é chamado de feijão com paginação, como o PageBean. Ao usar a consulta de várias condições e clicar na página 2, o hiperlink na página 2 não possui condições de consulta, e as condições de consulta serão perdidas; portanto, precisamos manter as condições de consulta em todos os links na página! Queremos salvar a condição como uma string no URL do PageBean!
O código é o seguinte:
classe pública PageBean <T> {private inteiro pageCode; // Número da página atual privado Pagesize; // Tamanho dos dados por página Página privada TotalRecord; // Total Registros Lista privada <T> beanList; // O registro da página atual é definido como um genérico. Para usar o URL de sequência privado diretamente no futuro; // as condições após o URL são combinadas em várias condições // retorna o número total de páginas públicas inteiras getToTalPage () {int tp = totalRecord/PageSize; Retornar totalRecord%pagageSize == 0? TP: TP+1; } ... // o método Get, Set do atributo ...}Processamento de paginação em cada camada
Página JSP: Exibir dados de exibição e "Página N/Total M Páginas Página anterior 1 2 3 4 5 6 7 8 9 10 Próxima página Última página"; Passe PageCode para o servlet
Servlet: Crie um objeto PageBean, atribua valores a todos os atributos do PageBean e depois passe o PageCode e PageSize para a camada DAO; Aceite o objeto PageBean retornado por Dao, salve -o no campo de solicitação e retorne à página
Serviço: atua como intermediário, nenhuma transação precisa ser processada
DAO: Obtenha o PageCode e PageSize, crie objeto PageBean, consulte o banco de dados para obter o TotalRecord e o BeanList e retornar a PageBean.
O código da página do código JSP Página: Número da página:
<Center> página $ {pb.pageCode} página/total $ {pb.totalpage} página <a href = "$ {pb.url} & pc = 1" rel = "Nofollow externo"> página inicial </a> <c: se test = $ {pb.pagode> 1} " } & pc = $ {pb.pagecode-1} "rel =" Nofollow externo "> página anterior </a> </c: se> <!-Cálculo da tabela do número da página Iniciar-> <c: escolha> <c: quando test =" $ {pb.totalpage <= 10} "> <c: setT =" inicie "" "1 {pb.totalpage <= 10}"> <c: setT = "" "" value = "$ {pb.totalpage}"> </c: set> </c: when> <c: caso contrário> <%-fórmula de cálculo-%> <c: set var = "begin" value = "$ {pb.pagecode-5}"> </c: set> <c: set dar = "end" talue = "" $ { Overflow do cabeçalho-%> <c: se test = "$ {iniciar <1}"> <c: set var = "BEGIN" value = "1"> </c: set> <c: set var = "end" value = "10"> </c: set> </c: if> <%-flower-%> <c: se test = "$ {end> pb. value = "$ {pb.totalpage-9}"> </c: set> <c: set var = "end" value = "$ {pb.totalpage}"> </c: set> </c: if> </c: caso contrário "</c: CHOARE> <%da página de looping list-° <c: para e" } "> <c: escolha> <c: quando test =" $ {i eq pb.pagecode} "> [$ {i}] </c: when> <c: caso contrário> <a href =" $ {pb.url} & p: {i} "> [$ {i}] </a> test = "$ {pb.pagecode <pb.totalpage}"> <a href = "$ {pb.url} & pc = $ {pb.pagecode+1}"> próxima página </a> </c: if> <a href = "$ {pb.url} & pc = $ {pc = $ {pc = $ {pc = $ {PC = $ <a href =" $ {pb.url} & pc = $ {pc = $ {pc = $ {pc = $ {pc = $ {PC = $ <a href = "$ {pb.url} & pc = $ {pc = $ {pc = $ {pc = $ {pc = $ {pc = $ {pc = $ {PC = $ <a href =" $ {pb.url} & pc = $ {pc = $ {pc = $ {pc = p. Página </a> </ central>Código de consulta de combinação de várias condições depois de adicionar paginação
public PageBean <avery> Query (Student s, int pc, int ps) {try {PageBean <ver -se> pb = new PageBean <vertudent> (); pb.setPageCode (PC); pb.setPagesize (ps); /** Consulta o registro total*/ stringbuilder numsql = new StringBuilder ("Selecione contagem (*) de t_student"); Stringbuilder whereresql = new stringbuilder ("onde 1 = 1"); List <ject> params = new ArrayList <ject> (); if (s.getsName ()! = null &&! params.add ("%" + s.getsName () + "%"); } if (s.getGender ()! = null &&! params.add (s.getgender ()); } if (s.getTellphone ()! = null &&! params.add ("%" + s.getTellphone () + "%"); } if (s.getEmail ()! = null &&! params.add ("%" + s.getEmail () + "%"); } Número do número = (número) qr.Query (numsql.append (whereresql) .toString (), new scalarHandler (), params.toarray ()); int totalRecord = número.IntValue (); pb.setTotalRecord (totalRecord); / * * Obtenha o conjunto de resultados do beanlist */ stringbuilder sql = new StringBuilder ("Selecione * de t_student"); Stringbuilder limitsql = new stringbuilder ("limite? ,?"); params.add ((PC-1)*ps); params.add (ps); List <estudante> alunos = qr.Query (sql.append (whereresql) .append (limitsql) .ToString (), New Beanlisthandler <vertenty> (student.class), params.toarray ()); pb.setBeanList (estudantes); retornar PB; } catch (Exceção e) {lança nova RunTimeException (e); }}Para mais materiais de aprendizagem, preste atenção ao tópico especial "Desenvolvimento do Sistema de Gerenciamento".
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.