Скачиваний:
72
Добавлен:
09.05.2014
Размер:
111.62 Кб
Скачать

Санкт-Петербургский государственный университет информационных технологий, механики и оптики

Кафедра вычислительной техники

Системы программирования интернет-приложений

Лабораторная работа № 7

«JSF»

Вариант 317

Выполнили:

студенты группы 4103

Пермяков Валерий

Голубцов Евгений

2011 Задание

Разработать приложение на базе JavaServer Faces Framework, которое осуществляет проверку попадания точки в заданную область на координатной плоскости.

Приложение должно включать в себя JSP-страницу и набор управляемых бинов (managed beans), реализующих логику на стороне сервера. JSP-страница должна содержать следующие элементы:

  1. "Шапку", содержащую ФИО студента, номер группы и номер варианта.

  2. Набор компонентов для задания координат точки и радиуса области (в соответствии с вариантом задания). Если компонент допускает ввод заведомо некорректных данных (таких, например, как буквы в координатах точки или отрицательный радиус), то приложение должно осуществлять их валидацию.

  3. Динамически обновляемую картинку, изображающую область на координатной плоскости в соответствии с номером варианта и точки, координаты которых были заданы пользователем. Цвет точек должен зависить от факта попадания / непопадания в область.

  4. Таблицу со списком результатов предыдущих проверок.

Разработанное приложение необходимо развернуть на сервере приложений Glassfish.

LocationChecker.Java

package Lab3Package;

import java.awt.*;

import java.awt.image.BufferedImage;

import java.io.*;

import javax.imageio.ImageIO;

import javax.servlet.*;

import javax.faces.context.FacesContext;

public class LocationChecker

{

private double _coordX,_coordY,_radius;

private boolean _result;

//-------Свойства

public double getCoordX(){

return _coordX;

}

public void setCoordX(double coordX){

_coordX = coordX;

}

public double getCoordY(){

return _coordY;

}

public void setCoordY(double coordY){

_coordY = coordY;

}

public double getRadius(){

return _radius;

}

public void setRadius(double radius){

_radius = radius;

}

public boolean getResult(){

return _result;

}

public void setResult(boolean result){

_result = result;

}

//-------Методы

//Проверка попадания в область

public void isInArea(){

if (_coordY <= 0 && _coordX <= 0 && _coordY >= -_coordX - _radius)

_result = true;

else if (_coordX >= 0 && _coordY <= 0 && _coordX <= _radius / 2 &&

_coordY <= _radius)

_result = true;

else if ((Math.pow(_coordX, 2) + Math.pow(_coordY, 2)) <= Math.pow(_radius, 2) &&

_coordX >= 0 && _coordY >= 0)

_result = true;

else

_result = false;

}

/**

*Рисование картинки.

*Полученный результат сохраняется в "папка_проекта/build/web/имя_файла"

*/

public void drawImage(String fileName) throws IOException{

int w = 700;//ширина картинки

int h = 700;//высота кртинки

int r = 70;//радиус на картинке

int scale =(int)(r/_radius);//масштаб для преобразования координат

int grX = (int)(_coordX*scale);//x точки на картинке

int grY = (int)(_coordY*scale);//y точки на картинке

int type = BufferedImage.TYPE_INT_RGB;

BufferedImage img = new BufferedImage(w, h, type);

Graphics2D g2 = img.createGraphics();

//Очищаем фон

g2.setPaint(Color.WHITE);

g2.fillRect(0, 0, w, h);

//Рисуем область

g2.setPaint(new Color(0x99,0xCC,0x99));

g2.fillArc(w/2 - r, h/2 - r, 2*r, 2*r, 0, 90);

g2.fillRect(w/2, h/2, r/2,r);

g2.fillPolygon(new int[]{w/2,w/2-r,w/2}, new int[]{h/2,h/2,h/2+r},3);

//Рисуем оси

g2.setPaint(Color.BLACK);

g2.drawLine(0, h/2, w, h/2);

g2.drawLine(w/2, 0, w/2, h);

//Ставим деления на оси Ox

g2.drawLine(w/2+r/2, h/2+4, w/2+r/2, h/2-4);

g2.drawLine(w/2+r, h/2+4, w/2+r, h/2-4);

g2.drawLine(w/2-r/2, h/2+4, w/2-r/2, h/2-4);

g2.drawLine(w/2-r, h/2+4, w/2-r, h/2-4);

//Подписываем их

g2.drawString(Double.toString(_radius/2), w/2+r/2, h/2 + 15);

g2.drawString(Double.toString(_radius), w/2+r, h/2 + 15);

g2.drawString(Double.toString(-_radius/2), w/2-r/2, h/2 + 15);

g2.drawString(Double.toString(-_radius), w/2-r, h/2 + 15);

//Ставим деления на оси Oy

g2.drawLine(w/2+4, h/2+r/2, w/2-4, h/2+r/2);

g2.drawLine(w/2+4, h/2+r, w/2-4, h/2+r);

g2.drawLine(w/2+4, h/2-r/2, w/2-4, h/2-r/2);

g2.drawLine(w/2+4, h/2-r, w/2-4, h/2-r);

//Подписываем их

g2.drawString(Double.toString(-_radius/2), w/2 + 15, h/2 +r/2 + 2);

g2.drawString(Double.toString(-_radius), w/2 + 15, h/2 +r + 2);

g2.drawString(Double.toString(_radius/2), w/2 + 15, h/2 -r/2 + 2);

g2.drawString(Double.toString(_radius), w/2 + 15, h/2 -r + 2);

//Подписываем сами оси

g2.drawString("X", w-10, h/2 + 15);

g2.drawString("Y", w/2 + 10, 10);

//Выбор цвета точки в зависимости от результата

if(_result)

g2.setPaint(Color.BLUE);

else

g2.setPaint(Color.RED);

//Рисуем "точку"

g2.fillRect(w/2 + grX, h/2 - grY, 3, 3);

g2.dispose();

ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();

String path = servletContext.getRealPath("");

File file = new File(path + fileName);

ImageIO.write(img, "png", file);

}

}