Acabei de aprender a estrutura Springmvc recentemente e sente que é realmente muito mais conveniente e reduz muito código redundante. Eu fiz um pequeno projeto para praticar. Este é um projeto básico de aplicativo Springmvc. Mybatis não é usado. As funções do projeto são bastante completas e as funções básicas de adição, exclusão, modificação e pesquisa são realizadas.
Ambiente do projeto:
-System: Win10
-Development Ambiente: EclipseoxygenReleasecandidate3 (4.7)
-JDK Versão: Java1.8 (121)
-mysql: 5.7
-Spring: 4.0
-Tomcat: 8.5
Técnicas usadas:
springmvcspringjspjdbcjavabeanjsjstl
Endereço de acesso: http: // localhost: 8080/seu nome do projeto/all
Declaração: Sou apenas um novato que acabou de começar, e há inevitavelmente quaisquer erros no código que escrevi. Se você encontrar, aponte, obrigado a todos.
O processo detalhado é publicado abaixo
1. Crie primeiro um projeto da web (DynamicWebProject)
Eu escrevi o nome do projeto, não mais detalhado
2. Esta é a minha estrutura de projeto concluída
Acabei de usar a função e não usei a interface. Eu usei apenas três classes simples, a classe de entidade no pacote Bean, a classe de acesso ao banco de dados da camada DAO e a classe de controle de interface da camada do controlador.
Todos os pacotes JAR referenciados estão na pasta/webcontent/web-inf/lib, que é diferente dos projetos Java comuns.
3. Código Java específico
1. Classe de estudos, a classe de entidade primeiro precisa escrever um javabean. O meu é estudante como Javabean. O código detalhado é o seguinte:
Pacote Bean; Public Class Student {private Id ID; // ID do aluno Nome de String Privado; // Nome do aluno Javascore Double Javascore; // Java Pontuação Privada dupla htmlscore; // HTML SCORE PRIVADO DUPLO CSSSSCORE; // CSS Pontuação dupla privada TotalScore; public integer getId () {return id; } public void SetId (ID inteiro) {this.id = id; } public string getName () {return name; } public void setName (nome da string) {this.name = name; } public duplo getjavascore () {return javaScore; } public void setjavascore (duplo javascore) {this.javascore = javascore; } public duplo gethtmlScore () {return htmlscore; } public void sethtmlScore (duplo htmlscore) {this.htmlscore = htmlscore; } public Double getCssSscore () {return cssSCore; } public void setCssSscore (duplo cssSCore) {this.cssSscore = cssSCore; } public duplo getTotalsCore () {return totalsCore; } public void SetTotalScore (TotalScore Double) {this.totalscore = TotalScore; }}2. Studentdao, a classe de operação de acesso ao banco de dados é o código da camada DAO, ou seja, a camada de acesso a dados. Aqui está uma classe encapsulada pelo Spring (JDBCTemplate), que contém alguns métodos para operar o banco de dados. Não há necessidade de escrever muito código repetido sozinho, basta escrever instruções SQL. Aqui está o código específico:
pacote dao; importar java.sql.resultset; importar java.sql.sqLexception; importar java.sql.types; importar java.util.list; import org.springframework.jdbc.core.jdbctemplate; importação.springframework.jdbc.core.jdbctemplate; importação.springframework.jdbc.core.jdbctemplate; importação.springframework.jdbc.core.jdbctemplate; importação.springframework.jdbc.core.jdbctemplate; importação.springframework.jdbc.core.jdbctemplas; StudentDao { / ** * @fields jdbcTemplate: TODO * / private JDBCTemplate jdbcTemplate; / ** * Classe fornecida por primavera * * @param jdbctemplate * Retorno Valor Tipo: void * @Author Janinus */ public void setjdbcTemplate (JDBCTemplate JdbcTemplate) {this.jdbcTemplate = jdbcTemplate; } / ** * Consulta todos os alunos * * @return Retorno Tipo de valor: Lista <Dudent> * @Author Janinus * / Public List <Ardencie> queryall () {String sql = "Selecione ID, Nome, Javascore, HtmlScore, CSSSCore From Student"; // mapeie o resultado da consulta na aula de estudante, adicione -a à lista e retorne a retorno jdbctemplate.query (sql, new studentmapper ()); } / ** * Query by Name * * @param nome * @return Retorno Valor Tipo: Lista <Dentulion> * @Author Janinus * / Public List <Ardends> QuerybyName (Nome da String) {String sql = "Selecione ID, Nome, Javascore, HtmlScore, CSSSCore do aluno onde o nome como '%" + + " +" + "" "" ""; retornar jdbctemplate.Query (SQL, new Studentmapper ()); } / ** * Adicione aluno * * @param aluno * @return Retorno Valor Tipo: booleano * @Author Janinus * / public boolean addstu (aluno estudante) {string sql = "inserir no aluno (id, nome, javascore, htmlscore, csssscore) valores (0,?,?,?)"; Retornar jdbctemplate.update (sql, novo objeto [] {student.getName (), student.getjavascore (), student.gethtmlscore (), student.getcssscore ()}, new int [] {types.Varchar, tipos.ouble, typeble, 1); } / ** * exclua o aluno * * @param id * @return Retorno Valor Tipo: boolean * @Author Janinus * / public boolean Deletestu (ID inteiro) {String sql = "Excluir do aluno onde id =?"; return jdbctemplate.update (sql, id) == 1; } / ** * Atualize as informações do aluno * * @param Student * @return Retorno Valor Tipo: booleano * @Author Janinus * / public boolean updatestu (aluno estudante) {string sql = "Atualize o conjunto do conjunto de alunos =?, Javascore =?, HtmlsCore =?, CsSSCore =? Where id ="; Objeto stuobj [] = new Object [] {student.getName (), student.getjavascore (), student.gethtmlscore (), student.getcssscore (), student.getId ()}; retornar jdbctemplate.update (sql, stuobj) == 1; } /** * Return the total score of the top n students* * @param num * @return Return value type: List<Student> * @author janinus */ public List<Student> topNum(int num) { String sql = "select id,name,javaScore+htmlScore+cssScore from student order by javaScore+htmlScore+cssScore desc ,name asc limit ?"; Retornar JDBCTemplate.Query (SQL, New Rowmapper <very Student> () {@Override public Student Maprow (ResultSet RS, int ROWNUM) lança SqLexception {// TODO Auto-Generated Stub Student = New Student (); Student. StudentId (Rs.getInt (1); Student.SettotalsCore (Rs.getDouble (3)); } / ** * * mapeamento de banco de dados do StudentMapper * * @className Studentmapper * @Author Janinus * @Date 27 de junho de 2017 * @Version v1.0 * / classe Studentmapper implementa Rowmapper <Student> {@Override public Student Maprow (ResultSet Rs, Intownum) Student> Sqwoxcept. estudante.setId (rs.getInt (1)); estudante.setName (rs.getString (2)); estudante.setJavascore (Rs.getDouble (3)); estudante.SethtmlScore (Rs.getDouble (4)); estudante.setcssscore (Rs.getDouble (5)); aluno de retorno; }}}3. StudentController, a aula de interação front-end é finalmente a classe de concorrente da camada de controle relacionada à interação do usuário. Esta classe é usada principalmente para combinar o front-end e o back-end para obter interação completa. Aqui está o código específico:
controlador de pacote; importar org.springframework.context.applicationContext; importar org.springframework.context.support.classpathxmlapplicationcontext; importação org.springframework.tereotype.controller; importar org.springframework.uii.modwork.model; org.springframework.web.bind.annotation.requestMapping; importar bean.student; importar dao.studentdao; @ControllerPublic Class StudentController {** ** * * * Retire todas as informações do aluno do banco de dados e retorne os dados para o índice de página inicial, JST * @PARAM * @RequestMapping (value = "/all") public string Queryall (modelo modelo) {ApplicationContext context = new ClassPathXMLApplicationContext ("ApplicationContext.xml"); // obtenha Dao Studentdao Dao = (StudentDao) context.getBean ("Dao"); Model.Addattribute ("alunos", Dao.Queryall ()); Model.Addattribute ("Tops", Dao.topnum (3)); retornar "index.jsp"; }/** * Encontre os alunos pelo nome, use pesquisas difusas e retorne o resultado para index.jsp * * nome @param * @param modelo * @return Retorno Valor Tipo: string * @author janinus */@requestMapping (value "/querybyname") public stringname (nome da string, modelo) {Applicativo ClassPathXMLApplicationContext ("ApplicationContext.xml"); // Obtenha Dao do contêiner do IOC Studentdao Dao = (Studentdao) context.getBean ("Dao"); Model.Addattribute ("alunos", Dao.QuerybyName (nome)); Model.Addattribute ("Tops", Dao.topnum (3)); retornar "index.jsp"; }/** * Adicione um novo aluno e retorne o resultado à página All, encaminhada de todos para a página inicial * @param nome * @param javascore * @param htmlscore * @param cssSCore * @param modelo * @return Tipo de retorno: string * @author janinus */@requestMapping (value = = "/adição) htmlscore, string cssSCore, modelo modelo) {ApplicationContext context = new ClassPathXMLApplicationContext ("ApplicationContext.xml"); Studentdao Dao = (StudentDao) context.getBean ("Dao"); Estudante estudante = novo aluno (); estudante.setName (nome); estudante.setJavascore (Double.parsedouble (Javascore)); estudante.SethtmlScore (Double.parseDouble (htmlscore)); estudante.setcssscore (duplo.parsedouble (cssscore)); resultado booleano = dao.addstu (estudante); if (resultado) model.addattribute ("msg", "<cript> alert ('adicionado com sucesso!') </sCript>"); else Model.addattribute ("msg", "<cript> alert ('adicionado com sucesso!') </sCript>"); retornar "All"; }/** * Exclua o aluno por id * @param id * @param modelo * @return Retorno Valor Tipo: string * @author Janinus */@RequestMapping (value = "/DeleteById") public String DeLeteById (String ID, Model Model) {ApplicationContext Context = novo ClassThXMLApplicationCication ("Application Model) {Applintext context = new ClassPathXMLApplicationConxt (" Application) Studentdao Dao = (StudentDao) context.getBean ("Dao"); resultado booleano = dao.deletestu (inteiro.parseint (id)); if (resultado) model.addattribute ("msg", "<cript> alert ('exclua com sucesso!') </sCript>"); else Model.addattribute ("msg", "<cript> alert ('exclua com sucesso!') </sCript>"); retornar "All"; } /** * * @param id * @param name * @param javaScore * @param htmlScore * @param cssScore * @param model * @return Return value type: String * @author janinus */ @RequestMapping(value = "/update") public String updateStu(String id, String name, String javaScore, String htmlScore, String cssScore, Model model) {ApplicationContext context = new ClassPathXMLApplicationContext ("ApplicationContext.xml"); Studentdao Dao = (StudentDao) context.getBean ("Dao"); Estudante estudante = novo aluno (); estudante.setId (Integer.parseint (id)); estudante.setName (nome); estudante.setJavascore (Double.parsedouble (Javascore)); estudante.SethtmlScore (Double.parseDouble (htmlscore)); estudante.setcssscore (duplo.parsedouble (cssscore)); resultado booleano = dao.updatestu (aluno); if (resultado) model.addattribute ("msg", msg ("modificado com sucesso")); else Model.addattribute ("msg", msg ("falha na modificação")); retornar "All"; }/** * Mensagem de página para pop -up * @param msg * @return Retorno Valor Tipo: string * @author janinus */public string msg (string msg) {return }}Todo o código Java foi concluído e apenas a configuração XML específica e a página front-end são deixadas abaixo.
4. Página front-end
Como é um projeto pequeno simples, meus JS e CSs estão todos na mesma página, não separados, apenas duas páginas,
1.Index.jsp
Página inicial, captura de tela
editar
Código detalhado:
<%@ página linguagem = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%@ taglib prefix = "fn" uri = "http://java.sun.com/jstl/funclts"%> Uri = "http://java.sun.com/jsp/jstl/core" %> <! Doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> gestão </title> </head> <estilo = "text/css"> } .All {Width: 40%; margem: 20px 100px; Alinhamento de texto: centro; Altura: 300px; flutuar: esquerda; } tabela {largura: 80%; margem: 20px automático; Size da fonte: 14px; Overflow: Auto; } #tab02 {width: 80%; margem: 20px automático; Size da fonte: 14px; } Tabela th, Tabela TD {Border-Bottom: 1px #000 Solid; altura de linha: 23px; } #edit_comm {width: 500px; margem: 20px automático; Border-Ift: 3px Solid #000; Exibir: Nenhum; } #add_comm {width: 500px; margem: 20px automático; Border-Ift: 3px Solid #000; } #all_comm {altura: 600px; } .edit_stu {width: 200px; Altura: 30px; Antecedentes: #FFF; Fonte-família: "Microsoft Ya Black Light", "Arial Black"; Size da fonte: 18px; fronteira: nenhuma; fundo de borda: 1px sólido #000; Margem: 20px 10px; } </style> <script src = "http://code.jquery.com/jquery-latest.js"> </script> <script type = "text/javascript"> $ (functom) {$ ("#cancel"). click (function () {$ ("#_comm"). }) $ ("entrada"). addclass ("edit_stu"); } função add_reg () {var name = $ ("#add_edit_name"). val (); var javascore = $ ("#add_edit_java"). val (); var htmlscore = $ ("#add_edit_html"). val (); var cssSCore = $ ("#add_edit_css"). val (); var nameNot = nome! = null && name! = ''; var javascorenot = javascore! = null && javascore! = ''; var htmlscorenot = htmlscore! = null && htmlscore! = ''; var cssscorenot = cssSCore! = null && cssSCore! = ''; if (namenot & javascorenot && htmlscorenot && cssscorenot) retorna true; mais retornar falso; } function DELETE_STU (id) {var resultado = confirm ("ele foi excluído?"); if (resultado) window.location.href = "DeletebyId? id =" rel = "Nofollow externo" +id; } função edit_stu (id) {var name = $ ("#nome"+id) .text (); var java = $ ("#java"+id) .text (); var html = $ ("#html"+id) .text (); var css = $ ("#css"+id) .text (); $ ("#edit_id"). val (id); $ ("#edit_name"). val (nome); $ ("#edit_java"). Val (java); $ ("#edit_html"). val (html); $ ("#edit_css"). Val (CSS); $ ("#add_comm"). Fadeout (); $ ("#edit_comm"). Fadein (); } </script> <body> $ {msg} <h1 align = "center"> gestão do aluno </h1> <div id = "all_comm"> <h2> todos os alunos </h2> <tabela id = "itens"> <tr> <td> id </td> <td> name </td> <td> JAVA <TD> <t. <td> CSS Score </td> <td> Operação </td> </td> </tr> <c: foreach itens = "$ {estudantes}" var = "student"> <tr> <td id = "id $ {student.id}"> $ {student.id} </td> <td id = {student.id} "> <td id = "java $ {student.id}"> $ {student.javascore} </td> <td id = "html $ {student.id}"> $ {student.htmlscore} </td> <td id = "css $ {student.id}"> {estudante ONCLICK = "DELETE_STU ($ {Student.id})"> delete </a> | <a onclick = "edit_stu ($ {student.id})"> edit </a> </td> </tr> </c: foreach> </table> <table> <Td> id </td> <td> nome </td> <td> pontuação total </td> </tr> <c: foreach itens = "$ {tops}" var = "student" varstatus = "i"> <tr> <td> $ {i.IndEx+1} nome </td> <td id " }</td> <td>${student.name }</td> <td id="name${student.id }t">${student.totalScore }</td> </tr> </c:forEach> </table> If not displayed: <a onclick="refush()" >Click here to refresh</a></div><div id="add_comm"> <H2> Encontre aluno </h2> <formulário de formulário = "querybyname" method = "post"> <input type = "text" placeholder = "name do aluno" name = "name"> <input type = "submit" value = "find student"> </forma> <h2 id = "edit_title"> add </h2> <form> action " Nome "Nome =" Name /> <input type = "text" local de espaço local = "Java Score" name = "Javascore" /> <input type = "text" placeholder = "html score" name = "htmlsCore" /> <input Type = "text" Css "CSS" Name "CSSSCORE" "CSSSCORE" /" </form> </div> <div id = "edit_comm"> <h2 id = "edit_title"> editar aluno </h2> <formulário action = "update" method = "post"> <input type = "text" placeholder = "id para ser modificado é" id = "edit_id" name = "idi" idi ""/"idied) <bold) <buried) <buried) <buried is modified is" id = "edit_id" name = "idi" idi "") type = "Text" Placeholder = "Nome do aluno" id = "edit_name" name = "name" /> <input type = "text" placeholder = "java score" id = "edit_java" name = "javascore"> <input type = "text" = "html score" id = "edit_ht_htmmmml" "" html score "ida =" edit_ht_htmmml "" "html (html score" ida "edit_htmml" PISCONDADOR = "CSS SCORE" id = "edit_css" name = "cssSCore"/> <input type = "submit" value = "confirmar modificação"/> <input type = "button" value = "cancelar modificação" id = "cancel"/> </form> </div> </body> </html>2. Login.jsp
<%@ página de página = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transitório // en" "http://www.w3.org/tr/html4/loose.dtd"><html> <head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title> title aqui </title" rel = "Nofollow externo" rel = "Nofollow externo"> Digite a página inicial </a> </h1> </body> </html>
5. Configuração detalhada do arquivo
1. ApplicationContext.xml
Este é o arquivo de configuração do contêiner do IOC da Spring, usado para implementar a injeção de dependência. A seguir, o código específico:
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-bans-2.xsd http://wwwem http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd "default-autowire =" byname "default-lazy-init =" verdadeiro ">> <! <!-Carregando a classe do driver-> <names name = "driverclassName" value = "com.mysql.jdbc.driver"> </propriedade> <!-endereço de acesso ao banco de dados-> <nome da propriedade = "url" value = "JDBC: mySql: // localhost: 3306/test"> </! value = "root"> </propriedade> <!-senha de acesso ao banco de dados-> <propriedade name = "senha" value = "123123"> </propriedade> </bean> <!-Gerenciamento de transações de banco de dados fornecido por primavera-> <bean id = "txManager"> <nome da propriedade "DataEan" TAB = "DataSource"> <//bels> transação-manager = "txManager"/> <!-Configure a classe de entidade Javabean-> <bean id = "StudentBean"> <!-atribui a configuração automática-> </bean> <!-Database Access Operation-DAELOAN DAPATEN: <!-Classe de camada de controle, esta configuração é inválida-> <bean id = "controlador"> <propriedade name = "dao" ref = "dao"> </propriedade> </bean> </ Beans>
2. Springmvc-servlet.xml, classe de configuração do mvc spring,
Implementamos a maior parte do código de servlet para nós e precisamos apenas escrever uma implementação comercial. Abaixo está o código específico
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-Digitalize automaticamente a classe no pacote especificado-> <Contexto: componente-Scan Base-Package = "Controller" /> </ Beans>
3. Web.xml
Este é o arquivo de configuração do projeto da web, e o seguinte é o código principal:
<? xml versão = "1.0" coding = "utf-8"?> <web-app xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http:/wwww.w3 xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter-class> org.springframework.web.filter.characterencodingFilter </filter-class> <iit-param> <amam-name> codificando </amam-name> <amam-value> utf-8 </param-value> </irit-faram> </filter> <!-config-se-lindades- <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file></welcome-file-list><!-- Configure springmvc servlet --><servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <Oad-on-startup> 1 </load-on-startup> </servlet> <Servlet-Mapping> <Vertlet-Name> Springmvc </Servlet-Name> <url-Pattern>/</url-tattern> </servlet-mapping> </brapa-app>
6. Resumo do projeto e apêndice
Este projeto é meu programa de prática diária. Para ser mais proficiente, revisei o processo completo novamente e me familiarizei muito com ele.
Apêndice ao pacote JAR usado para o projeto:
Além do pacote de primavera, também existem pacote MySQL-JBDC JAR e pacote JSTL JAR
Download Endereço:
Spring Framework Jar Package (versão opcional): Spring Oficial Site
mysql-jdbc.jar (versão opcional): site oficial do MySQL
jstl.jar (versão opcional): endereço oficial do Maven
O exposto acima está o conteúdo inteiro deste artigo sobre o exemplo completo de MVC da primavera, implementando a adição, exclusão, modificação e pesquisa do banco de dados MySQL. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a este site:
Explicação detalhada da configuração do módulo da web na primavera
Exemplo de Introdução e Implementação do Código de Introdução e Implementação do Estilo de Rest Springmvc
Springmvc Interceptor implementa um único sinal
Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!