11491 JSP, JSTL, Core, SQL, JBuilder 2006, Tomcat 4.1. Пример разработки приложения, близкого к реальному. Сборник задач по программированию Александра Приходько
 

Сборник задач по программированию. Старая версия

 

 Приходько А. Н.

 

xsl, учебный материал, класс, объяснения, applet, образование, servlet, примеры, примеры
 

 

 

Java. Гнездо J.42. Пример разработки приложения, близкого к  реальному. JSP, JSTL, CORE, SQL, JBuilder 2006, Tomcat 4.1

 

 

 

Постановка задачи

Написать на JSP серверное приложение, позволяющее удаленному клиенту через HTTP-соединение получать информацию о времени приема на работу и увольнения сотрудников какого-либо предприятия. Критериями выборки являются: дата, после которой сотрудник был принят на работу; дата, перед которой сотрудник был уволен; должность сотрудника; а также всевозможные их комбинации. Также предусмотреть возможность ввода временного интервала посредством задания одной из категорий: Текущий месяц ("current month"), Предыдущий месяц ("previous month"), Текущий квартал ("current qrt"), Предыдущий квартал ("previous qrt"), Текущий год ("current year"), Предыдущий год ("previous year"). Формат данных должен быть "MMM DD, YYYY", где MMM - первые три буквы месяца на английском языке, DD - число цифрами, YYYY - год цифрами. Например, "Jan 05, 2006". Если в качестве категории временного интервала вводится "none", то обозначает, что для формирования временного интервала берутся начальная и конечная даты. В поле должности сотрудника может вводится фраза Все должности ("all").

Реализация

Детально будем рассматривать только процесс создания JSP-формы. В качестве используемой базы выберем MS Access из-за простоты инсталяции и подключения. База данных будет содержать 2 связанные таблицы. В первой таблице будет храниться перечень должностей. Вторая таблица будет предназначена для хранения ФИО всех сотрудников с указанием дат приема на работу и увольнения.

Шаг 1. Создаем базу данных и заполняем ее тестовыми данными. Создаем и проверяем пробный запрос.

Шаг 2. Создаем для базы данных ODBC-источник с именем Access2.

Шаг 3. Пишем и отлаживаем на Java консольное приложение, которое на вход получает символьные поля с критериями выборки, а на выход выдает строку запроса для базы данных. Полученную строку запроса проверяем в базе данных.

Шаг 4. В JBuilder 2006 создаем новый проект для сервера Tomcat 4.1,  новый Web-модуль и новый JSP. При создании JSP указываем генерацию  примера бина, генерацию submit form, использование в JSTL 1.0 библиотек тэгов CORE и SQL, создание runtime configuration. В свойствах Web-модуля устанавливаем свойство "Build Web archive" в значение "When building project or module".

Шаг 5. Открываем файл бина. Добавляем в бин необходимые свойства, которые будут свяаны с полями ввода в JSP-странице.

Шаг 6. Добавляем в бин необходимые фрагменты Java-кода из консольного приложения.

Шаг 7. Удаляем лишнее из JSP-страницы. Формируем заголовок.

Шаг 8. Добавляем в JSP-страницу поля для ввода начальной даты, конечной даты, выбора категории временного интервала. Запускаем JSP для проверки прямо из JBuilder 2006.

Шаг 9. Добавляем в JSP-страницу тэг для вывода строки запроса. Запускаем, вводим данные для проверки и нажимаем кнопку Submit.

Шаг 10. Добавляем в JSP-страницу тэги для подключения к базе данных. Добавляем поле выбора должности. Значения для выбора будем брать из базы данных. Запускаем, вводим данные для проверки и нажимаем кнопку Submit.

Шаг 11. Добавляем тэги для вывода на страницу содержимого запроса. Запускаем, вводим данные для проверки и нажимаем кнопку Submit.

Шаг 12. Делаем так, чтобы поля ввода и выбора помнили ранее введенные в них значения. Проверяем.

Шаг 13. Офромляем данные в виде таблицы. Добавляем элементы оформления вверх и вниз страницы, устанавливаем зеленый цвет фона. Проверяем.

Шаг 14. Из подкаталога проекта извлекаем WAR-файл Web-модуля и инсталируем его на сервер Tomcat 4.1 для реальной проверки.

 

 


Шаг 1. Создаем базу данных и заполняем ее тестовыми данными. Создаем и проверяем пробный запрос.

 

step_1_1.gif (4508 bytes) step_1_2.gif (6309 bytes)
step_1_3.gif (8528 bytes) step_1_4.gif (10232 bytes)
step_1_5.gif (7865 bytes)
step_1_6.gif (5740 bytes) step_1_7.gif (7828 bytes)


Шаг 2. Создаем для базы данных ODBC-источник с именем Access2.

 

step_2_1.gif (12061 bytes)


Шаг 3. Пишем и отлаживаем на Java консольное приложение, которое на вход получает символьные поля с критериями выборки, а на выход выдает строку запроса для базы данных. Полученную строку запроса проверяем в базе данных.

 

Результат работы консального приложения

 

step_3_1.gif (6470 bytes)

 

Текст консольного приложения

 

package pr_11;

import java.io.*;
import java.util.Calendar;

public class Untitled1 {

private String query0 = "select * from Tabl2 where Id<0";

private static int kk = 0;
private static String Aux_st_start = "";
private static String Aux_st_end = "";
private static String Aux_time_period = "";

private static String Cr_Month(int zz) {
String mm = "";
if (zz==0) mm="Jan";
if (zz==1) mm="Feb";
if (zz==2) mm="Mar";
if (zz==3) mm="Apr";
if (zz==4) mm="May";
if (zz==5) mm="Jun";
if (zz==6) mm="Jul";
if (zz==7) mm="Aug";
if (zz==8) mm="Sep";
if (zz==9) mm="Oct";
if (zz==10) mm="Nov";
if (zz==11) mm="Dec";

return mm;
}

private static void HandleTimePeriod() {

if (Aux_time_period.compareTo("previous qrt")==0) {
Calendar cal = Calendar.getInstance();
int yy = cal.get(cal.YEAR);
int zz = cal.get(cal.MONTH);
if (zz>2) {
zz = zz - 3;
}
else {
yy = yy-1; zz = zz - 3 + 12;
}
int qrt_First = (((zz / 3) * 3) + 1) - 1;
int qrt_Last = (((zz / 3) * 3) + 3) - 1;
String mm_First = Cr_Month(qrt_First);
String mm_Last = Cr_Month(qrt_Last);
cal.set(cal.MONTH, qrt_Last);
int tt = cal.getActualMaximum(cal.DAY_OF_MONTH);
Aux_st_start = mm_First + " 1, " + yy;
Aux_st_end = mm_Last + " "+ tt + ", " + yy;

}

if (Aux_time_period.compareTo("previous month")==0) {
Calendar cal = Calendar.getInstance();
int yy = cal.get(cal.YEAR);
int zz = cal.get(cal.MONTH);
if (zz==0) {
zz=11; yy=yy-1;
}
else zz=zz-1;
cal.set(cal.YEAR, yy);
cal.set(cal.MONTH, zz);
int tt = cal.getActualMaximum(cal.DAY_OF_MONTH);
String mm = Cr_Month(zz);
Aux_st_start = mm + " 1, " + yy;
Aux_st_end = mm + " "+ tt + ", " + yy;

}

if (Aux_time_period.compareTo("previous year")==0) {
Calendar cal = Calendar.getInstance();
int yy = cal.get(1)-1;
Aux_st_start = "Jan 1, " + yy;
Aux_st_end = "Dec 31, " + yy;
}

if (Aux_time_period.compareTo("current year")==0) {
Calendar cal = Calendar.getInstance();
int yy = cal.get(1);
Aux_st_start = "Jan 1, " + yy;
Aux_st_end = "Dec 31, " + yy;
}

if (Aux_time_period.compareTo("current qrt")==0) {
Calendar cal = Calendar.getInstance();
int yy = cal.get(cal.YEAR);
int zz = cal.get(cal.MONTH);
int qrt_First = (((zz / 3) * 3) + 1) - 1;
int qrt_Last = (((zz / 3) * 3) + 3) - 1;
String mm_First = Cr_Month(qrt_First);
String mm_Last = Cr_Month(qrt_Last);
cal.set(cal.MONTH, qrt_Last);
int tt = cal.getActualMaximum(cal.DAY_OF_MONTH);
Aux_st_start = mm_First + " 1, " + yy;
Aux_st_end = mm_Last + " "+ tt + ", " + yy;
}

if (Aux_time_period.compareTo("current month")==0) {
java.util.Calendar cal = java.util.Calendar.getInstance();
int yy = cal.get(cal.YEAR);
int zz = cal.get(cal.MONTH);
int tt = cal.getActualMaximum(cal.DAY_OF_MONTH);
String mm = Cr_Month(zz);
Aux_st_start = mm + " 1, " + yy;
Aux_st_end = mm + " "+ tt + ", " + yy;
}

}


public static String getQuery0() throws UnsupportedEncodingException, IOException {

String que0 = "";

BufferedReader br = new BufferedReader(
new InputStreamReader(System.in, "Cp866"));

System.out.print("Введите начальную дату: ");
String XXvar_start_date = br.readLine();;
System.out.print("Введите конечную дату: ");
String XXvar_end_date = br.readLine();;
System.out.print("Введите категорию временного периода: ");
String XXvar_time_period = br.readLine();
System.out.print("Введите должность: ");
String XXvar_Doljnost = br.readLine();

if (XXvar_start_date == null) {
XXvar_start_date = "";
}

if (XXvar_end_date == null) {
XXvar_end_date = "";
}

if (XXvar_Doljnost == null) {
XXvar_Doljnost = "";
}

if (XXvar_time_period == null) {
XXvar_time_period = "";
}

if (XXvar_Doljnost.compareTo("")==0) {
XXvar_Doljnost = "all";
}

if (!(XXvar_time_period.compareTo("none")==0)) {
XXvar_start_date = "";
XXvar_end_date = "";
}

if (!(XXvar_time_period.compareTo("none")==0)) {
Aux_time_period = XXvar_time_period;
HandleTimePeriod();
XXvar_start_date = Aux_st_start;
XXvar_end_date = Aux_st_end;
}

boolean Pr_Yes = (((!(XXvar_start_date.compareTo("")==0))) | (!(XXvar_end_date.compareTo("")==0)) | (!(XXvar_Doljnost.compareTo("All Doljnosts")==0)));
boolean Pr_Start = (!(XXvar_start_date.compareTo("")==0));
boolean Pr_End = (!(XXvar_end_date.compareTo("")==0));
boolean Pr_Doljnost = (!(XXvar_Doljnost.compareTo("all")==0));

String st = "SELECT doljnost, FIO, StartDate, EndDate FROM tabl_doljnost INNER JOIN personal ON tabl_doljnost.Id=personal.ref_doljnost";

if (Pr_Yes) st = st + " where";
if (Pr_Start) {
st = st + " (StartDate>=#"+XXvar_start_date+"#)";
}
if ((Pr_End | Pr_Doljnost) & Pr_Start) st = st + "and";
if (Pr_End) {
st = st + " (EndDate<=#"+XXvar_end_date+"#)";
}
if (Pr_Doljnost & Pr_End) st = st + "and";
if (Pr_Doljnost) {
st = st + " (Doljnost = '" + XXvar_Doljnost + "')";
}
que0 = st;

return que0;
}


public static void main(String [] Args) throws Exception {
System.out.print(getQuery0());
}
}


Шаг 4. В JBuilder 2006 создаем новый проект для сервера Tomcat 4.1,  новый Web-модуль и новый JSP. При создании JSP указываем генерацию  примера бина, генерацию submit form, использование в JSTL 1.0 библиотек тэгов CORE и SQL, создание runtime configuration. В свойствах Web-модуля устанавливаем свойство "Build Web archive" в значение "When building project or module".

 

step_4_0.gif (17729 bytes) step_4_1.gif (9484 bytes)
step_4_2.gif (19122 bytes) step_4_3.gif (30581 bytes)
step_4_4.gif (16823 bytes)


Шаг 5. Открываем файл бина. Добавляем в бин необходимые свойства, которые будут свяаны с полями ввода в JSP-странице. Получаем следующие файлы.

 

Файл Index.jsp

 

<%@ page contentType="text/html; charset=windows-1251" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>
<html>
<head>
<title>
index
</title>
</head>
<jsp:useBean id="indexBeanId" scope="session" class="pr_11.IndexBean" />
<jsp:setProperty name="indexBeanId" property="*" />
<body bgcolor="#ffffff">
<h1>
JBuilder Generated JSP
</h1>
<form method="post" action="index.jsp">
<br>Enter new value : <input name="sample"><br>
<br><br>
<input type="submit" name="Submit" value="Submit">
<input type="reset" value="Reset">
<br>
Value of Bean property is :<jsp:getProperty name="indexBeanId" property="sample" />
</form>
</body>
</html>

 

Файл IndexBean.java

 

package pr_11;

public class IndexBean {
private String query0 = "SELECT doljnost, FIO, StartDate, EndDate FROM tabl_doljnost INNER JOIN personal ON tabl_doljnost.Id=personal.ref_doljnost";
private String var_start_date = "";
private String var_end_date = "";
private String var_time_period = "";
private String var_doljnost = "all";

public void setVar_start_date(String newValue) {
var_start_date = newValue;
}

public void setVar_end_date(String newValue) {
var_end_date = newValue;
}


public void setVar_time_period(String newValue) {
var_time_period = newValue;
}

public void setVar_perfomer(String newValue) {
var_doljnost = newValue;
}

public String getVar_start_date() {
return var_start_date ;
}

public String getVar_end_date() {
return var_end_date;
}


public String getVar_time_period() {
return var_time_period;
}

public String getVar_perfomer() {
return var_doljnost;
}

}


Шаг 6. Добавляем в бин необходимые фрагменты Java-кода из консольного приложения. Убираем везде ключевое поле static.

 

Файл IndexBean.java

 

package pr_11;

import java.util.Calendar;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.UnsupportedEncodingException;
import java.io.IOException;

public class IndexBean {
private String query0 = "SELECT doljnost, FIO, StartDate, EndDate FROM tabl_doljnost INNER JOIN personal ON tabl_doljnost.Id=personal.ref_doljnost";
private String var_start_date = "";
private String var_end_date = "";
private String var_time_period = "";
private String var_doljnost = "";

private int kk = 0;
private String Aux_st_start = "";
private String Aux_st_end = "";
private String Aux_time_period = "";


private String Cr_Month(int zz) {
String mm = "";
if (zz==0) mm="Jan";
if (zz==1) mm="Feb";
if (zz==2) mm="Mar";
if (zz==3) mm="Apr";
if (zz==4) mm="May";
if (zz==5) mm="Jun";
if (zz==6) mm="Jul";
if (zz==7) mm="Aug";
if (zz==8) mm="Sep";
if (zz==9) mm="Oct";
if (zz==10) mm="Nov";
if (zz==11) mm="Dec";

return mm;
}

private void HandleTimePeriod() {

if (Aux_time_period.compareTo("previous qrt")==0) {
Calendar cal = Calendar.getInstance();
int yy = cal.get(cal.YEAR);
int zz = cal.get(cal.MONTH);
if (zz>2) {
zz = zz - 3;
}
else {
yy = yy-1; zz = zz - 3 + 12;
}
int qrt_First = (((zz / 3) * 3) + 1) - 1;
int qrt_Last = (((zz / 3) * 3) + 3) - 1;
String mm_First = Cr_Month(qrt_First);
String mm_Last = Cr_Month(qrt_Last);
cal.set(cal.MONTH, qrt_Last);
int tt = cal.getActualMaximum(cal.DAY_OF_MONTH);
Aux_st_start = mm_First + " 1, " + yy;
Aux_st_end = mm_Last + " "+ tt + ", " + yy;

}

if (Aux_time_period.compareTo("previous month")==0) {
Calendar cal = Calendar.getInstance();
int yy = cal.get(cal.YEAR);
int zz = cal.get(cal.MONTH);
if (zz==0) {
zz=11; yy=yy-1;
}
else zz=zz-1;
cal.set(cal.YEAR, yy);
cal.set(cal.MONTH, zz);
int tt = cal.getActualMaximum(cal.DAY_OF_MONTH);
String mm = Cr_Month(zz);
Aux_st_start = mm + " 1, " + yy;
Aux_st_end = mm + " "+ tt + ", " + yy;

}

if (Aux_time_period.compareTo("previous year")==0) {
Calendar cal = Calendar.getInstance();
int yy = cal.get(1)-1;
Aux_st_start = "Jan 1, " + yy;
Aux_st_end = "Dec 31, " + yy;
}

if (Aux_time_period.compareTo("current year")==0) {
Calendar cal = Calendar.getInstance();
int yy = cal.get(1);
Aux_st_start = "Jan 1, " + yy;
Aux_st_end = "Dec 31, " + yy;
}

if (Aux_time_period.compareTo("current qrt")==0) {
Calendar cal = Calendar.getInstance();
int yy = cal.get(cal.YEAR);
int zz = cal.get(cal.MONTH);
int qrt_First = (((zz / 3) * 3) + 1) - 1;
int qrt_Last = (((zz / 3) * 3) + 3) - 1;
String mm_First = Cr_Month(qrt_First);
String mm_Last = Cr_Month(qrt_Last);
cal.set(cal.MONTH, qrt_Last);
int tt = cal.getActualMaximum(cal.DAY_OF_MONTH);
Aux_st_start = mm_First + " 1, " + yy;
Aux_st_end = mm_Last + " "+ tt + ", " + yy;
}

if (Aux_time_period.compareTo("current month")==0) {
java.util.Calendar cal = java.util.Calendar.getInstance();
int yy = cal.get(cal.YEAR);
int zz = cal.get(cal.MONTH);
int tt = cal.getActualMaximum(cal.DAY_OF_MONTH);
String mm = Cr_Month(zz);
Aux_st_start = mm + " 1, " + yy;
Aux_st_end = mm + " "+ tt + ", " + yy;
}

}

public void setVar_start_date(String newValue) {
var_start_date = newValue;
}

public void setVar_end_date(String newValue) {
var_end_date = newValue;
}


public void setVar_time_period(String newValue) {
var_time_period = newValue;
}

public void setVar_doljnost(String newValue) {
var_doljnost = newValue;
}

public String getVar_start_date() {
return var_start_date ;
}

public String getVar_end_date() {
return var_end_date;
}


public String getVar_time_period() {
return var_time_period;
}

public String getVar_doljnost() {
return var_doljnost;
}

public String getQuery0() throws UnsupportedEncodingException, IOException {
String que0 = "";

String XXvar_start_date = getVar_start_date();
String XXvar_end_date = getVar_end_date();
String XXvar_Doljnost = getVar_doljnost();
String XXvar_time_period = getVar_time_period();

if (XXvar_start_date == null) {
XXvar_start_date = "";
}

if (XXvar_end_date == null) {
XXvar_end_date = "";
}

if (XXvar_Doljnost == null) {
XXvar_Doljnost = "";
}

if (XXvar_time_period == null) {
XXvar_time_period = "";
}

if (XXvar_Doljnost.compareTo("")==0) {
XXvar_Doljnost = "all";
}

if (!(XXvar_time_period.compareTo("none")==0)) {
XXvar_start_date = "";
XXvar_end_date = "";
}

if (!(XXvar_time_period.compareTo("none")==0)) {
Aux_time_period = XXvar_time_period;
HandleTimePeriod();
XXvar_start_date = Aux_st_start;
XXvar_end_date = Aux_st_end;
}

boolean Pr_Yes = (((!(XXvar_start_date.compareTo("")==0))) | (!(XXvar_end_date.compareTo("")==0)) | (!(XXvar_Doljnost.compareTo("all")==0)));
boolean Pr_Start = (!(XXvar_start_date.compareTo("")==0));
boolean Pr_End = (!(XXvar_end_date.compareTo("")==0));
boolean Pr_Doljnost = (!(XXvar_Doljnost.compareTo("all")==0));

String st = "SELECT doljnost, FIO, StartDate, EndDate FROM tabl_doljnost INNER JOIN personal ON tabl_doljnost.Id=personal.ref_doljnost";

if (Pr_Yes) st = st + " where";
if (Pr_Start) {
st = st + " (StartDate>=#"+XXvar_start_date+"#)";
}
if ((Pr_End | Pr_Doljnost) & Pr_Start) st = st + "and";
if (Pr_End) {
st = st + " (EndDate<=#"+XXvar_end_date+"#)";
}
if (Pr_Doljnost & Pr_End) st = st + "and";
if (Pr_Doljnost) {
st = st + " (Doljnost = '" + XXvar_Doljnost + "')";
}
que0 = st;

return que0;

}

}


Шаг 7. Удаляем лишнее из JSP-страницы. Формируем заголовок.

 

Файл Index.jsp

 

<%@ page contentType="text/html; charset=windows-1251" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>
<html>
<head>
<title>
Создание реального приложения
</title>
</head>
<jsp:useBean id="indexBeanId" scope="session" class="pr_11.IndexBean" />
<jsp:setProperty name="indexBeanId" property="*" />
<body bgcolor="#ffffff">
<form method="post" action="index.jsp">
<br><br>
<input type="submit" name="Submit" value="Submit">
<input type="reset" value="Reset">
</form>
</body>
</html>


Шаг 8. Добавляем в JSP-страницу поля для ввода начальной даты, конечной даты, выбора категории временного интервала. (Имена свойств бина и имена элементов ввода
<input> и <select> должны совпадать). Запускаем JSP для проверки прямо из JBuilder 2006.

 

Новые тэги HTML:
<select>...</select>
<option>...</option>

 

Файл Index.jsp

 

<%@ page contentType="text/html; charset=windows-1251" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>
<html>
<head>
<title>
Создание реального приложения
</title>
</head>
<jsp:useBean id="indexBeanId" scope="session" class="pr_11.IndexBean" />
<jsp:setProperty name="indexBeanId" property="*" />
<body bgcolor="#ffffff">
<form method="post" action="index.jsp">
Введите начальную дату: <input name='var_start_date'><br>
Введите конечную дату: <input name='var_end_date'><br>
Выберите категорию временного периода: <select name="var_time_period" size='1'>
<option>none</option>
<option>current month</option>
<option>previous month</option>
<option>current qrt</option>
<option>previous qrt</option>
<option>current year</option>
<option>previous year</option>
</select>
<br>
<br><br>
<input type="submit" name="Submit" value="Submit">
<input type="reset" value="Reset">
</form>
</body>
</html>

 

step_8_1.gif (28649 bytes)




Шаг 9. Добавляем в JSP-страницу тэг для вывода строки запроса. Запускаем, вводим данные для проверки и нажимаем кнопку Submit.

 

Файл Index.jsp

 

<%@ page contentType="text/html; charset=windows-1251" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>
<html>
<head>
<title>
Создание реального приложения
</title>
</head>
<jsp:useBean id="indexBeanId" scope="session" class="pr_11.IndexBean" />
<jsp:setProperty name="indexBeanId" property="*" />
<body bgcolor="#ffffff">
<form method="post" action="index.jsp">
Введите начальную дату: <input name='var_start_date'><br>
Введите конечную дату: <input name='var_end_date'><br>
Выберите категорию временного периода: <select name="var_time_period" size='1'>
<option>none</option>
<option>current month</option>
<option>previous month</option>
<option>current qrt</option>
<option>previous qrt</option>
<option>current year</option>
<option>previous year</option>
</select>
<br>
<br><br>
<input type="submit" name="Submit" value="Submit">
<input type="reset" value="Reset">
<br><br>
<jsp:getProperty name="indexBeanId" property="query0" />
</form>
</body>
</html>

 

 

step_9_1.gif (4363 bytes)




Шаг 10. Добавляем в JSP-страницу тэги для подключения к базе данных. Добавляем поле выбора должности. Значения для выбора будем брать из базы данных. Запускаем, вводим данные для проверки и нажимаем кнопку Submit.

 

Новые тэги JSTL:SQL

<sql:setDataSource .../>

<sql:query>...</sql:query>


Новые тэги JSTL:Core

<c:forEach...>
...
</c:forEach>

<c:out ...>

 

Файл Index.jsp

 

<%@ page contentType="text/html; charset=windows-1251" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>
<html>
<head>
<title>
Создание реального приложения
</title>
</head>
<sql:setDataSource url="jdbc:odbc:Access2" driver="sun.jdbc.odbc.JdbcOdbcDriver"/>
<sql:query var="query1">select * from tabl_doljnost</sql:query>
<jsp:useBean id="indexBeanId" scope="session" class="pr_11.IndexBean" />
<jsp:setProperty name="indexBeanId" property="*" />
<body bgcolor="#ffffff">
<form method="post" action="index.jsp">
Введите начальную дату: <input name='var_start_date'><br>
Введите конечную дату: <input name='var_end_date'><br>
Выберите категорию временного периода: <select name="var_time_period" size='1'>
<option>none</option>
<option>current month</option>
<option>previous month</option>
<option>current qrt</option>
<option>previous qrt</option>
<option>current year</option>
<option>previous year</option>
</select>
<br>
Выберите должность: <select name='var_doljnost' size='1'>
<option>all</option>
<c:forEach var="vv1" begin="0" items="${query1.rows}">
<option><c:out value="${vv1.doljnost}"/></option>
</c:forEach>
</select>
<br><br>
<input type="submit" name="Submit" value="Submit">
<input type="reset" value="Reset">
<br><br>
<jsp:getProperty name="indexBeanId" property="query0" />
</form>
</body>
</html>

 

step_10_1.gif (11045 bytes)




Шаг 11. Добавляем тэги для вывода на страницу содержимого запроса. Запускаем, вводим данные для проверки и нажимаем кнопку Submit.

 

Файл Index.jsp

 

<%@ page contentType="text/html; charset=windows-1251" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>
<html>
<head>
<title>
Создание реального приложения
</title>
</head>
<sql:setDataSource url="jdbc:odbc:Access2" driver="sun.jdbc.odbc.JdbcOdbcDriver"/>
<sql:query var="query1">select * from tabl_doljnost</sql:query>
<jsp:useBean id="indexBeanId" scope="session" class="pr_11.IndexBean" />
<jsp:setProperty name="indexBeanId" property="*" />
<sql:query var="query2"><jsp:getProperty name="indexBeanId" property="query0" /></sql:query>
<body bgcolor="#ffffff">
<form method="post" action="index.jsp">
Введите начальную дату: <input name='var_start_date'><br>
Введите конечную дату: <input name='var_end_date'><br>
Выберите категорию временного периода: <select name="var_time_period" size='1'>
<option>none</option>
<option>current month</option>
<option>previous month</option>
<option>current qrt</option>
<option>previous qrt</option>
<option>current year</option>
<option>previous year</option>
</select>
<br>
Выберите должность: <select name='var_doljnost' size='1'>
<option>all</option>
<c:forEach var="vv1" begin="0" items="${query1.rows}">
<option><c:out value="${vv1.doljnost}"/></option>
</c:forEach>
</select>
<br><br>
<input type="submit" name="Submit" value="Submit">
<input type="reset" value="Reset">
<br><br>
<jsp:getProperty name="indexBeanId" property="query0" />
<br><br>
<c:forEach var="vv2" begin="0" items="${query2.rows}">
<c:out value="${vv2.doljnost}"/><c:out value=" "/>
<c:out value="${vv2.FIO}"/><c:out value=" "/>
<c:out value="${vv2.StartDate}"/><c:out value=" "/>
<c:out value="${vv2.EndDate}"/><c:out value=" "/>
<br>
</c:forEach>
</form>
</body>
</html>

 

step_11_1.gif (12485 bytes)




Шаг 12. Делаем так, чтобы поля ввода и выбора помнили ранее введенные в них значения. Удаляем из JSP-страницу тэг для отображения строки запроса. Проверяем.

 

Новый аттрибут элемента option (HTML)

selected


Новые тэги JSTL:Core

<c:if ...>
...
</c:if>

 

Файл Index.jsp

 

<%@ page contentType="text/html; charset=windows-1251" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>
<html>
<head>
<title>
Создание реального приложения
</title>
</head>
<sql:setDataSource url="jdbc:odbc:Access2" driver="sun.jdbc.odbc.JdbcOdbcDriver"/>
<sql:query var="query1">select * from tabl_doljnost</sql:query>
<jsp:useBean id="indexBeanId" scope="session" class="pr_11.IndexBean" />
<jsp:setProperty name="indexBeanId" property="*" />
<sql:query var="query2"><jsp:getProperty name="indexBeanId" property="query0" /></sql:query>
<body bgcolor="#ffffff">
<form method="post" action="index.jsp">
Введите начальную дату: <input name='var_start_date' value="<%=indexBeanId.getVar_start_date()%>"><br>
Введите конечную дату: <input name='var_end_date' value="<%=indexBeanId.getVar_end_date()%>"><br>
<c:set var="var_core_2">
<jsp:getProperty name="indexBeanId" property="var_time_period" />
</c:set>
Выберите категорию временного периода: <select name="var_time_period" size='1'>
<c:if test="${(var_core_2 == 'none')}" >
<option selected>none</option>
</c:if>
<c:if test="${!(var_core_2 == 'none')}" >
<option>none</option>
</c:if>
<c:if test="${(var_core_2 == 'current month')}" >
<option selected>current month</option>
</c:if>
<c:if test="${!(var_core_2 == 'current month')}" >
<option>current month</option>
</c:if>
<c:if test="${(var_core_2 == 'previous month')}" >
<option selected>previous month</option>
</c:if>
<c:if test="${!(var_core_2 == 'previous month')}" >
<option>previous month</option>
</c:if>
<c:if test="${(var_core_2 == 'current qrt')}" >
<option selected>current qrt</option>
</c:if>
<c:if test="${!(var_core_2 == 'current qrt')}" >
<option>current qrt</option>
</c:if>
<c:if test="${(var_core_2 == 'previous qrt')}" >
<option selected>previous qrt</option>
</c:if>
<c:if test="${!(var_core_2 == 'previous qrt')}" >
<option>previous qrt</option>
</c:if>
<c:if test="${(var_core_2 == 'current year')}" >
<option selected>current year</option>
</c:if>
<c:if test="${!(var_core_2 == 'current year')}" >
<option>current year</option>
</c:if>
<c:if test="${(var_core_2 == 'previous year')}" >
<option selected>previous year</option>
</c:if>
<c:if test="${!(var_core_2 == 'previous year')}" >
<option>previous year</option>
</c:if>
</select>
<br>
<c:set var="var_core_1">
<jsp:getProperty name="indexBeanId" property="var_doljnost" />
</c:set>
Выберите должность: <select name='var_doljnost' size='1'>
<c:if test="${vv1.doljnost == 'all'}" >
<option selected>all</option>
</c:if>
<c:if test="${!(vv1.doljnost == 'all')}" >
<option>all</option>
</c:if>
<c:forEach var="vv1" begin="0" items="${query1.rows}">
<c:if test="${vv1.doljnost == var_core_1}" >
<option selected><c:out value="${vv1.doljnost}"/></option>
</c:if>
<c:if test="${!(vv1.doljnost == var_core_1)}" >
<option><c:out value="${vv1.doljnost}"/></option>
</c:if>
</c:forEach>
</select>
<br><br>
<input type="submit" name="Submit" value="Submit">
<input type="reset" value="Reset">
<br><br>
<c:forEach var="vv2" begin="0" items="${query2.rows}">
<c:out value="${vv2.doljnost}"/><c:out value=" "/>
<c:out value="${vv2.FIO}"/><c:out value=" "/>
<c:out value="${vv2.StartDate}"/><c:out value=" "/>
<c:out value="${vv2.EndDate}"/><c:out value=" "/>
<br>
</c:forEach>
</form>
</body>
</html>



Шаг 13. Офромляем данные в виде таблицы. Добавляем элементы оформления вверх и вниз страницы, устанавливаем зеленый цвет фона. Проверяем.

 

Файл Index.jsp

 

<%@ page contentType="text/html; charset=windows-1251" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>
<html>
<head>
<title>
Создание реального приложения
</title>
</head>
<sql:setDataSource url="jdbc:odbc:Access2" driver="sun.jdbc.odbc.JdbcOdbcDriver"/>
<sql:query var="query1">select * from tabl_doljnost</sql:query>
<jsp:useBean id="indexBeanId" scope="session" class="pr_11.IndexBean" />
<jsp:setProperty name="indexBeanId" property="*" />
<sql:query var="query2"><jsp:getProperty name="indexBeanId" property="query0" /></sql:query>
<body bgcolor="#00ff00">
<form method="post" action="index.jsp">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="97" align="center" width="100%">
<b>Сборник задач по программированию. Новая версия</b><br>
Александра Приходько
</td>
</tr>
</table>

Введите начальную дату: <input name='var_start_date' value="<%=indexBeanId.getVar_start_date()%>"><br>
Введите конечную дату: <input name='var_end_date' value="<%=indexBeanId.getVar_end_date()%>"><br>
<c:set var="var_core_2">
<jsp:getProperty name="indexBeanId" property="var_time_period" />
</c:set>
Выберите категорию временного периода: <select name="var_time_period" size='1'>
<c:if test="${(var_core_2 == 'none')}" >
<option selected>none</option>
</c:if>
<c:if test="${!(var_core_2 == 'none')}" >
<option>none</option>
</c:if>
<c:if test="${(var_core_2 == 'current month')}" >
<option selected>current month</option>
</c:if>
<c:if test="${!(var_core_2 == 'current month')}" >
<option>current month</option>
</c:if>
<c:if test="${(var_core_2 == 'previous month')}" >
<option selected>previous month</option>
</c:if>
<c:if test="${!(var_core_2 == 'previous month')}" >
<option>previous month</option>
</c:if>
<c:if test="${(var_core_2 == 'current qrt')}" >
<option selected>current qrt</option>
</c:if>
<c:if test="${!(var_core_2 == 'current qrt')}" >
<option>current qrt</option>
</c:if>
<c:if test="${(var_core_2 == 'previous qrt')}" >
<option selected>previous qrt</option>
</c:if>
<c:if test="${!(var_core_2 == 'previous qrt')}" >
<option>previous qrt</option>
</c:if>
<c:if test="${(var_core_2 == 'current year')}" >
<option selected>current year</option>
</c:if>
<c:if test="${!(var_core_2 == 'current year')}" >
<option>current year</option>
</c:if>
<c:if test="${(var_core_2 == 'previous year')}" >
<option selected>previous year</option>
</c:if>
<c:if test="${!(var_core_2 == 'previous year')}" >
<option>previous year</option>
</c:if>
</select>
<br>
<c:set var="var_core_1">
<jsp:getProperty name="indexBeanId" property="var_doljnost" />
</c:set>
Выберите должность: <select name='var_doljnost' size='1'>
<c:if test="${vv1.doljnost == 'all'}" >
<option selected>all</option>
</c:if>
<c:if test="${!(vv1.doljnost == 'all')}" >
<option>all</option>
</c:if>
<c:forEach var="vv1" begin="0" items="${query1.rows}">
<c:if test="${vv1.doljnost == var_core_1}" >
<option selected><c:out value="${vv1.doljnost}"/></option>
</c:if>
<c:if test="${!(vv1.doljnost == var_core_1)}" >
<option><c:out value="${vv1.doljnost}"/></option>
</c:if>
</c:forEach>
</select>
<br><br>
<input type="submit" name="Submit" value="Submit">
<input type="reset" value="Reset">
<table border="1">
<tr>
<td>Должность</td>
<td>Ф.И.О.</td>
<td>Дата приема на работу</td>
<td>Дата увольнения</td>
</tr>
<c:forEach var="vv2" begin="0" items="${query2.rows}">
<tr>
<td><c:out value="${vv2.doljnost}"/></td>
<td><c:out value="${vv2.FIO}"/></td>
<td><c:out value="${vv2.StartDate}"/></td>
<td><c:out value="${vv2.EndDate}"/></td>
</tr>
<br>
</c:forEach>
</table>
<table>
<tr align="center">
<td height="33"><p align="center"><em><font
color="#000000"><small>©&nbsp;&nbsp; Приходько Александр
Николаевич &nbsp;&nbsp; 1996 - 2006</small><big> </font></em></td>
</tr>
</table>
</form>
</body>
</html>

 

step_13_1.gif (14726 bytes)

 


Шаг 14. Из подкаталога проекта извлекаем WAR-файл Web-модуля и инсталируем его на сервер Tomcat 4.1 для реальной проверки.

 

Откуда брать   /    Куда ложить

 

step_14_1.gif (14862 bytes) step_14_2.gif (18676 bytes)


 

©   Александр Приходько    1996 - 2006

69 0