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