Разработка гостевой книги

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.2011

  • Django — свободный фреймворк для веб-приложений на языке 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.