Читать «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") ?