Разработка гостевой книги
JavaServer Faces как фреймворк для веб-приложений, написанных на Java. Знакомство с особенностями разработки гостевой книги с использованием технологий JSF и PrimeFaces. Общая характеристика панели редактирования текста"editor", анализ возможностей.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 15.05.2014 |
Размер файла | 4,6 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
"Разработка гостевой книги"
фреймворк редактирование гостевой книга
Введение
JavaServer Faces (JSF) -- это фреймворк для веб-приложений, написанный на Java. Он служит для того, чтобы облегчать разработку пользовательских интерфейсов для Java EE-приложений. В отличие от прочих MVC-фреймворков, которые управляются запросами, подход JSF основывается на использовании компонентов. Состояние компонентов пользовательского интерфейса сохраняется когда пользователь запрашивает новую страницу и затем восстанавливается, если запрос повторяется. Для отображения данных обычно используется JSP, Facelets, но JSF можно приспособить и под другие технологии, например XUL.
Технология JavaServer Faces включает:
1. Набор API для представления компонент пользовательского интерфейса (UI) и управления их состоянием, обработкой событий и валидацией вводимой информации, определения навигации, а также поддержку интернационализации (i18n) и доступности (accessibility).
2. Специальная библиотека JSP тегов для выражения интерфейса JSF на JSP странице.
Технология JSF включает в себя пакет PrimeFaces - фреймворк для создания веб-приложений. Гостевая книга -- программное обеспечение (обычно скрипт), применяющееся на веб-сайтах и позволяющее их посетителям оставлять различные пожелания, замечания, краткие заметки, адресованные владельцу или будущим посетителям. В связи с этим, гостевая книга представляет собой максимально упрощённый вариант веб-форума. Минимальный набор функционала для гостевой книги -- возможность оставлять сообщения. Современные гостевые книги обладают широкими возможностями: начиная от элементарной модерации сообщений и заканчивая полнофункциональными поисковыми системами и визуальными текстовыми редакторами сообщений. Цель: Разработать гостевую книгу с испоьзованием технологий JSF и PrimeFaces.
1.Теоретическая часть
Как было сказано во введении основной функционал гостевой книги включает в себя возможность оставлять сообщения, в том числе различного рода отформатированные (курсив, жирный шрифт, подчеркивание). По завершению работы нам будет доступно web-приложение, выполняющее данную функцию, а также в нем будет предусмотрена возможность регистрации и редактирования личных данных.
Средой разработки будет IDE Netbeans. Основной язык разработки - java. Также нам понадобятся пакеты JSF и PrimeFaces. Веб-приложение будет развернуто на сервере GlassFish, который входит в пакет установки Netbeans. Для хранения необходимой информации воспользуемся СУБД MySQL и инструментом PHP MyAdmin.
2.Практическая часть
Наше приложение представляет собой информационный ресурс, исходные файлы которого можно разделить на три части:
1. Веб-страницы - интернет страницы формата xhtml, содержащие основной html-код, код подключения элементов JSF и Primefaces, а также java-код, необходимый для подключения к исходным файлам проекта, написанным на языке java.
2. Файлы исходного кода проекта - файлы разрешения .java, содержащие основной java-код. Это так называемые «бины» - файлы для обращения к веб-страницам проекта, файлы для подключения к базе данных и файлы-классы для инициализации необходимых нам объектов.
3. База данных MySQL, содержащая необходимую нам информацию.
Все веб-страницы, написанные для данного приложения являются клиентами двух основных шаблонов - template.xhtml (рисунок 1), temp.xhtml(рисунок 2), необходимые для отображения веб-страниц незарегистрированным и зарегистрированным пользователям соответственно.
Рисунок 1 - Клиент шаблона template.xhtml
Рисунок 2 - Клиент шаблона temp.xhtml
Основным различием этих шаблонов является наличие поля редактирования текста во втором шаблоне. Данное поле является элементом «editor» (Рисунок 3) библиотеки PrimeFaces.
Рисунок 3 - Панель редактирования текста «editor»
фреймворк редактирование гостевой книга
Еще одним различием является наличие у зарегистрированных пользователей клиентской панели, на которой показана дата регистрации пользователя, а также ссылка на страницу редактирования личных данных.
Рисунок 4 - Клиентская панель
Шаблон template.xhtml разделен на три блока(div). Первый блок содержит две панель с логотипом (Рисунок 5). Второй - блок с клиентской панелью(панелью авторизации) (Рисунок 4). Третий блок содержит основной контент (Рисунок 6).
Рисунок 5 - Шапка приложения
Рисунок 6 - Основной контент
Основной контент приложения выводится на страницу с помощбю элемента «DataGrid» библиотеки primefaces(Рисунок 6).
3.Структура приложения
При запуске приложения мы попадаем на главную страницу - index.xhtml(Рисунок 14).
Рисунок 14 - Главная страница приложения
Как описывалось выше в верхней части страницы расположен логотип приложени. Основную часть страницы занимает выводимый на экран посредством элемента «DataGrid». Информация берется из таблицы messages базы данных guestbook, подключение к котрой происходит с помощью классов MySQLCon.java и SqlAction.java пакета sql нашего приложения.
Перейдя по ссылке «Регистрация» мы попадем на страницу заполнения полей, необходимых для регистрации на данном веб-приложении. Заполнив все необходимые поля, мы увидим сообщение, что регистрация прошла успешно и мы можем авторизоваться. При регистрации все данные о пользователе, полученные после заполнения полей загружаются в таблицу users базы данных guestbook. Заметим, что пароль здесь хранится не в явном виде. С помощью функции hashcode класса String мы хешируем пароль и помещяем в базу данных уже хеш нашего пароля.
После регистрации мы можем авторизоваться с помощью логина и пароля. После этого нам будет доступна функция добавления сообщений на веб-приложение. Введя необходимый текст в элемент «editor « библиотеки Primefaces и нажав кнопку «Добавить», написанное нами сообщение будет загружено в таблицу messages. Нажав на кнопку «Обновить» мы увидим, что наше сообщение стало доступным для чтения на главной странице приложения.
Пройдя по ссылке «Профиль», находящейся в левой(клиентской)
Части приложения мы попадем на страницу редактирования личных данных (Имя, фамилия, email и т.д.). Внеся необходимые изменения и нажав кнопку «Сохранить изменения» соответствующие поля будут перезаписаны в таблице users базы данных guestbook.
Заключение
Нам удалось реализовать веб-приложение - гостевую книгу с использованием технологий JSF и PrimeFaces, содержащее различные элементы данных технологий. Интерфейс приложения интуитивно понятен и прост.
Приложение 1
Листинг программы
Содержимое temp.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<h:outputStylesheet name="./css/default.css"/>
<h:outputStylesheet name="./css/cssLayout.css"/>
<title>GuestBook</title>
</h:head>
<h:body style="width: 900px; margin-left: 15%; margin-right: 15%; background-image: url(images/template/bkg.jpg); background-attachment: fixed" >
<div id="top" style="background-color: rgba(0,0,0,0)">
<h:form>
<p:panel>
<p:commandLink action="logindex" ajax="false" style="margin: -10px">
<p:graphicImage value="images/template/gb.png" style="border-width: 3px; border-radius: 5px; width: 875px"/>
</p:commandLink>
</p:panel>
</h:form>
</div>
<div id="left" style="width: 182px; background-color: rgba(0,0,0,0)">
<h:form id="loginForm" >
<center>
<p:panel header="Добро пожаловать!">
<p:growl id="msg" showDetail="true" life="3000" />
<h:panelGrid id="loginPanel" columns="1">
<p:panel header="Привет, #{loginBean.authUser.uname}!" style="margin-left: -8px">
<center>
<p:graphicImage value="#{loginBean.authUser.avatar}" height="105" width="105" />
<p:spacer/>
<h:outputText value="Зарегистрирован: #{loginBean.authUser.regdate}"/>
<p:separator/>
<p:commandLink value="Профиль" action="profile" ajax="false" style="color: rgba(252,221,118,1)" />
</center>
</p:panel>
</h:panelGrid>
<p:spacer/>
<p:commandLink action="#{loginBean.logout}" value="Выйти" style="color: rgba(252,221,118,1)" ajax="false"/>
</p:panel>
</center>
</h:form>
</div>
<div id="content" class="left_content" style=" margin-left: 197px; background-color: rgba(0,0,0,0)">
<ui:insert name="content"></ui:insert>
</div>
</h:body>
</html>
Содержимое index.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<body>
<ui:composition template="./template.xhtml">
<ui:define name="content">
<h:form>
<p:dataGrid var="mess" value="#{gridBean.messages}" columns="1" id="mess"
rows="12" paginator="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="9,12,15">
<p:panel header="#{mess.mess_date}">
<h:panelGrid columns="2">
<p:panel footer="#{mess.author_name}" style="text-align: center; margin-right: 30px">
<p:graphicImage value="#{mess.author_av}" height="105" width="105"/>
</p:panel>
<h:outputText value="#{mess.content}" escape="false" />
</h:panelGrid>
</p:panel>
</p:dataGrid>
</h:form>
</ui:define>
</ui:composition>
</body>
</html>
Содержимое template.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<h:outputStylesheet name="./css/default.css"/>
<h:outputStylesheet name="./css/cssLayout.css"/>
<title>GuestBook</title>
</h:head>
<h:body style="width: 900px; margin-left: 15%; margin-right: 15%; background-image: url(images/template/bkg.jpg); background-attachment: fixed" >
<div id="top" style="background-color: rgba(0,0,0,0)">
<h:form>
<p:panel>
<p:commandLink action="index" ajax="false" style="margin: -10px">
<p:graphicImage value="images/template/gb.png" style="border-width: 3px; border-radius: 5px; width: 875px"/>
</p:commandLink>
</p:panel>
</h:form>
</div>
<div id="left" style="width: 182px; background-color: rgba(0,0,0,0)">
<h:form id="loginForm" >
<p:panel header="Авторизация">
<p:growl id="msg" showDetail="true" life="3000" />
<h:panelGrid id="loginPanel" columns="1">
<h:outputText value="Логин" />
<p:inputText id="username" value="#{loginBean.uname}" style="width: 130px" />
<h:outputText value="Пароль" />
<p:password id="password" value="#{loginBean.password}" feedback="false" style="width: 130px" />
</h:panelGrid>
<center>
<p:commandLink action="#{loginBean.loginProject}" value="Вход" update="loginPanel,msg" ajax="false" style="color: rgba(252,221,118,1)"/>
<h:outputText value=" | "/>
<p:commandLink value=" Регистрация" action="registration" style="color: rgba(252,221,118,1)" ajax="false" />
</center>
</p:panel>
</h:form>
</div>
<div id="content" class="left_content" style=" margin-left: 197px; background-color: rgba(0,0,0,0)">
<ui:insert name="content">Content</ui:insert>
</div>
</h:body>
</html>
Содержимое logindex.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<body>
<ui:composition template="./temp.xhtml">
<ui:define name="content">
<h:form id="GridForm">
<p:panel>
<p:panel>
<center>
<p:editor id="editor" value="#{editBean.mess_content}" width="600"/>
<p:spacer height="40"/>
<p:commandButton value="Добавить" action="#{editBean.insert_mess}" update="mess" ajax="false"/>
<p:commandButton value="Обновить" update="GridForm"/>
</center>
</p:panel>
<p:spacer/>
<p:dataGrid var="mess" value="#{gridBean.messages}" columns="1" id="mess"
rows="12" paginator="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="9,12,15">
<p:panel header="#{mess.mess_date}">
<h:panelGrid columns="2">
<p:panel footer="#{mess.author_name}" style="text-align: center; margin-right: 30px">
<p:graphicImage value="#{mess.author_av}" height="105" width="105"/>
</p:panel>
<h:outputText value="#{mess.content}" escape="false" />
</h:panelGrid>
</p:panel>
</p:dataGrid>
</p:panel>
</h:form>
</ui:define>
</ui:composition>
</body>
</html>
Содержимое profile.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<body>
<ui:composition template="./temp.xhtml">
<ui:define name="content">
<h:form id="profForm">
<p:panel >
<h:panelGrid id="profPanel" columns="3">
<p:graphicImage value="#{loginBean.authUser.avatar}" ></p:graphicImage>
<p:inputText value="#{profBean.new_av}" ></p:inputText>
<p:spacer/>
<h:outputText value="Имя:" />
<h:outputText value="#{loginBean.authUser.first_name}" />
<p:inputText value="#{profBean.new_first}" ></p:inputText>
<h:outputText value="Фамилия:" />
<h:outputText value="#{loginBean.authUser.last_name}" />
<p:inputText value="#{profBean.new_last}" ></p:inputText>
<h:outputText value="Email:" />
<h:outputText value="#{loginBean.authUser.email}" />
<p:inputText value="#{profBean.new_email}" ></p:inputText>
</h:panelGrid>
<p:commandLink action="#{profBean.update()}" update=":loginForm:msg" ajax="false" style="margin-left: 200px">
<p:graphicImage value="images/template/ok.png" height="50" style="margin-top: 20px" title="Сохранить изменения"/>
</p:commandLink>
</p:panel>
</h:form>
</ui:define>
</ui:composition>
</body>
</html>
Содержимое registration.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<body>
<ui:composition template="./template.xhtml">
<ui:define name="content">
<h:form id="regForm">
<p:panel >
<h:outputText value="Имя: " />
<p:inputText value="#{registrationBean.first_name}" ></p:inputText>
<p:spacer></p:spacer>
<p:spacer></p:spacer>
<h:outputText value="Фамилия: " />
<p:inputText value="#{registrationBean.last_name}" ></p:inputText>
<p:spacer></p:spacer>
<p:spacer></p:spacer>
<h:outputText value="Email: *" />
<p:inputText value="#{registrationBean.email}" ></p:inputText>
<p:spacer></p:spacer>
<p:spacer></p:spacer>
<h:outputText value="Ник: *" />
<p:inputText value="#{registrationBean.uname}" ></p:inputText>
<p:spacer></p:spacer>
<p:spacer></p:spacer>
<h:outputText value="Пароль: *" />
<p:password value="#{registrationBean.pass}" feedback="true" ></p:password>
<p:spacer></p:spacer>
<p:spacer></p:spacer>
<h:outputText value="Аватар: " />
<p:inputText value="#{registrationBean.avatar}" ></p:inputText>
<p:spacer></p:spacer>
<p:spacer></p:spacer>
</h:panelGrid>
<p:commandLink action="#{registrationBean.insert}" update=":loginForm:msg" ajax="false">
<p:graphicImage value="images/register/register.png" width="250"/>
</p:commandLink>
</p:panel>
</h:form>
</ui:define>
</ui:composition>
</body>
</html>
Содержимое EditBean.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package beans;
import sql.SqlAction;
import sql.MySQLCon;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import static sql.MySQLCon.mclass;
import static sql.MySQLCon.mpassword;
import static sql.MySQLCon.murl;
import static sql.MySQLCon.muser;
import sql.SqlAction;
import java.text.SimpleDateFormat;
import java.util.Date;
import src.User;
@ManagedBean(name = "editBean")
@ViewScoped
public class EditBean implements Serializable, MySQLCon {
private String mess_content;
public void insert_mess() {
SqlAction sa = new SqlAction(murl,muser,mpassword,mclass);
String author_name = LoginBean.uname;
String author_av = "";
String author_date = "";
ResultSet rs = sa.executeResult("SELECT * FROM users WHERE uname='"+author_name+"'");
if (rs != null) {
try {
while(rs.next()) {
author_av = rs.getString("avatar");
author_date = rs.getString("regdate");
}
sa.execute("insert into messages(content, mess_date, author_name, author_av, author_date) values ('" + mess_content + "','Запись добавлена "+String.valueOf((new SimpleDateFormat("yyyy.MM.dd 'в' HH:mm:ss")).format(new Date()))+"','" + author_name + "','" + author_av + "','" + author_date+"');");
} catch (SQLException ex) {}
finally{sa.close();}
}
}
public String getMess_content() {
return mess_content;
}
public void setMess_content(String mess_content) {
this.mess_content = mess_content;
}
}
Содержимое GridBean.java
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package beans;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import sql.MySQLCon;
import static sql.MySQLCon.*;
import sql.SqlAction;
import src.Message;
@ManagedBean
@RequestScoped
public class GridBean implements Serializable, MySQLCon {
private SqlAction sa;
private List<Message> messages;
public GridBean() {
sa = new SqlAction(murl,muser,mpassword,mclass);
addMessages();
}
public void addMessages() {
messages = new ArrayList<Message>();
ResultSet rs = sa.executeResult("SELECT * FROM messages");
if (rs != null) {
try {
while(rs.next()) {
messages.add(new Message(rs.getString("content"), rs.getString("mess_date"),
rs.getString("author_name"), rs.getString("author_av"), rs.getString("author_date")));
}
} catch (SQLException ex) {}
finally{sa.close();}
}
}
public List<Message> getMessages() {
return messages;
}
public void setMessages(List<Message> messages) {
this.messages = messages;
}
}
Содержимое LoginBean.java
package beans;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import sql.MySQLCon;
import static sql.MySQLCon.mclass;
import static sql.MySQLCon.mpassword;
import static sql.MySQLCon.murl;
import static sql.MySQLCon.muser;
import sql.SqlAction;
import src.User;
@ManagedBean(name = "loginBean")
@SessionScoped
/**
*
* @author User
*/
public class LoginBean implements Serializable, MySQLCon {
private String password;
public static String uname;
private User AuthUser = new User("","","","","","","");
public User getAuthUser() {
return AuthUser;
}
public void setAuthUser(User AuthUser) {
this.AuthUser = AuthUser;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
LoginBean.uname = uname;
}
public void AuthentUser(String uname, String pass){
SqlAction sa = new SqlAction(murl,muser,mpassword,mclass);
ResultSet rs = sa.executeResult("SELECT * FROM users WHERE uname='"+uname+"'");
if (rs != null) {
try {
while(rs.next()) {
this.AuthUser = new User(rs.getString("first_name"), rs.getString("last_name"),
rs.getString("email"), rs.getString("uname"), rs.getString("pass"),
rs.getString("regdate"), rs.getString("avatar"));
}
} catch (SQLException ex) {
FacesContext.getCurrentInstance().addMessage(
null,new FacesMessage(FacesMessage.SEVERITY_WARN,
"Ошибка",ex.toString()));
}
finally{sa.close();}
}
}
public boolean result(String uname, String pass){
AuthentUser(uname,pass);
return (this.AuthUser.getPass().equals(pass));
}
public String loginProject() {
FacesContext mess = FacesContext.getCurrentInstance();
if (result(uname,String.valueOf(password.hashCode()))) {
mess.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_INFO,"Авторизация прошла успешно.","Удачного дня."));
return "logindex";
} else {
mess.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_WARN,"Неверный логин или пароль!","Повторите попытку."));
return "index";
}
}
public String logout() {
return "index";
}
}
Содержимое ProfBean.java
package beans;
import sql.SqlAction;
import sql.MySQLCon;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import static sql.MySQLCon.mclass;
import static sql.MySQLCon.mpassword;
import static sql.MySQLCon.murl;
import static sql.MySQLCon.muser;
@ManagedBean(name = "profBean")
@ViewScoped
public class ProfBean implements Serializable, MySQLCon {
private String new_first;
private String new_last;
private String new_email;
private String new_uname;
private String pass;
private String new_av;
public void update() {
SqlAction sa = new SqlAction(murl,muser,mpassword,mclass);
if (!new_first.trim().equals("")) sa.execute("UPDATE users SET first_name = '"+new_first+"' WHERE uname= '"+LoginBean.uname+"'");
sa.close();
if (!new_last.trim().equals("")) sa.execute("UPDATE users SET last_name = '"+new_last+"' WHERE uname= '"+LoginBean.uname+"'");
sa.close();
if (!new_email.trim().equals("")) sa.execute("UPDATE users SET email = '"+new_email+"' WHERE uname= '"+LoginBean.uname+"'");
sa.close();
if (!new_av.trim().equals("")) sa.execute("UPDATE users SET avatar = '"+new_av+"' WHERE uname = '"+LoginBean.uname+"'");
sa.close();
}
public String getNew_first() {
return new_first;
}
public void setNew_first(String new_first) {
this.new_first = new_first;
}
public String getNew_last() {
return new_last;
}
public void setNew_last(String new_last) {
this.new_last = new_last;
}
public String getNew_email() {
return new_email;
}
public void setNew_email(String new_email) {
this.new_email = new_email;
}
public String getNew_uname() {
return new_uname;
}
public void setNew_uname(String new_uname) {
this.new_uname = new_uname;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getNew_av() {
return new_av;
}
public void setNew_av(String new_av) {
this.new_av = new_av;
}
}
Содержимое MySQLCon.java
package sql;
public interface MySQLCon {
String murl = "jdbc:mysql://localhost:3306/guestbook?characterEncoding=utf8";
String muser = "root";
String mpassword = "123456";
String mclass = "com.mysql.jdbc.Driver";
}
Содержимое SqlAction.java
package sql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class SqlAction {
private Connection con = null;
private PreparedStatement pst = null;
private ResultSet rs = null;
private String errorString = "";
private String url;
private String user;
private String password;
public SqlAction(String url, String user, String password, String jdbcClass) {
this.url = url;
this.user = user;
this.password = password;
try{
Class.forName(jdbcClass);
} catch(Exception ex) {errorString = "Ошибка получения драйвера: "+ex.getMessage();}
}
public String getErrorString() {
return errorString;
}
public boolean isError() {
return !errorString.isEmpty();
}
private boolean connect(){
try {
con = DriverManager.getConnection(url,user,password);
errorString = "";
return true;
}
catch (Exception ex) {
errorString = "Запрос завершился с ошибкой: "+ex.getMessage();
return false;
}
}
private void executeSQL(String sql, boolean resultNeeded){
if ((!isError())&&(connect())) {
try{
pst = con.prepareStatement(sql);
if (resultNeeded) {
rs=pst.executeQuery();
errorString = "";
}
else {
pst.execute();
errorString = "";
close();
}
}
catch (Exception ex){
errorString = "Запрос завершился с ошибкой: "+ex.getMessage();
close();
}
}
}
public ResultSet executeResult(String sql){
executeSQL(sql,true);
if (isError()) {return null;} else {return rs; }
}
public boolean execute(String sql){
executeSQL(sql,false);
return !isError();
}
public void close(){
try{
if (rs!=null) {rs.close(); rs=null;}
if (pst!=null) {pst.close(); pst=null;}
if (con!=null) {con.close(); con = null;}
}
catch(Exception e){}
}
}
Содержимое RegistrationBean.java
package beans;
import sql.SqlAction;
import sql.MySQLCon;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
@ManagedBean(name = "registrationBean")
@ViewScoped
public class RegistrationBean implements Serializable, MySQLCon {
private String first_name;
private String last_name;
private String email;
private String uname;
private String pass;
private String avatar;
public String insert() {
SqlAction sa = new SqlAction(murl,muser,mpassword,mclass);
FacesContext mess = FacesContext.getCurrentInstance();
if (uname.trim().equals("") || pass.trim().equals("") || email.trim().equals(""))
{
mess.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_WARN,"Внимание!","Поля, отмеченные '*' обязательны для заполнения."));
return "registration";
}
else
{
sa.execute("insert into users(first_name, last_name, email, uname, pass, regdate, avatar) values ('" + first_name + "','" + last_name + "','" + email + "','" + uname + "','" + pass.hashCode() + "', CURDATE(),'"+avatar+"');");
if (sa.getErrorString().equals(""))
{
mess.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_INFO,"Регистрация прошла успешно.","Можете авторизоваться."));
return "index";
}
else if(sa.getErrorString().equals("Запрос завершился с ошибкой: Duplicate entry '"+uname+"' for key 'uname'"))
{
mess.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR,"Ошибка!","Пользователь с таким именем уже зарегистрирован."));
return "registration";
}
else
{
mess.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_WARN,"Ошибка!",sa.getErrorString()));
return "registration";
}
}
}
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
public String getLast_name() {
return last_name;
}
public void setLast_name(String last_name) {
this.last_name = last_name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
}
Содержимое Message.java
package src;
public class Message {
private String content;
private String mess_date;
private String author_name;
private String author_av;
private String author_date;
public Message(String content, String mess_date, String author_name, String author_av, String author_date) {
this.content = content;
this.mess_date = mess_date;
this.author_name = author_name;
this.author_av = author_av;
this.author_date = author_date;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
String getMess_date() {
return mess_date;
}
public void setMess_date(String mess_date) {
this.mess_date = mess_date;
}
public String getAuthor_name() {
return author_name;
}
public void setAuthor_name(String author_name) {
this.author_name = author_name;
}
public String getAuthor_av() {
return author_av;
}
public void setAuthor_av(String author_av) {
this.author_av = author_av;
}
public String getAuthor_date() {
return author_date;
}
public void setAuthor_date(String author_date) {
this.author_date = author_date;
}
}
Содержимое User.java
package src;
import java.io.Serializable;
public class User implements Serializable{
private String first_name;
private String last_name;
private String email;
private String uname;
private String pass;
private String regdate;
private String avatar;
public User(String first_name, String last_name, String email, String uname, String pass, String regdate, String avatar) {
this.first_name = first_name;
this.last_name = last_name;
this.email = email;
this.uname = uname;
this.pass = pass;
this.regdate = regdate;
this.avatar = avatar;
}
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
public String getLast_name() {
return last_name;
}
public void setLast_name(String last_name) {
this.last_name = last_name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getRegdate() {
return regdate;
}
public void setRegdate(String regdate) {
this.regdate = regdate;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
}
Приложение 2
Дамп базы данных «guestbook»
-- phpMyAdmin SQL Dump
-- version 3.5.8.1deb1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Окт 02 2013 г., 07:08
-- Версия сервера: 5.5.32-0ubuntu0.13.04.1
-- Версия PHP: 5.4.9-4ubuntu2.3
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- База данных: `guestbook`
--
-- --------------------------------------------------------
--
-- Структура таблицы `messages`
--
CREATE TABLE IF NOT EXISTS `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`content` varchar(10000) NOT NULL,
`mess_date` varchar(100) NOT NULL,
`author_name` varchar(100) NOT NULL,
`author_av` varchar(1000) NOT NULL,
`author_date` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=20 ;
--
-- Дамп данных таблицы `messages`
--
INSERT INTO `messages` (`id`, `content`, `mess_date`, `author_name`, `author_av`, `author_date`) VALUES
(14, 'Это первый пост.<br/>Первый зарегистрированный пользователь.<br/>', 'Запись добавлена 2013.10.02 в 02:41:12', 'Grey', 'http://www.avatarz.ru/images/409.gif', '2013-10-02'),
(15, 'Это второй. <br/>Будем проверять возможности редактора текста.<br/>', 'Запись добавлена 2013.10.02 в 02:42:27', 'JG', 'http://avatars.kards.qip.ru/images/avatar/8a/3d/15754.jpg', '2013-10-01'),
(16, '<strong>Этот текст жирный.</strong><br/><br/><em>Этот курсивный.</em><br/><u><br/>Подчеркнутый.</u><br/><strike><br/>Зачеркнутый.</strike><br/>', 'Запись добавлена 2013.10.02 в 02:45:11', 'Grey', 'http://www.avatarz.ru/images/409.gif', '2013-10-02'),
(17, 'Это<sub>подстрочный индекс</sub><br/><br/>Это<sup>настрочный индекс</sup><br/><br/><font color="#ff0000">Красный текст<br/><br/><span style="background-color: rgb(102, 51, 255);"><span style="color: rgb(255, 255, 0);">Желтый текст на синем фоне<br/></span></span></font>', 'Запись добавлена 2013.10.02 в 02:50:17', 'JG', 'http://avatars.kards.qip.ru/images/avatar/8a/3d/15754.jpg', '2013-10-01'),
(19, 'Изображение<br/><br/><img src="http://3.bp.blogspot.com/-YEbumtBgsMc/T923NTw87XI/AAAAAAAADJY/AdaKioW5MU8/s200/102-Ubuntu+11.04+Rus-online.jpg"/><br/>', 'Запись добавлена 2013.10.02 в 03:24:04', 'Grey', 'http://www.avatarz.ru/images/409.gif', '2013-10-02');
-- --------------------------------------------------------
--
-- Структура таблицы `users`
--
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(100) NOT NULL,
`last_name` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
`uname` varchar(100) NOT NULL,
`pass` varchar(100) NOT NULL,
`regdate` varchar(100) NOT NULL,
`avatar` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uname` (`uname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=37 ;
--
-- Дамп данных таблицы `users`
--
INSERT INTO `users` (`id`, `first_name`, `last_name`, `email`, `uname`, `pass`, `regdate`, `avatar`) VALUES
(34, 'Nikita', 'Shmorin', 'nikitadada@mail.ru', 'Nikitos', '46760945', '2013-10-02', 'http://avatarkina.ru/images/joomgallery/thumbnails/_9/___20110808_1289085601.gif'),
(35, 'Ivanov', 'Egor', 'example@mail.ru', 'Grey', '2032024373', '2013-09-28', 'http://avatarkina.ru/images/joomgallery/thumbnails/_9/___20110808_1691439939.gif'),
(36, 'Johny', 'Good', 'someemail@yahoo.com', 'JG', '1450575459', '2013-09-29', 'http://avatarkina.ru/images/joomgallery/thumbnails/_9/___20110808_1514974562.gif');
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
ено н Размещено на Allbest
Подобные документы
Трансляция как процесс перевода программного кода из текстовой формы в машинные коды. Основные категории программ Java. Основные управляющие операторы. Объявление и инициализация переменных. Основные средства разработки приложений, написанных на Java.
презентация [938,2 K], добавлен 26.10.2013Анализ предметной области и функций сайта. Разработка структуры базы данных, структуры и дизайна web-сайта. Описание установки CMS "Joomla!" и программной оболочки Denwer, создание гостевой книги, галереи и карты Google, результаты их тестирования.
дипломная работа [2,3 M], добавлен 19.01.2017Разработка графического редактора для рисования двухмерной и трехмерной графики, используя язык программирования Java и интерфейсы прикладного программирования Java 2D и Java 3D. Создание графического редактора 3D Paint. Основные методы класса Graphics.
курсовая работа [197,5 K], добавлен 19.11.2009Преимущество использования программ, написанных на Java, требования к ним и настройки на клиентском ПК. Развертывание и последующее "автоматическое" обновление версий GUI клиента с помощью использования технологии Java Web Start в среде Windows.
реферат [33,2 K], добавлен 16.05.2011Django — свободный фреймворк для веб-приложений на языке Python, использующий шаблон проектирования MVC. Архитектура и основные компоненты приложения. Главные компоненты среды разработки Django. Некоторые возможности и взаимосвязь компонентов фреймворка.
реферат [23,7 K], добавлен 18.01.2015Разработка технологии и средств реализации Java-приложения, сокращающих трудоемкость создания и гибкость модификации интерфейса пользователя. Использование XML-документов для описания внешнего представления, элементов управления и событий экранных форм.
дипломная работа [2,8 M], добавлен 19.08.2011Расширяемый язык разметки XML. Описание типа документа DTD. Значение XML и платформы Java. Обзор стандартных анализаторов DOM и SAX. Технология Java Servlet, Java Server Pages (JSP), JavaBeans. Общая функциональность программного продукта. Модель данных.
курсовая работа [422,0 K], добавлен 21.02.2009Знакомство с этапами разработки трёх приложений для системы семейства Linux с использованием языка программирования С++. Анализ особенностей операционной системы Ubuntu 12.10. Характеристика способов тестирования команд с помощью стандартных средств.
контрольная работа [732,1 K], добавлен 06.08.2013Редактирование в трехмерном пространстве. Команды редактирования, способы изменения значений параметров. Ввод и редактирование содержимого ячеек. Рабочие книги и листы. Ввод текста, чисел, исправление, формулы. Создание презентации в режиме структуры.
контрольная работа [151,7 K], добавлен 22.02.2011Описание языков программирования Java и JavaFX. Среда разработки NetBeans и класс численных методов. Архитектура и принцип работы апплета с понятным пользовательским интерфейсом. Разработка алгоритма программы на примере модели межвидовой конкуренции.
курсовая работа [1023,2 K], добавлен 19.09.2012