powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / почему не выполняется запрос в сервлете?
9 сообщений из 9, страница 1 из 1
почему не выполняется запрос в сервлете?
    #34374792
324f4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привожу исходный код моего сервлета:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
 import  javax.servlet.*;
 import  javax.servlet.http.*;
 import  java.io.*;
 import  java.util.*;
 import  java.sql.*;

 public   class  testdbselect  extends  HttpServlet
{
Connection cn, cn1;
Statement st, st1;	
String url="jdbc:odbc:otdels";
String str,std;
ResultSet rs0,rs,rs1;
String s[];
String[] s1;


 public   void  init()
{
 //try
  //  {
   //  DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
   //  cn=DriverManager.getConnection(url);
   //  st=cn.createStatement();	
   //  st1=cn.createStatement();
   //  }
 // catch (SQLException e)
  // {
  //System.out.println(e.toString());	
  // }
}

 public   void  doPost(HttpServletRequest request, HttpServletResponse response)
{
	 try 
{

	DriverManager.registerDriver( new  sun.jdbc.odbc.JdbcOdbcDriver());
	 cn=DriverManager.getConnection(url);
	  	
	st=cn.createStatement();
	s=request.getParameterValues("text");
	s1=request.getParameterValues("sel");
	
	 for  ( int  j =  0 ; j < s1.length; j++) 
	 { 
	  String sql1 = "select key from Otdel where naimenovanie='"+s1[j]+"'";
	rs0=st.executeQuery(sql1);
	rs0.next();
	 int  abc=rs0.getInt( 1 );
	String sql2 = "UPDATE rabotnik SET keys ='"+abc+"' where name='"+s[j]+"'";
	st.execute(sql2);
	//rs0.close();
	st.close();
	cn.close();
	}
	 try 
	{doGet(request, response);}
	 catch  (Exception e) 
	{}	
}
 catch  (SQLException e)
{System.out.println(e.toString());	
//}
}	
}

	
 public   void  doGet (HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException
{

/////////////////основной тру////////////////
 try 
 {
	String encoding = "windows-1251"; // KOI-8R, UTF-8
	response.setContentType("text/html;charset=" + encoding);
	response.setCharacterEncoding(encoding);
	request.setCharacterEncoding(encoding);
	PrintWriter out;
	out=response.getWriter();
	//////////////////////////// Забиваем массив из отдела
	DriverManager.registerDriver( new  sun.jdbc.odbc.JdbcOdbcDriver());
    cn1=DriverManager.getConnection(url);
    st1=cn1.createStatement();	
    
String sqlotdel= "SELECT naimenovanie FROM Otdel"; 
rs=st1.executeQuery(sqlotdel);

 int  i= 0 ;
Vector list =  new  Vector();
	 while  (rs.next())
	{
     list.addElement(rs.getString( 1 ));
    i=i+ 1 ;
	}
 rs.close(); /////!!!!!!!!//
     
//////////////////////////////////Забиваем массив из отдела

///////////////////забиваем основной запрос     
	String sqlQuiry="SELECT rabotnik.Name, Otdel.naimenovanie "+
	"FROM Otdel INNER JOIN rabotnik ON Otdel.key = rabotnik.keys";
	rs1=st1.executeQuery(sqlQuiry); 
	 int  maxCols = rs1.getMetaData().getColumnCount();
	out.println("<html><body>");
	out.println("<form action='/jhtp1(saz)/westdbselect' method='post'>");
	out.println("<table border=1>");
	out.println("<tr>");
	 for  ( int  h= 1 ; h<=maxCols; h++)
	   {
	out.println("<td>" +rs1.getMetaData().getColumnLabel(h)
				+"</td>");
	   }
out.println("</tr>");

	 while  (rs1.next())
	{
out.println("<tr>");
str=rs1.getString( 1 );
std=rs1.getString( 2 );
out.println("<td><input type='text' name='text' value="+str+" readonly></td>" );
	///////////// \"text\"
out.println("<td>");
out.println("<select name='sel'>");
for (int k=0; k<list.size(); k++) 
{
    if (!list.elementAt(k).equals(std))    
    {
    out.println("<option value="+list.elementAt(k)+" > "+list.elementAt(k)+"</option>");
    }
   else if (list.elementAt(k).equals(std))
    {
	out.println("<option value="+list.elementAt(k)+" selected > "+list.elementAt(k)+"</option>");
	}
	}///for
	out.println("</select></td>");
	/////////////
out.println("</tr>");	
}
//конец while
out.println("<input type='submit' name='Submit' value='подтвердить'>");	
out.println("</form>");
out.println("</body></html>");	
st1.close();
cn1.close();	
out.close();

}	
 catch  (Exception e) 
{}

}
//public void destroy()
//{
//try
//{
	//st.close(); 
	//st1.close();
	//cn.close();	
//}
//catch (SQLException e)
//{
//System.out.println(e.toString());	
//}
}


Опишу, что делает сервлет. При нажатии на кнопку в докуметне HTML вызывается сервлет, причем выполняется его метод doGet. Вот фрагмент формы:

Код: plaintext
1.
2.
3.
4.
5.
6.
<form action = "/jhtp1(saz)/westdbselect" method="get">
<p>
<label> Для извлечения данных нажмите кнопку:
 <input type ="submit" value ="получить документ HTML"/>
</label>
</p>
</form>
Метод doGet выводит данные из БД в браузер. Рисунок приведен ниже.

При нажатии кнопки "Подтвердить" данные должны отправляться методу doPost(). В этом методе измененные данные садятся в БД. Данные в doPost() отлавливаются с помощью
Код: plaintext
1.
s=request.getParameterValues("text");
s1=request.getParameterValues("sel");
Затем снова вызывается метод doGet() и вновь выводятся в браузер, но уже измененные.
Но при выполнении появляется SQLException(). Такое впечатление, что
Код: plaintext
1.
s=request.getParameterValues("text");
s1=request.getParameterValues("sel");
не "ловят" данные.

Делал посадку данных в другом сервлете(то есть при нажатии кнопки "Подтвердить" форма отправлялась на другой сервлет. Его исходник такой же, как и метод doPost()), тогда все отлично "садится".
Не подскажете, в чем проблема???
Заранее благодарен
...
Рейтинг: 0 / 0
почему не выполняется запрос в сервлете?
    #34374798
324f4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот рисунок
...
Рейтинг: 0 / 0
почему не выполняется запрос в сервлете?
    #34374842
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
String s=request.getParameter("text"); //здесь Вам не нужен массив
         s1=request.getParameterValues("sel");

         ...

         String sql2 = "UPDATE rabotnik SET keys ='"+abc+"' where name='"+s[j]+"'"; //здесь ошибка. в s-всего один элемент 
         String sql2 = "UPDATE rabotnik SET keys ='"+abc+"' where name='"+s+"'";
...
Рейтинг: 0 / 0
почему не выполняется запрос в сервлете?
    #34374855
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и давайте элементам формы разные имена.
Код: plaintext
1.
2.
<input type='text' name='text1' value="+str+" readonly>
text1, text2 и т. д.

еще замечание (пока что это не существенно, но вообще то такие пути лучше не использовать):
/jhtp1(saz)/westdbselect
- я про круглые скобки
...
Рейтинг: 0 / 0
почему не выполняется запрос в сервлете?
    #34376224
324f4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalovи давайте элементам формы разные имена.
Код: plaintext
1.
2.
<input type='text' name='text1' value="+str+" readonly>
text1, text2 и т. д.

еще замечание (пока что это не существенно, но вообще то такие пути лучше не использовать):
/jhtp1(saz)/westdbselect
- я про круглые скобки
Не будем) просто необходимость была))
...
Рейтинг: 0 / 0
почему не выполняется запрос в сервлете?
    #34376227
324f4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
String s=request.getParameter("text"); //здесь Вам не нужен массив
         s1=request.getParameterValues("sel");

         ...

         String sql2 = "UPDATE rabotnik SET keys ='"+abc+"' where name='"+s[j]+"'"; //здесь ошибка. в s-всего один элемент 
         String sql2 = "UPDATE rabotnik SET keys ='"+abc+"' where name='"+s+"'";


Код: plaintext
String s=request.getParameter("text"); //здесь Вам не нужен массив
Это не
Код: plaintext
String s=request.getParameter("text");
а
Код: plaintext
String [] s=request.getParameterValues("text");
. Он необходим, чтобы снова посадить данные в базу. То есть смысл сарвлета в том, чтобы перемещать сотрудников между отделами (изменяя внешний ключ). Думаю, что снимок структуры БД все пояснит.
Думаю проблема в другом - почему-то данные не ловятся в массивы:
Код: plaintext
1.
 s=request.getParameterValues("text");
s1=request.getParameterValues("sel");

Когда же использую другой сервлет:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
 import  javax.servlet.*;
 import  javax.servlet.http.*;
 import  java.io.*;
 import  java.util.*;
 import  java.sql.*;

 public   class  zasadit  extends  HttpServlet
{
Connection cn;
Statement st;
String url="jdbc:odbc:otdels";

 public   void  init()
{
	//try
	//{
	// DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());	  
	//cn=DriverManager.getConnection(url);
	//st=cn.createStatement();	
	//} 
	//catch (SQLException e)
	//{
	//System.out.println(e.toString());	
	//}	
}
	
 public   void  doPost (HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException
{
ResultSet rs;
String s[];
String[] s1;
////основное тру
 try 
{
	DriverManager.registerDriver( new  sun.jdbc.odbc.JdbcOdbcDriver());	  
    cn=DriverManager.getConnection(url);
	st=cn.createStatement();	
		
String encoding = "windows-1251"; // KOI-8R, UTF-8
response.setContentType("text/html;charset=" + encoding);
response.setCharacterEncoding(encoding);
request.setCharacterEncoding(encoding);
  
s=request.getParameterValues("text");
s1=request.getParameterValues("sel");
     for  ( int  i =  0 ; i < s1.length; i++) 
      { 
  String sql1 = "select key from Otdel where naimenovanie='"+s1[i]+"'";
rs=st.executeQuery(sql1);
rs.next();
 int  abc=rs.getInt( 1 );
String sql2 = "UPDATE rabotnik SET keys ='"+abc+"' where name='"+s[i]+"'";
st.execute(sql2);
//rs.close();
//st.close(); 
//cn.close();
}
response.sendRedirect("/jhtp1(saz)/westdbselect");
//}////основное тру
st.close(); 
cn.close();
}
 catch  (Exception e) 
{}
}

 public   void  destroy()
{
//try
 // {
//  st.close(); 
//  cn.close();	
 // }
//catch (SQLException e)
 // {
 // System.out.println(e.toString());	
//  }	
}

}

В форме сервлета
Код: plaintext
testdbselect 
прописано соотвественно
Код: plaintext
out.println("<form action='/jhtp1(saz)/westdbselect' method='post'>");
То все отлично работает!!!
Ничего не понимаю...
...
Рейтинг: 0 / 0
почему не выполняется запрос в сервлете?
    #34376229
324f4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот схема БД:
...
Рейтинг: 0 / 0
почему не выполняется запрос в сервлете?
    #34376230
324f4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибочка)) Вместо
Код: plaintext
out.println("<form action='/jhtp1(saz)/westdbselect' method='post'>");
в testdbselect
нужно
Код: plaintext
out.println("<form action='/jhtp1(saz)/zasadit' method='post'>");
...
Рейтинг: 0 / 0
почему не выполняется запрос в сервлете?
    #34376426
324f4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно, сделал с двумя сервлетами).
Коннект сделал в методе init(); Закрытие коннекта -в destroy();
Но теперь такая проблема: При первом обращении ко второму сервлету (тот, который садит измененные данные в БД и затем редиректится снова к сервлету testdbselect) данные садятся только со второго раза.
Не могли бы подсказать, как этого избежать?
Вот сервлет testdbselect:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
 import  javax.servlet.*;
 import  javax.servlet.http.*;
 import  java.io.*;
 import  java.util.*;
 import  java.sql.*;

 public   class  testdbselect  extends  HttpServlet
{
Connection cn, cn1;
Statement st, st1;	
String url="jdbc:odbc:otdels";
String str,std;
ResultSet rs0,rs,rs1;
String s[];
String[] s1;
PreparedStatement sql1, sql2,sql3;

 public   void  init()
{
  try 
    {
	 
DriverManager.registerDriver( new  sun.jdbc.odbc.JdbcOdbcDriver());
cn=DriverManager.getConnection(url);
sql1=cn.prepareStatement("SELECT naimenovanie FROM Otdel");
sql2=cn.prepareStatement("SELECT rabotnik.Name, Otdel.naimenovanie "+
"FROM Otdel INNER JOIN rabotnik ON Otdel.key = rabotnik.keys");
     }
  
  catch  (SQLException e)
  {
  System.out.println(e.toString());	
  }
}

 public   void  doPost(HttpServletRequest request, HttpServletResponse response)
{}

	
 public   void  doGet (HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException
{

 try 
 {
	String encoding = "windows-1251"; // KOI-8R, UTF-8
	response.setContentType("text/html;charset=" + encoding);
	response.setCharacterEncoding(encoding);
	request.setCharacterEncoding(encoding);
	PrintWriter out;
	out=response.getWriter();
	rs=sql1.executeQuery();
 int  i= 0 ;
Vector list =  new  Vector();
	 while  (rs.next())
	{
     list.addElement(rs.getString( 1 ));
    i=i+ 1 ;
	}
 rs.close(); /////!!!!!!!!//
         
	
	
rs1=sql2.executeQuery();
 int  maxCols = rs1.getMetaData().getColumnCount();
out.println("<html><body>");
///ЗДЕСЬ ИДЕТ НАПРАВЛЕНИЕ НА СЕРВЛЕТ zasadit, КОТОРЫЙ САДИТ В БАЗУ ИЗМЕНЕННЫЕ ДАННЫЕ:
out.println("<form action='/jhtp1(saz)/zasadit' method='post'>"); 

out.println("<table border=1>");
out.println("<tr>");
 for  ( int  h= 1 ; h<=maxCols; h++)
	   {
		out.println("<td>" +rs1.getMetaData().getColumnLabel(h)
				+"</td>");
	}
	out.println("</tr>");

	 while  (rs1.next())
	{
	out.println("<tr>");
	str=rs1.getString( 1 );
	std=rs1.getString( 2 );
	out.println("<td><input type='text1' name='text' value="+str+" readonly></td>" );
	
	out.println("<td>");
	out.println("<select name='sel'>");
 for  ( int  k= 0 ; k<list.size(); k++) 
{
     if  (!list.elementAt(k).equals(std))    
    {
    out.println("<option value="+list.elementAt(k)+" > "+list.elementAt(k)+"</option>");
    }
    else   if  (list.elementAt(k).equals(std))
    {
	out.println("<option value="+list.elementAt(k)+" selected > "+list.elementAt(k)+"</option>");
	}
	}
	out.println("</select></td>");
	
out.println("</tr>");	
}
//конец while
out.println("<input type='submit' name='Submit' value='подтвердить'>");	
out.println("</form>");
out.println("</body></html>");	
out.close();
}	
 catch  (Exception e) 
{}

}
 public   void  destroy()
{
 try 
{
sql1.close();
sql2.close();
cn.close();	
}
 catch  (SQLException e)
{
System.out.println(e.toString());	
}
}

}

Сервлет zasadit имеет вид:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
 import  javax.servlet.*;
 import  javax.servlet.http.*;
 import  java.io.*;
 import  java.util.*;
 import  java.sql.*;

 public   class  zasadit  extends  HttpServlet
{
Connection cn;
Statement st;
String url="jdbc:odbc:otdels";

 public   void  init()
{
		
}
	
 public   void  doPost (HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException
{
ResultSet rs;
String s[];
String[] s1;
 try 
{
DriverManager.registerDriver( new  sun.jdbc.odbc.JdbcOdbcDriver());	  
 cn=DriverManager.getConnection(url);
st=cn.createStatement();	
		
String encoding = "windows-1251"; // KOI-8R, UTF-8
response.setContentType("text/html;charset=" + encoding);
response.setCharacterEncoding(encoding);
request.setCharacterEncoding(encoding);
  
s=request.getParameterValues("text");
s1=request.getParameterValues("sel");
     for  ( int  i =  0 ; i < s1.length; i++) 
      { 
  String sql1 = "select key from Otdel where naimenovanie='"+s1[i]+"'";
rs=st.executeQuery(sql1);
rs.next();
 int  abc=rs.getInt( 1 );
String sql2 = "UPDATE rabotnik SET keys ='"+abc+"' where name='"+s[i]+"'";
st.execute(sql2);
//rs.close();
//st.close(); 
//cn.close();
}
//ЗДЕСЬ ИДЕТ ПЕРЕНАПРАВЛЕНИЕ НА СЕРВЛЕТ testdbselect,КОТОРЫЙ СНОВА ОТОБРАЖАЕТ 
//ИЗМЕНЕННЫЕ ДАННЫЕ:
response.sendRedirect("/jhtp1(saz)/testdbselect");
//}////основное тру
st.close(); 
cn.close();
}
 catch  (Exception e) 
{}
}

 public   void  destroy()
{}

}
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / почему не выполняется запрос в сервлете?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]