Эта статья делится с вами в реализации Javaweb системы управления информацией о студентах для вашей ссылки. Конкретный контент заключается в следующем
Первоначальное издание
Для первоначальной версии нет дополнительных страниц. Поскольку я мало что узнал о фронтальном положении, интерфейс уродлив. Основные технологии: JSP, Javabean, Servlet, JDBC Основные страницы:
Страница входа в систему
Домашняя страница
Добавить студентов
Посмотреть всех студентов
Запрос студентов
Проектный каталог
база данных
Две таблицы, пользовательский стол и студенческий таблица. Чтобы использовать инструмент dbutils, обязательно обратите внимание на сопоставление именования атрибутов таблицы баз данных и методов get () и set () javabean. Например, Uname в таблице T_USER: Private String Uname, getUname (), setUname () в Javabean.
Создать таблицу t_user (uid char (32) Первичный ключ, uname varchar (40) не null, uppassword varchar (40) не null);
Создать таблицу t_student (sid char (32) Первичный ключ, Sname varchar (40) не нулевой, пол варэр (6), а не нулевой, день рождения (10), Tellphone varchar (15) не нулевой, электронная почта Varchar (40), описание Varchar (500));
Небольшой пункт знаний
Авторизоваться
При входе в систему вход, независимо от того, является ли поле ввода пользователя или ввода пароля пустое, оценивается по коду JS на странице входа. Когда ни один из них не пуст, запрашивайте базу данных через информацию о имени пользователя. Если пользователь найден, вход в систему будет успешно войти в систему, в противном случае необходимо определить, является ли это именем пользователя или ошибкой пароля. Эта транзакция обрабатывается на уровне сервиса, а уровень DAO отвечает только за поиск пользователей через имена пользователей.
Код пользователя -сервиса:
public Class userservice {private userdao userdao = new userdao (); public user Query (пользовательская форма) выбрасывает Exception {user user = userDao.query (form); // пользователь не найден, если (user == null) {бросить новое исключение («Имя пользователя не существует»); } // пользователь был найден, но пароль не соответствовал if (! Form.getUpassword (). Equals (user.getupassword ()))) {бросить новое исключение ("ошибка пароля"); } вернуть пользователь; }}Фильтр фильтра
Чтобы не допустить, чтобы пользователи, которые не вошли в систему, не могли получить непосредственный доступ к другим страницам, необходим фильтр. Поместите все страницы за пределами страницы входа в систему отдельно в папку пользователей. Когда пользователь успешно входит в систему, сохраните информацию пользователя в свойстве «SessionUser». Фильтр определяет, является ли это свойство пустым. Если он пуст, это означает, что вход пользователя не удастся и не выпустит его. Перейдите прямо на страницу входа в систему. Если он не пуст, отпустите его. Основной код фильтра:
Public void DoFilter (запрос ServletRequest, ответ ServletResponse, цепочка FilterChain) бросает ioException, ServletException {// 1. Получить сеанс // 2. Определите, есть ли пользователь в сеансе. Если так, выпустите // 3. В противном случае перейдите на страницу входа в систему httpservletrequest req = (httpservletrequest); Пользователь пользователь = (пользователь) req.getSession (). GetAttribute ("sessionUser"); if (user! = null) {chain.dofilter (запрос, ответ); } else {httpservletresponse resp = (httpservletresponse) ответ; Resp.sendredirect (req.getContextPath () + "/index.jsp"); }}Комбинированный запрос многоусловного
На странице расширенного поиска есть четыре варианта выбора: имя студента, пол, номер мобильного телефона и адрес электронной почты. Четыре условия могут быть организованы и комбинированы произвольно. Я сталкивался с этой проблемой раньше, когда написал проекты QT. Я использовал сплайсинг SQL -операторы в то время, но я не ожидал, что использование «где 1 = 1» будет очень хлопотно. Следующий код является классическим и использует нечеткие запросы, чтобы сделать поиск более гуманным.
public List <toold> Query (Student S) {try {StringBuilder sql = new StringBuilder ("select * From T_Student, где 1 = 1"); List <Object> params = new ArrayList <Object> (); if (s.getsname ()! = null &&! s.getsname (). trim (). isempty ()) {sql.append ("и sname like?"); params.add ("%" + s.getsname () + "%"); } if (s.getgender ()! = null &&! s.getgender (). trim (). isempty ()) {sql.append ("и gender =?"); params.add (s.getgender ()); } if (s.gettellphone ()! = null &&! s.gettellphone (). trim (). isempty ()) {sql.Append ("и Tellphone как?"); params.add ("%" + s.gettellphone () + "%"); } if (s.getemail ()! = null &&! s.getemail (). trim (). isempty ()) {sql.append ("и по электронной почте?"); params.add ("%" + s.getemail () + "%"); } return qr.query (sql.toString (), new Beanlisthandler <toold> (student.class), params.toarray ()); } catch (Exception e) {бросить новое runtimeexception (e); }}Evolution Edition: Pagination
Покажите страницы запроса, чтобы сделать их более красивыми. Страница похожа на: страница N/Total M Home Page Предыдущая страница 1 2 3 4 5 6 7 8 9 10 Следующая страница последняя страница.
Эффект странификации выглядит следующим образом:
Данные, необходимые для страниц:
Текущая страница: PageCode
Общая страница: общая страница
Общее количество записей: общий рекорд
Количество записей на страницу: PageSize
Данные текущей страницы: Beanlist
Страница
Поскольку эти данные на странице всегда должны передаваться взад -вперед между слоями! Мы инкапсулируем эти страничные данные в Javabean, который называется бобовым бобом, таким как PageBean. При использовании запроса на несколько кондиционеров и нажатия на страницу 2 гиперссылка на странице 2 не имеет условий запроса, и условия запроса будут потеряны, поэтому нам нужно сохранить условия запроса на всех ссылках на странице! Мы хотим сохранить условие в качестве строки на URL -адрес страницы!
Код заключается в следующем:
Общедоступный класс PageBean <T> {Private Integer PageCode; // Текущий номер страницы Private Integer PageSize; // Размер данных на страницу Private Integer TotalRecord; // Общие записи частный список <t> Beanlist; // запись текущей страницы определяется как общая. Для использования частного URL -адреса прямо в будущем; // Условия после URL объединяются в нескольких условиях // возвращать общее количество страниц Public Integer GetTotalPage () {int tp = totalRecord/pagesize; return total -record%pageSize == 0? TP: TP+1; } ... // метод получения, установить атрибут ...}Обработка пейджинг в каждом слое
Страница JSP: отображать данные отображения и «Страница n/Total M -страницы Предыдущая страница 1 2 3 4 5 6 7 8 9 10 Следующая страница последняя страница»; Передайте ядовитый сервис
Сервлет: Создайте объект страницы, назначьте значения всем атрибутам PageBean, а затем передайте ящик и страничный размер на слой DAO; Примите объект PageBean, возвращенный DAO, сохраните его в поле запроса и вернитесь на страницу
Сервис: действует как посредник, транзакции не должны быть обработаны
DAO: Получите PageCode и PageSize, создайте объект PageBean, запросите базу данных, чтобы получить TotalRecord и BeanList, а также return PageBean.
Код для обработки страницы JSP:
<Center> page $ {pb.pageCode} page/total $ {pb.totalpage} page <a href = "$ {pb.url} & pc = 1" rel = "внешний nofollow"> домашняя страница </a> <c: if test = "$ {pb.pagecode> 1}"> <a href = "$ {pb. } & pc = $ {pb.pageCode-1} "rel =" Внешний nofollow "> предыдущая страница </a> </c: if> <!-Расчет таблицы номеров страницы. value = "$ {pb.totalpage}"> </c: set> </c: when> <c: иное> <%-формула расчета-%> <c: set var = "begin" value = "$ {pb.pageCode-5}"> </c: set> <c: set var = "end" Заголовок переполнение-%> <c: if test = "$ {begin <1}"> <c: set var = "begin" value = "1"> </c: set> <c: set var = "end" value = "10"> </c: set> </c: if> <%-hail overflow-%> <c: if test = "$ {end> pb.tot value = "$ {pb.totalpage-9}"> </c: set> <c: set var = "end" value = "$ {pb.totalpage}"> </c: set> </c: if> </c: иначе> </c: select> <%-number number wared at at ecome {end} } "> <C: выберите> <c: oc test =" $ {i eq pb.pageCode} "> [$ {i}] </c: ob> <c: иначе> <a href =" $ {pb.url} & pc = $ {i} "> [$ {i}] </a> </c: con> </c: C./C: C./C: C./C: C. test = "$ {pb.pageCode <pb.totalpage}"> <a href = "$ {pb.url} & pc = $ {pb.pageCode+1}"> Следующая страница </a> </c: if> <a href = "$ {pb.url} & pc = $ {pb.tot Страница </a> </center>Код комбинированного запроса с несколькими кондиционированием после добавления страниц
public pagebean <ditlad> Query (Student S, Int PC, int ps) {try {pageBean <Trdent> pb = new PageBean <Trden> (); PB.SetPageCode (ПК); PB.SetPagesize (PS); /** Запросить общую запись*/ stringbuilder numsql = new StringBuilder («Выберите счет (*) из t_student"); StringBuilder wheaseSql = new StringBuilder ("где 1 = 1"); List <Object> params = new ArrayList <Object> (); if (s.getsname ()! = null &&! s.getsname (). trim (). isempty ()) {wheneSql.append ("и Sname Like?"); params.add ("%" + s.getsname () + "%"); } if (s.getgender ()! = null &&! s.getgender (). trim (). isempty ()) {wheneSql.append ("и gender =?"); params.add (s.getgender ()); } if (s.gettellphone ()! = null &&! s.gettellphone (). trim (). isempty ()) {wheneSql.Append ("и« и дай, как? "); params.add ("%" + s.gettellphone () + "%"); } if (s.getemail ()! = null &&! s.getemail (). trim (). isempty ()) {wheneSql.append ("и по электронной почте?"); params.add ("%" + s.getemail () + "%"); } Номер номера = (номер) Qr.Query (numsql.Append (wheneSql) .toString (), new ScalarHandler (), params.toarray ()); int totalRecord = number.intvalue (); PB.SetTotalRecord (TotalRecord); / * * Получить набор результатов Beanlist */ stringBuilder sql = new StringBuilder ("select * from t_student"); StringBuilder LimitsQl = new StringBuilder ("Limit?,?"); params.add ((pc-1)*ps); params.add (ps); Список <Tlade> Студенты = QR.QUERY (SQL.Append (WHOWSQL) .Append (LIMITSQL) .ToString (), New Beanlisthandler <Tlade> (Student.Class), Params.Toarray ()); PB.SetBeanlist (студенты); вернуть PB; } catch (Exception e) {бросить новое runtimeexception (e); }}Для получения дополнительных учебных материалов обратите внимание на специальную тему «Разработка системы управления».
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.