Я только что выучил структуру SpringMVC в последнее время, и кажется, что это действительно гораздо более удобно и уменьшает много избыточного кода. Я сделал небольшой проект для практики. Это базовый проект приложения SpringMVC. Mybatis не используется. Функции проекта довольно полны, и реализуются основные функции добавления, удаления, модификации и поиска.
Проектная среда:
-Система: Win10
-Попредседания: EclipseoxygenReleaseCandidate3 (4.7)
-JDK версия: java1.8 (121)
-mysql: 5.7
-Спрнг: 4.0
-tomcat: 8.5
Используются методы:
Springmvcspringjspjdbcjavabeanjsjstl
Адрес доступа: http: // localhost: 8080/
Заявление: Я просто новичок, который только начал, и в написанном я написал, что в коде, которые я написал. Если вы найдете это, пожалуйста, укажите, спасибо всем.
Подробный процесс опубликован ниже
1. Сначала создать веб -проект (DynamicWebProject)
Я сам написал имя проекта, не более подробно
2. Это моя завершенная структура проекта
Я просто использовал функцию и не использовал интерфейс. Я использовал только три простых класса, класс объектов в пакете бобов, класс доступа к базе данных DAO и класс управления интерфейсом уровня контроллера.
Все ссылочные пакеты JAR находятся в папке/WebContent/Web-Inf/LIB, которая отличается от обычных проектов Java.
3. Конкретный код Java
1. Учебный класс, класс Entity First должен написать Javabean. Мой студент как Javabean. Подробный код заключается в следующем:
Package Bean; Public Class Student {Private Integer ID; // Идентификатор студенческого идентификатора частной строки; // Имя студента частное двойное джаваскор; // Java Prost Private Double htmlscore; // html балл частного двойного cssscore; // css балл приватный двойной Totalscore; public integer getId () {return id; } public void setId (Integer id) {this.id = id; } public String getName () {return name; } public void setName (string name) {this.name = name; } public double getJavascore () {return javascore; } public void setJavascore (двойной javascore) {this.javascore = javascore; } public double gethtmlScore () {return htmlScore; } public void sethtmlScore (double htmlscore) {this.htmlscore = htmlscore; } public double getCssScore () {return cssScore; } public void setCssScore (double cssScore) {this.cssscore = cssscore; } public double getTotalScore () {return totalscore; } public void cetTotolalscore (double totalscore) {this.totalscore = totalscore; }}2. StudentDao, класс операции доступа к базе данных является тогда кодом уровня DAO, то есть уровнем доступа к данным. Вот класс, инкапсулированный Spring (jdbctemplate), который содержит некоторые методы для работы с базой данных. Нет необходимости писать много повторяющегося кода самостоятельно, просто напишите операторы SQL. Вот конкретный код:
Пакет DAO; импорт java.sql.resultset; import java.sql.sqlexception; импорт java.sql.types; import java.util.list; import org.springframework.jdbc.core.jdbctemplate; импорт org.spramework.jdbc.core.rowmapper; { / ** * @fields jdbctemplate: todo * / private jdbctemplate jdbctemplate; / ** * Класс, предоставленный весной * * @param jdbctemplate * return value type: void * @author janinus */ public void setjdbctemplate (jdbctemplate jdbctemplate) {this.jdbctemplate = jdbctemplate; } / ** * Запрос всех студентов * * @return return Type: list <toodt watch> * @author janinus * / public <ditlad> Queryall () {string sql = "select id, name, javascore, htmlscore, cssscore от студента"; // отобразить результат запроса в класс учеников, добавить его в список и вернуть return jdbctemplate.query (sql, new StudentMapper ()); } / ** * Запрос по имени * * @param name * @return return type: list <tood> * @author janinus * / public list <toodty> QueryByname (String name) {String sql = "Select Id, имя, Javascore, htmlscore, cssscore от студента, где имя, такое как '%" + name'%'"; return jdbctemplate.query (sql, new StudentMapper ()); } / ** * Добавить студента * * @param студент * @return возвращаемый значение типа: boolean * @author janinus * / public boolean addstu (студент студента) {string sql = "вставьте в студент (id, name, javascore, htmlscore, cssscore) значения (0,? return jdbctemplate.update (sql, new Object [] {student.getName (), Student.getJavascore (), student.gethtmlscore (), stude.getcssscore ()}, new int [] {types.varchar, types.double, types.double, types.double, types.double}) =. } / ** * Удалить студент * * @param id * @return return type: boolean * @author janinus * / public boolean deletestu (INTEGER ID) {String SQL = "Удалить из студента, где id =?"; return jdbctemplate.update (sql, id) == 1; } / ** * Обновление информации о студенте * * @param Студент * @return return Type: boolean * @author janinus * / public boolean udvateStu (студент студент) {String sql = "Обновление набор студентов =?, Javascore =?, Htmlscore =?, Cssscore =? Object stuobj [] = new Object [] {student.getName (), student.getJavascore (), student.gethtmlscore (), student.getcssscore (), student.getid ()}; return jdbctemplate.update (sql, stuobj) == 1; } / ** * Возврат общий балл Top N студентов * * @param num * @return return type: list <tood> * @author janinus * / public list <toold> topnum (int num) {string sql = "select id, name, javascore+htmlscore+cssscore из -за javascore+htmlscore+cssscore? return jdbctemplate.query (sql, new rowmapper <toodte> () {@override public student Maprow (ResultSet RS, Int Rownum) Throws Sqlexception {// Todo Auto Generated Method Student Student = New Student (); SqulesId (rs.getint (1)); STUDVENAME (RS.GetString (2); Студент. Settotalscore (Rs.GetDouble (3)); } / ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ' Студент (); Student.setid (rs.getint (1)); Student.SetName (Rs.GetString (2)); Student.setjavascore (Rs.getDouble (3)); Студент.sethtmlScore (Rs.GetDouble (4)); Student.SetCssScore (Rs.GetDouble (5)); возвращение студента; }}}3. StudentController, класс взаимодействия, наконец, является классом управления StudentController, связанным с взаимодействием с пользователем. Этот класс в основном используется для сочетания переднего и заднего конца для достижения полного взаимодействия. Вот конкретный код:
контроллер пакета; импорт org.springframework.context.applicationContext; import org.springframework.context.support.classpathxmlapplicationcontext; импорт org.springframework.stepolype.controler; import org.spramework.ui.model; импорт; org.springframework.web.bind.annotation.requestmapping; import bean.student; import dao.studentdao; @controllerpublic class classcontroller { /** * * * Получить все студенты из базы данных и вернуть данные на домашнюю страницу, jsp * @param model * @return @Requestmapping (value = "/all") public String Queryall (модель модели) {ApplicationContext context = new ClassPathxMlapplicationContext ("ApplicationContext.xml"); // Получить DAO StudentDao DAO = (StudentDao) context.getBean ("dao"); model.addattribute ("студенты", dao.queryall ()); model.addattribute ("tops", dao.topnum (3)); вернуть "index.jsp"; }/** * * Найти студентов по имени, используйте нечеткий поиск и возвращайте результат в index.jsp * * @param name * @param model * @return возвращаемое значение тип: строка * @author janinus */@requestmapping (value = "/Querybyname") public String Querybyname (String name Model) {ApplicationContext = new ClassPathxMlapplicationContext ("ApplicationContext.xml"); // Получить DAO из IOC Container StudentDao dao = (StudentDao) context.getbean ("dao"); model.addattribute ("Студенты", DAO.QUERYBYNAME (имя)); model.addattribute ("tops", dao.topnum (3)); вернуть "index.jsp"; }/** * Добавить нового студента и вернуть результат на страницу All, перенаправленную от всех на домашнюю страницу * @param name * @param Javascore * @param htmlscore * @param cssscore * @param model * @return return type: string * @author janinus */@requestmapping (value = "/add ved addSt htmlscore, String cssscore, модель модели) {ApplicationContext context = new ClassPathxMlapplicationContext ("ApplicationContext.xml"); Студентдао dao = (StudentDao) context.getbean ("dao"); Студент = новый студент (); Student.SetName (имя); Student.setJavascore (Double.Parsedouble (Javascore)); Student.sethtmlscore (Double.parsedouble (htmlscore)); Student.SetCssScore (double.parsedouble (cssscore)); логический результат = dao.addstu (студент); if (result) model.addattribute ("msg", "<cript> alert ('добавлен успешно!') </script>"); else model.addattribute ("msg", "<cript> alert ('добавлен успешно!') </script>"); вернуть "все"; }/** * Удалить студент по идентификатору * @param id * @param model * @return return type: string * @author janinus */@requestmapping (value = "/deletebyid") public String deletebyId (String Id, модель модели) {ApplicationContext = new ClassPathxmlApplicationContext ("ApplicationContext.xml"); Студентдао dao = (StudentDao) context.getbean ("dao"); логический результат = dao.deleteStu (integer.parseint (id)); if (result) model.addattribute ("msg", "<cript> alert ('удалить успешно!') </script>"); else model.addattribute ("msg", "<cript> alert ('удалить успешно!') </script>"); вернуть "все"; }/** * * * * @param id * @param name * @param javascore * @param htmlscore * @param cssscore * @param model * @return возвращаемый значение {ApplicationContext context = new ClassPathxMlapplicationContext ("ApplicationContext.xml"); Студентдао dao = (StudentDao) context.getbean ("dao"); Студент = новый студент (); Student.setid (integer.parseint (id)); Student.SetName (имя); Student.setJavascore (Double.Parsedouble (Javascore)); Student.sethtmlscore (Double.parsedouble (htmlscore)); Student.SetCssScore (double.parsedouble (cssscore)); логический результат = dao.updatestu (студент); if (result) model.addattribute ("msg", msg ("модифицирован успешно")); else model.addattribute ("msg", msg ("модификация не удалась")); вернуть "все"; }/** * Сообщение о странице для всплывающего запада * @param msg * @return возвращаемое значение Тип: String * @author janinus */public String msg (String msg) {return "<cript> alert ('" + msg + "') </script>"; }}Весь код Java был завершен, и только конкретная конфигурация XML и передняя страница остались ниже.
4. Front-End Page
Поскольку это простой небольшой проект, мои JS и CSS находятся на одной странице, а не разделены, только две страницы,
1. Index.jsp
Домашняя страница, скриншот
редактировать
Подробный код:
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <%@ taglib prefix = "fn" uri = "http://java.sun.com/jsp/jstl/functs"%> <%@ taglib prefix = "c" c "c" c " uri = "http://java.sun.com/jsp/jstl/core" %> <! doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> Управление студентами </title> </head> <style type = "text/css"> body {text-align: center:; }. Все {ширина: 40%; Маржа: 20px 100px; Текст-альбом: Центр; Высота: 300px; Плавание: осталось; } таблица {ширина: 80%; Маржа: 20px Auto; размер шрифта: 14px; переполнение: авто; } #tab02 {width: 80%; Маржа: 20px Auto; размер шрифта: 14px; } таблица TH, таблица td {Border-Bottom: 1px #000 Solid; высота линии: 23px; } #edit_comm {width: 500px; Маржа: 20px Auto; Слево с границы: 3PX SOLID #000; дисплей: нет; } #ADD_COMM {ширина: 500px; Маржа: 20px Auto; Слево с границы: 3PX SOLID #000; } #all_comm {height: 600px; } .edit_stu {width: 200px; Высота: 30px; Фон: #fff; Фамилия Font: «Microsoft Ya Black Light», «Arial Black»; размер шрифта: 18px; граница: нет; Пограничный подъем: 1px solid #000; Маржа: 20px 10px; } </style> <script src = "http://code.jquery.com/jquery-latest.js"> </script> <script type = "text/javascript"> $ (function () {$ ("#cancel"). Click (function () {$ ("#add_comm").) }) $ ("input"). addClass ("edit_stu"); } функция 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 = name! = null && name! = ''; var javascorenot = javascore! = null && javascore! = ''; var htmlscorenot = htmlscore! = null && htmlscore! = ''; var cssscorenot = cssscore! = null && cssscore! = ''; if (namenot & javascorenot && htmlscorenot && cssscorenot) вернуть true; иначе вернуть ложь; } function delete_stu (id) {var result = sefint ("Это было удалено?"); if (result) window.location.href = "deleteByid? id =" rel = "внешний nofollow" +id; } функция edit_stu (id) {var name = $ ("#name"+id) .text (); var java = $ ("#java"+id) .text (); var html = $ ("#html"+id) .text (); var css = $ ("#css"+id) .text (); $ ("#edit_id"). val (id); $ ("#edit_name"). val (имя); $ ("#edit_java"). val (java); $ ("#edit_html"). val (html); $ ("#edit_css"). val (css); $ ("#add_comm"). fadeout (); $ ("#edit_comm"). fadein (); } </script> <body> $ {msg} <h1 align = "center"> Управление студентами </h1> <div id = "all_comm"> <h2> All Student </h2> <table id = "eptions"> <tr> <td> id </td> <td> name </td> <td> java chall </td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <TD> CSS SCORE </TD> <TD> Операция </td> </td> </tr> <C: foreach items = "$ {Студенты}" var = "Студент"> <Tr> <TD ID = "ID $ {Student.ID}"> $ {Студент <td id = "java $ {Student.id}"> $ {student.javascore} </td> <td id = "html $ {student.id}"> $ {student.htmlscore} </td> <td id = "css $ {student.id}"> $ {student.csscor at> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <td> <. onclick = "delete_stu ($ {student.id})"> delete </a> | <a onclick = "edit_stu ($ {study.id})"> edit </a> </td> </tr> </c: foreach> </table> <tail id = "tab02"> <h2> </h2> <tr> </tr> <td> <td> </td> <td> <td> </td> <td> <td> <td> </td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </td> </td> <td> </td> </td> <td> <Td> id </td> <td> name </td> <td> Total Score </td> </tr> <C: foreach elects = "$ {tops}" var = "студент" varStatus = "i"> <tr> <td> $ {i.Index+1} name </td> <td id = "$ {stulty. } </td> <td> $ {student.name} </td> <td id = "name $ {student.id} t"> $ {student.totalscore} </td> </tr> </c: foreach> </table>, если не отображается: <anclick = "recush ()"> нажмите здесь, чтобы обновить </a> </add_mo> div> div> div> div> div> div> div> div> div> div> div> div> div> div> div </table> </add_comme </add_comme </add_comme </add_comme </table>. <h2>Find student</h2> <form action="queryByName" method="post" > <input type="text" placeholder="Student name" name="name" > <input type="submit" value="Find student" > </form> <h2 id="edit_title">Add student</h2> <form action="add" method="post" > <input type="text" placeholder="Student name" name="name" /> <input type="text" placeholder="java score" name="javaScore" /> <input type="text" placeholder="html score" name="htmlScore" /> <input type="text" placeholder="css score" name="cssScore" /> <input type="submit" value="Confirm to add" /> </form></div><div id = "edit_comm"> <h2 id = "edit_title"> Edit Student </h2> <form action = "update" method = "post"> <input type = "text" Placeholder = "ID, который будет изменен," id = "edit_id" name = "id" value = "the id medified" readonly = "readonly"/name <br> <blice = "placoter" = "placoter" = <blicholer "=" <blicherer "=" <blicholer ". id="edit_name" name="name" /> <input type="text" placeholder="java score" id="edit_java" name="javaScore" > <input type="text" placeholder="html score" id="edit_html" name="htmlScore" /> <input type="text" placeholder="css score" id = "edit_css" name = "cssscore"/> <input type = "pospod" value = "Подтверждение модификации"/> <input type = "кнопка" value = "Отмена модификации" id = "Cancel"/> </form> </div> </body> </html>2. Login.jsp
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"-// w3c // dtd html 4.01 // en «http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> вставьте заголовок здесь </title> </head> <body> <h1 Alight =" herf "herf>" <a h1-align ">" <a Title> </h haid> <h1 <h1 Align "> rel = "внешний nofollow" rel = "внешний nofollow"> введите домашнюю страницу </a> </h1> </body> </html>
5. Подробная конфигурация файла
1. ApplicationContext.xml
Это файл конфигурации контейнера IOC Spring, используемый для реализации инъекции зависимостей. Ниже приведен конкретный код:
<? xml version = "1.0" Encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: context = "http://www.springframework.org/schema/context" xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: aop = "http://www.springframe.orshema. xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.spramework.org/schema/context http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd "default-autowire =" byname "default-init ="> <!-<! <!-Загрузка класса драйверов-> <name = "name =" driverclassname "value =" com.mysql.jdbc.driver "> </property> <!-Адрес доступа к базе данных-> <name =" url "value =" jdbc: mysql: // localhost: 3306/test "> </properation> <! value = "root"> </property> <!-Пароль доступа к базе данных-> <name = "password" value = "123123"> </property> </bean> <!-Управление транзакциями базы данных, предоставленное Spring-> <Bean Id = "txmanager"> <property = "DataSource" Ref = "DataSource"> </properation> </bean> </bean> <bean> <bean> </bean> <bean> </bean> <bean> </bean> </bean> <bean> </bean> <bean> </tx. Transaction-manager = "txmanager"/> <!-Настройка класса Javabean Entity-> <Bean Id = "Student Bean"> <!-Атрибут Автоматическая конфигурация-> </bean> <!-Класс Операции по доступу к базе данных, предоставленные в Spring-> <Bean Id = "JDBCTEMPTATE"> </bean> <! класс слоя, эта конфигурация недействительна-> <bean id = "controller"> <name = "dao" ref = "dao"> </property> </bean> </beans>
2. Springmvc-servlet.xml, класс конфигурации Spring MVC,
Мы внедрили большую часть кодекса сервлета для нас, и нам нужно только написать бизнес -реализацию. Ниже приведен конкретный код
<? xml version = "1.0" Encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: p = "http://www.springframework.org/schema/p" xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://wwww.springframe.orschema. 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.xmaly amomalytext-30.xmaly. Класс в соответствии с указанным пакетом-> <Контекст: Component-Scan Base-package = "Controller" /> < /Beans>
3. web.xml
Это файл конфигурации веб -проекта, и следующее является основным кодом:
<? xml version = "1.0" Encoding = "utf-8"?> <web-app xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd .> <filter-name> encodingfilter </filter-name> <filter-class> org.springframework.web.filter.characterencodingfilter </filter-class> <init-param> <-param-name> кодирование </param-name> <param-value> utf-8 </param-value> </init-pram> </param-name> <param-value> utf-8 </param-value> </init-praram> </init-prar> </init-param> </init-param> </init-prar> </init-par Интерфейс-> <selcopply-file-list> <selcower-file>/all </werveding-file> <selcovery-file> index.html </wervedied-file> <selcown-file> index.htm </wervedied-file> </werveding-file-list> <!-Настройка Springmvc Servlet-> <servlet> <servlet> Springmvc </servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup></servlet><servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern></servlet-mapping></web-app>
6. Резюме проекта и приложение
Этот проект - моя ежедневная практика. Чтобы быть более опытным, я снова рассмотрел полный процесс и очень знакомился с ним.
Приложение к пакете JAR, используемому для проекта:
В дополнение к пакете Spring, есть также пакет JAR MySQL-JBDC и пакет JSTL JAR
Адрес загрузки:
Пакет Spring Framework JAR (дополнительная версия): официальный веб -сайт Spring
Mysql-jdbc.jar (необязательная версия): официальный сайт MySQL
jstl.jar (необязательная версия): официальный адрес Maven
Выше приведено все содержание этой статьи о полном примере Spring MVC, реализующего добавление, удаление, модификацию и поиск базы данных MySQL. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на этот сайт:
Подробное объяснение конфигурации веб -модуля весной
Пример кода введения и индекса SpringMVC RESTC REST
Interceptor Springmvc реализует отдельный вход
Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!