Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное

образовательное учреждение

высшего профессионального образования

«Владимирский государственный университет

имени Александра Григорьевича и Николая Григорьевича Столетовых»

(ВлГУ)

Кафедра «Вычислительная техника»


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

по дисциплине

«Компонентное программирование»

«Сервлеты и JavaServer Pages (JSP)»

Выполнил:

ст. гр. ВТ-109

Принял:

доц.

Владимир 2012

Цель работы:

1. Придумать задачу для реализации ее в виде небольшого сервлета и реализовать его.

2. Разработать универсальный броузер БД для удаленного выполнения SQL-команд. Минимальный состав SQL-команд: INSERT, SELECT, DELETE, UPDATE.

Задание для реализации в виде сервлета: написать сервлет «решение линейного уравнения».

Листинг сервлета

Servlet1.java

package servlet;

import java. io. IOException;

import java. io. PrintWriter;

import javax. servlet.*;

import javax. servlet. http.*;

public class Servlet1 extends HttpServlet {

private static final String CONTENT_TYPE = "text/html; charset=windows-1251";

public void init(ServletConfig config) throws ServletException {

super. init(config);

}

public void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

response. setContentType(CONTENT_TYPE);

doPost(request, response);

}

public void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

НЕ нашли? Не то? Что вы ищете?

PrintWriter out = response. getWriter();

String a=request. getParameter("a");;

String b=request. getParameter("b");;

String r="";

double aDouble = 0;

double bDouble = 0;

if ((a==null||a. length()==0) || (b==null|| b. length()==0))

r="Waiting for the correct data";

else {

try{

aDouble=Double. parseDouble(a);

bDouble=Double. parseDouble(b);

if (aDouble==0 && bDouble==0) r="0";

else {

if(aDouble==0) r="Zero divide";

else {

double x = - bDouble/aDouble;

r = Double. toString(x);

}

}

} catch (NumberFormatException e) {

r=e. toString();

}

}

out. println("<html>");

out. println("<head><title>The solution of the linear equation</title></head>");

out. println("<body>");

out. println("<h2>The solution of the linear equation<I> ax+b=0</I></h2><HR>");

out. println("<P><h3>Enter the coefficients a, b and c:</h3>");

out. println("<form method=\"post\" action=\"servlet1\">");

out. println("<h3><b>a=</b><input type=\"text\" name=\"a\" value=\"0\"></h3>");

out. println("<h3><b>b=</b><input type=\"text\" name=\"b\" value=\"0\"></h3>");

out. println("<input type=\"Submit\" value=\"Result\">\t");

out. println("<h3><P> Result is: " + r + "</P><h3>");

out. println("<input type=\"Reset\" value=\"Reset\"><BR>");

out. println("</body></html>");

out. close();

}

}

Листинг программы 'Универсальный броузер БД'

Browser. jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www. w3.org/TR/html4/loose. dtd">

<%@ page contentType="text/html;charset=windows-1251"%>

<jsp:useBean id="JDBC" class="browser. JDBC" scope="session"/>

<% String command = request. getParameter("cmd");

String res = null;

if (command == null || command. trim().length() == 0)

res = "Quest not found";

else res=JDBC. startTransact(command);

%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>

<title>Browser</title>

</head>

<body>

<h3>Browser Data Base:</h3>

<form method="post" action="Browser. jsp">

Enter a database query (SELECT, INSERT, UPDATE, DELETE): <hr>

<textarea name="cmd" cols="50" rows="5"></textarea>

<input type="submit" value="Send"><BR>

<input type="submit" value="Reset"><BR>

<p><h3>Query result:</h3><BR> <%= res %> </p>

</form>

</body>

</html>

JDBC. java

package browser;

import java. sql.*;

import java. util. Locale;

import oracle. jdbc. pool. OracleDataSource;

public class JDBC {

final static String connString = "jdbc:oracle:thin:client/123@localhost:1521:XE";

public static Connection dbConnect() {

Connection conn = null;

Locale. setDefault( Locale. ENGLISH );

try {

OracleDataSource ods = new OracleDataSource();

ods. setURL(connString);

conn = ods. getConnection();

System. out. println("Connection string: \'" + connString + "\'");

} catch (Exception e) {

System. out. println("Any problem with driver: " + e);

System. exit(1);

}

return conn;

}

static String parsing(ResultSet rs) {

String result = "<TABLE FRAME=BORDER CELLPADDING=5> <CAPTION> Sampling result </CAPTION> <TR>";

String header = " ";

int columns = 0;

try {

ResultSetMetaData rsmd = rs. getMetaData();

columns = rsmd. getColumnCount();

for (int i=1; i<columns+1; i++) {

header = rsmd. getColumnName(i);

result += " <TH> " + header + " </TH> ";

}

result+= " </TR>";

while (rs. next()){

result+=" <TR> ";

for (int i=1; i<columns+1; i++) {

header = rs. getString(i);

result += " <TD> " + header + " </TD> ";

}

result += " </TR> ";

}

} catch (SQLException e){

System. out. println(e. toString() + columns + header);

}

result += "</TABLE>";

return result;

}

public static String startTransact(String cmd) throws SQLException {

String err = null;

String result = null;

try {

Connection conn = dbConnect();

Statement stat = conn. createStatement();

String idCmd = (cmd. substring(0,6)).toUpperCase();

ResultSet rs = null;

if (idCmd. equals("SELECT")) {

rs = stat. executeQuery(cmd);

result = parsing(rs);

} else {

int rowCount = stat. executeUpdate(cmd);

result = Integer. toString(rowCount) + " rows modified!";

}

stat. close();

conn. close();

} catch (SQLException e) {

err = "Cannot get info from tables";

System. out. println(err + e. toString());

}

return result;

}

}

Краткое описание программы 'Универсальный броузер БД'

Приложение визуализирует результаты удаленного исполнения следующего подмножества команд SQL: SELECT, INSERT, UPDATE, DELETE.

Код интерфейса реализован на языке JSP и находится в файле Browser. jsp.

Код JDBC. java отвечает за соединение с БД СУБД Oracle11gXE и формирование результатов запроса, подключается к jsp-странице как программный компонент.

Нажатие «Submit» вызывает метод startTransact объекта JDBC, что означает подключение к БД, обработку запроса и возврат его результатов.

Результаты запросов вида SELECT формируются в методе parsing объекта JDBC. Данный метод генерирует HTML код полученной таблицы. Для других команд в браузере отображается число модифицированных строк таблицы.

Примеры работы программ

Сервлет:

Браузер БД:

1) Вывести все книги с указанием издательства.

2) Удалить книги с ценой 50

3) Добавить книгу

4) Увеличить цену книг на 100

Результат:

Выводы: в ходе выполнения лабораторной работы было проведено знакомство с сервлетами языком JSP. Создан простой сервлет, а так же с применением JSP браузер удаленных SQL запросов к БД СУБД Oracle11XE.