PDA

Показать полную графическую версию : Java Server Pages, JDBC: Все вопросы


Страниц : [1] 2

vadimiron
04-02-2006, 22:16
Здесь обсуждается Java Server Pages, и все с ней связанные (например JDBC)технологии

Vlad Drakula
23-02-2006, 11:57
vadimiron
ну... может всетаки начнешь свой рассказ?

для начала расскажи как установить и настроить сервер...

mar
23-02-2006, 12:02
Vlad Drakula
ты под сервером подразумеваешь tomcat?

vadimiron
23-02-2006, 12:21
Vlad Drakula, mar
Я обязательно сделаю типа фака, что для данной технологии нужно и тд, но сначало я её сам поизучаю лучше :)
Просто сейчас учу Java, когда основы закончу возьмусь за Server Pages и тогда всё выложу, так что терпение :)

Vlad Drakula
03-03-2006, 13:38
vadimiron
ну??? може уже что расскажешь???

mar
03-03-2006, 14:18
Vlad Drakula
Что,- не терпится? =)
vadimiron
а ты по ходу учебы можешь выдавать нам сюда полученные знания. Учебе очень поможет ;]
(Знаешь: "Объяснял, объяснял, даже сам понял" :))

vadimiron
05-03-2006, 19:01
Пара слов о данной технологии:

JSP, или Java Server Pages, своим способом генерирования HTML документов очень похожа на PHP, то есть код JSP смешивается с обычным кодом HTML, и вставляется между тегами <%.....%>. Между этими тегами вставляется совершенно нормальный Java код (исключая только несколько спец команд самой JSP)

Для обработки JSP документов нужен соответствующий сервер. Их большое множество, причём очень много коммерческих, но самым известных является Tomcat. Tomcat изначально разрабатывался самой Sun, но потом был передан Apache Group и стал open source, так что данный сервер можно считать самым "правильным".
Вообще, существует два способа, как можно написать web-приложение: Applets и Servlets.
Апплеты загружаются клиенту и исполняются его браузером, Сервлеты же работают на стороне сервера и генерируют HTML страницу. JSP же был создан для более простого и эффективного создания Сервлетов. Простота как раз заключается в том, что Java и HTML код можно перемешивать.
Задача сервера же, из JSP скрипта создать сервлет, котрый в свою очередь будет генерировать HTML.

Настройка Tomcat:
Версия Tomcat-a зависит от версии JSP, которая будет использоваться в разработке. Здесь лучше скачивать самое последнее, то есть JRE 5 (а лучше сразу JDK 5) и тогда Tomcat 5.5.* .
Tomcat может изначально работать, как самостоятельный веб сервер, но лучше его использовать в связке с Апачем, так как Апач в качестве веб сервера предлагает гараздо больше настроек и возможностей. Tomcat же в подобной связке будет отвечать за обработку JSP скриптов.
Установка его очень проста, так что не требует дополнительных комментариев. После установки сервер доступен по адресу localhost:8080.
Чтобы связать Apache с Tomcat, нужно скачать и положит в соответствующую папку модуль mod_jk, потом активировать данный модуль в конфиге, указать путь к Workers файлу Tomcat-а (это файл настроек для перенаправления вызовов с апача на Tomcat и тд, при стандартной установке Tomcat-а этот файл уже создан, осталось только путь к нему указать), далее нужно указать путь к логу Tomcat-а и присоединить все те папки с JSP скриптами, запросы к которым должны быть переправлены на Tomcat.
Вот мой конфиг:

LoadModule jk_module D:/Apache2/modules/mod_jk.so

JkWorkersFile "D:/Tomcat/conf/catalina.properties"

JkLogFile "D:/Tomcat/logs/mod_jk.log"

JkLogLevel info

JkMount /manager ajp13
JkMount /manager/* ajp13
JkMount /servlets-examples ajp13
JkMount /servlets-examples/* ajp13
JkMount /jsp-examples ajp13
JkMount /jsp-examples/* ajp13
JkMount /tomcat-docs ajp13
JkMount /tomcat-docs/* ajp13
JkMount /webdav ajp13
JkMount /webdav/* ajp13

Здесь наверно надо ещё пояснить что такое ajp13: это чтото типа протокола для перенаправления вызовов с апача на Tomcat - их сущестует несколько видов, но везде указывается, что этот нужно использовать, так как жругие не поддерживаются или устарели.

Пару линков:
Tomcat (http://tomcat.apache.org/)
SUN страница по JSP (http://java.sun.com/products/jsp/)

В качестве редактора можно посоветовать мощный и бесплатный netbeans 5.*, но в сети можно больше разных найти, так что это дело индивидульное

Vlad Drakula
05-03-2006, 22:29
vadimiron
а чем JSP лучьше(хуже) чем PHP? (за исключеним того что это разные языки)

mar
06-03-2006, 00:03
Vlad Drakula
очень кратко:
- скоростью работы сервлетов по сравнению с php (выигрыш очень большой)
- стоимостью разработок (к сожалению в проигрыше у нас чаще всего оказываются web-разработчики, которым не дают развернуться :[ )
подробнее - ждем vadimiron =)

vadimiron
спасибо, очень интересно :) Заодно поставила из портов tomcat (http://jakarta.apache.org/tomcat/) и mod_jk :)

Vlad Drakula
06-03-2006, 00:30
mar
за частую важна не скорость работы с голова програмиста...
я видел одного програмера, которые одну таблицу формировал с помошью SQL в течении 30 секунд...(таблица в принцепе очень простая... а сервер очень быстрый... но все равно дико долго...)

еще есть такая вещь как на кладные расходы процессорного времени, когда время выполнения опускается к десяткам милисекунд то важны именно задержки вне самого языка... а еще есть параметр - организация памяти и работа с ней.

Vlad Drakula
06-03-2006, 00:32
vadimiron
а что если все это пописать то можно будет запускать *.jsp также как и *.php ?

vadimiron
06-03-2006, 01:22
а что если все это пописать то можно будет запускать *.jsp также как и *.php ?
Не, мне пока это не удалось, надо будет ещё повозится с этим, возможно ли это. Все эти Jkmount-ы указывают на папки, которые лежат в контексте Tomcat-a, а апач при обращение к этим папкам знает, что надо не самому эти папки искать, а сразу переводить весь запрос Tomcat-у

PHP vs JSP
Я читал пару статей и заметок: все сходятся на том, что скорость выполнения у PHP больше, но к этому можно две вещи сказать:
1) Сегодняшние сервера(то есть железо) достаточны сильны, и разница в скорости возможно уже почт не заметна
2)Самое долгое в обработке JSP-его компиляция, но она происходит всего один раз, при первом обращении к срипту. Далее берётся уже готовая версия, то есть "обычное" выполнение
Ещё один вопрос, это скорость создания приложения: здесь также выигрывает PHP, но JSP наследует преимущества Java, то есть вся система классов, что выглядит красивее, чем в PHP, вовсем другой уровень использования Exceptions и тд.
К тому же моё личное наблюдение: в JSP можно использовать любые классы Java, например даже для работы с видео или звуком, для PHP чтото подобного не существует. Есть только библиотеки для работы с изображениями.

Ну и конечно, PHP ещё выигрывает простотой изучения, так как для JSP надо также разбираться в JAVA

mar
06-03-2006, 13:05
vadimiron
по скорости ссылки не кинешь? (потому, что у меня представления прямо скажем ровно противоположные :). могу обосновать, но лучше сначала почитать, то, что ты дашь :)). Или мы немного о разном - я о сервлетах и Java внутри - на стороне сервера, а ты именно о JSP - как встроенном в страницы?

Vlad Drakula
06-03-2006, 13:42
vadimiron
так если php на сервере нормально настроен то и он переводится в байт код всего один раз, а потом берется из кеша.

vadimiron
22-03-2006, 02:12
Если кто будет начинать учить, то вот простенькая гостевая книга на JSP
Работает с базой MySQL (две таблицы: user(ID,NAME); message(ID,TEXT,TIME,ID_USER))


<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.sql.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%
Class.forName("com.mysql.jdbc.Driver");

Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/guestbook","login","password");
%>


<h1>My first FORM</h1>
<form method="POST">
<input name='name' type='text' maxlength='30'><br>
<textarea name="text" rows="4" cols="20"></textarea>
<input type='submit' value='OK'>
</form>
<br><br><br>

<%
String name=request.getParameter("name");
String text=request.getParameter("text");
Statement stmt=conn.createStatement();
if(name!=null && text!=null)
{
int id_user=0;
ResultSet rs=stmt.executeQuery("SELECT ID FROM user WHERE NAME='"+name+"'");
rs.next();
id_user=rs.getInt("ID");

if(id_user!=0)
{
stmt.executeUpdate("INSERT INTO message SET TEXT='"+text+"',ID_USER='"+id_user+"',TIME=NOW()");
}

rs.close();
}

out.print("<br><br>");

ResultSet mess=stmt.executeQuery("SELECT * FROM message M,user U WHERE U.ID=M.ID_USER");

while(mess.next())
{
out.print("Name: "+mess.getString("NAME")+"<br>");
out.print("Time: "+mess.getString("TIME")+"<br>");
out.print("Message: "+mess.getString("TEXT")+"<br>");
out.print("<hr>");
}
mess.close();
%>
</body>
</html>
<%
stmt.close();
conn.close();
%>

Vlad Drakula
22-03-2006, 10:45
vadimiron
мда... практически копия PHP...

-bes-
12-04-2006, 12:47
2vadimiron
Вы давали пример гостевой книги. У меня этот скрипт выдал ошибки :(
Я думаю, что у меня неправильно настроен томкат. Подскажите, что делать... в яве я новичок.

вот собственно сама ошибка...

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: com.mysql.jdbc.Driver
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:498)
at org.apache.jsp._2_jsp._jspService(_2_jsp.java:110)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:92)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:162)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:240)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:187)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.j ava:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.j ava:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.j ava:596)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.j ava:594)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.j ava:594)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.j ava:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.jav a:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)


root cause

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1407)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1252)
at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:149)
at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:83)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at org.apache.jsp._2_jsp._jspService(_2_jsp.java:54)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:92)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:162)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:240)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:187)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.j ava:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.j ava:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.j ava:596)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.j ava:594)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.j ava:594)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.j ava:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.jav a:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)



--------------------------------------------------------------------------------

Apache Tomcat/4.1.31

Vlad Drakula
12-04-2006, 14:34
-bes-
похоже свалилось в базе, проверьте правильность логина / пароля + наличие и корректность таблиц.

-bes-
12-04-2006, 14:57
Vlad Drakula
c базой, логином, паролем, таблицами и полями всё ок... путём коментирования всего лишнего выяснил, что ошибка возникает на этой строке...


Class.forName("com.mysql.jdbc.Driver");


что делать, кто-нибудь с подобным сталкивался? вполне возможно, что я неправильно настроил томкат с мускулом... первый раз у меня это и причем в линухах. версия мускула 3.23, томкат 4.1. возможно у меня не хватает самого драйвера или какой-то библиотеки.

-bes-
12-04-2006, 20:09
Насколько я понял, то программа не может найти драйвер. Я кинул этот ( mysql-connector-java-3.1.12-bin.jar ) файл в $CATALINA_HOME/common/lib/
что ещё надо сделать?




© OSzone.net 2001-2012