Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 417

Ильдар Шаукатович Хабибуллин

rs = st.executeQuery("SELECT course name FROM courses");

pw.println("<form method=post action=" +

"\"">");

pw.println("<select size=5 name=courses>"); while (rs.next())

pw.println("<option>" + rs.getString(1));

pw.println("</option></form></body></html>"); pw.flush(); pw.close();

rs.close(); }catch(Exception e){

System.err.println(e);

}

}

@Override

public void destroy(){ pst.close(); con.close();

}

}

В листинге 26.5 все запросы пользуются одним и тем же соединением с базой данных. При большом количестве одновременных запросов это может снизить производительность системы и даже превысить допустимое число соединений. В таком случае при инициализации сервлета надо в методе init () создать пул соединений с тем, чтобы за-

просы брали соединения из этого пула и возвращали соединение в пул при своем завершении. Еще лучше создать этот пул средствами сервера приложений, а в методе init () только обращаться к этому пулу.

Следует заметить, что у системы управления базой данных Oracle, с которой соединяется сервлет RegPrepServlet, есть свой сервер приложений Oracle Application Server (OAS) с контейнером сервлетов Apache/JServ или Tomcat. Можно установить сервлет прямо в Oracle AS и использовать для соединения с базой серверный драйвер JDBC с именем kprb. Это резко повысит производительность сервлета.

Разумеется, сервлет может отправлять клиенту не только страницы HTML, но и изображения, тексты в разных форматах, например PDF, звуковые файлы, короче говоря, данные любых MIME-типов. В листинге 26.6 приведен пример сервлета, позволяющего клиенту просматривать изображения типа GIF и JPEG в каталоге, заданном начальным параметром сервлета.

Листинг 26.6. Сервлет, отправляющий изображения клиенту

package myservlets;

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

import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.annotation.*;

@WebServlet()

public class ImageServlet extends HttpServlet{

Vector imFiles = new Vector(); int curIndex;

@Override

public void init() throws ServletException{

File imDir = null;

String imDirName = getInitParameter("imagedir");

if (imDirName != null) imDir = new File(imDirName);

if ((imDir != null) && imDir.exists() && imDir.isDirectory()){ String[] files = imDir.list();

for (int i = 0; i < files.length; i++) if (files[i].endsWith(".jpg") || files[i].endsWith(".gif")){

File curFile = new File(imDir, files[i]); imFiles.addElement(curFile);

}

}else log("Cannot find image dir: " + imDirName);

@Override

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ int len = imFiles.size();

if (len > 0){

File curFile = (File)imFiles.elementAt(curIndex);

String fileName = curFile.getName();

ServletContext ctxt = getServletConfig().getServletContext();

String ctype = ctxt.getMimeType(fileName);

if (ctype == null) ctype = fileName.endsWith(".jpg") ?