Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное
образовательное учреждение
высшего профессионального образования
«Владимирский государственный университет
имени Александра Григорьевича и Николая Григорьевича Столетовых»
(ВлГУ)
Кафедра «Вычислительная техника»
Лабораторная работа № 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.


