Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Tomcat и два сервлета, login + welcome: в браузере лезет сразу welcome / 9 сообщений из 9, страница 1 из 1
27.10.2015, 16:05
    #39088198
Barry Foo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tomcat и два сервлета, login + welcome: в браузере лезет сразу welcome
Здравствуйте.

Apache Tomcat/7.0.52

Имеется вот такой web.xml:
Код: java
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.
<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE web-app 
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" 
    "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd"> 

<web-app> 
  <servlet> 

    <servlet-name>ptr2login</servlet-name>
    <servlet-class>LoginServlet</servlet-class>


    <servlet-name>ptr2welcome</servlet-name>
    <servlet-class>ShowMainPageServlet</servlet-class>

  </servlet> 

  <servlet-mapping>

    <servlet-name>ptr2login</servlet-name>
    <url-pattern>/login_page</url-pattern>

    <servlet-name>ptr2welcome</servlet-name>
    <url-pattern>/welcome_page</url-pattern>

  </servlet-mapping>

  <!-- 2run:  
     
      http://localhost:8080/ch04/welcome_page
      http://localhost:8080/ch04/login_page
  -->

</web-app>


И вот такие два сервлета:
Код: java
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.
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 
import java.util.*; 

public class LoginServlet extends HttpServlet {

  private void sendLoginForm(HttpServletResponse response, 
    boolean withErrorMessage) 
    throws ServletException, IOException {
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter();

    out.println("<html>"); 
    out.println("<body>"); 
    if (withErrorMessage) 
      out.println("login failed. please try again.<br>"); 
    out.println("<br>"); 
    out.println("<br>please enter your user name and password.");

    out.println("<br><form method=post>");
    
    out.println("<br>user name: <input type=text name=username>"); 
    out.println("<br>password: <input type=password name=password>"); 
    out.println("<br><input type=submit value=submit>"); 
    out.println("</form>"); 
    out.println("</body>"); 
    out.println("</html>"); 

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

    System.out.println(this.getClass().getName()+" doGet() : "+System.currentTimeMillis());

    sendLoginForm(response, false); 
  } 

  public void doPost(HttpServletRequest request, 
    HttpServletResponse response) 
    throws ServletException, IOException {
    String userName = request.getParameter("userName"); 
    String password = request.getParameter("password"); 

    System.out.println(this.getClass().getName()+" doPost() : "+System.currentTimeMillis());

    if (userName!=null && password!=null && 
      userName.equals("john") && password.equals("123")) {
      //response.sendRedirect("http://www.sql.ru"); 
      response.sendRedirect("welcome_page"); // http://localhost:8080/ch04/welcome_page
    } 
    else {
      sendLoginForm(response, true); 
    } 
  } 
}



Код: java
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.
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 

public class ShowMainPageServlet extends HttpServlet {

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

    System.out.println(this.getClass().getName()+" doGet() : " + System.currentTimeMillis());
    showPage(response);
  } 

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

    System.out.println(this.getClass().getName()+" doPost() : "+System.currentTimeMillis());
    showPage(response);
  } 


  private void showPage( HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 
    out.println("<html>"); 
    out.println("<body>"); 
    out.println("<P>Welcome to the Main Page.</P>"); 
    out.println("</body>"); 
    out.println("</html>"); 
  }

}



При вводе в браузере: http://localhost:8080/ch04/login_page - вместо формы с логином+паролём сразу отображается "Welcome to the Main Page", а в консоли томката лезет "ShowMainPageServlet doGet() : ...." - без вывода чего-либо из login_page.

Что-то я делаю не так. Пните в нужном напр, плз: как заставить это хоз-во работать ?
...
Рейтинг: 0 / 0
27.10.2015, 16:11
    #39088207
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tomcat и два сервлета, login + welcome: в браузере лезет сразу welcome
Перепроверьте актуальный web.xml
...
Рейтинг: 0 / 0
27.10.2015, 16:20
    #39088221
Barry Foo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tomcat и два сервлета, login + welcome: в браузере лезет сразу welcome
Blazkowicz,

пардон, не понял: что значит "актуальный" ? я как его скопировал сюда, так и не менял больше.
...
Рейтинг: 0 / 0
27.10.2015, 16:25
    #39088229
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tomcat и два сервлета, login + welcome: в браузере лезет сразу welcome
Barry Fooпардон, не понял: что значит "актуальный" ? я как его скопировал сюда, так и не менял больше.
Ну, мы же не знаем откуда именно скопировал. По коду, вроде, всё ОК, либо я совсем не внимательный. Попробуйте посмотреть логи, возможно там будет более детальная инфа почему /login_page вдруг попадает на ShowMainPageServlet.
...
Рейтинг: 0 / 0
27.10.2015, 16:54
    #39088273
Barry Foo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tomcat и два сервлета, login + welcome: в браузере лезет сразу welcome
Код: java
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.
[quot Blazkowicz][quot Barry Foo]пардон, не понял: что значит "актуальный" ? я как его скопировал сюда, так и не менял больше.[/quot]
Ну, мы же не знаем откуда именно скопировал. По коду, вроде, всё ОК, либо я совсем не внимательный. Попробуйте посмотреть логи, возможно там будет более детальная инфа почему /login_page вдруг попадает на ShowMainPageServlet.[/quot]

На консоли томката при его загрузке появляется вот это:[spoiler][SRC java]27.10.2015 16:44:10 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
27.10.2015 16:44:10 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
27.10.2015 16:44:10 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 6871 ms
27.10.2015 16:44:10 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
27.10.2015 16:44:10 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.52
27.10.2015 16:44:10 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\JAVA\tomcat\webapps\ch04
27.10.2015 16:44:11 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\JAVA\tomcat\webapps\docs
27.10.2015 16:44:11 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\JAVA\tomcat\webapps\examples
27.10.2015 16:44:11 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\JAVA\tomcat\webapps\host-manager
27.10.2015 16:44:11 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\JAVA\tomcat\webapps\manager
27.10.2015 16:44:12 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\JAVA\tomcat\webapps\ROOT
27.10.2015 16:44:12 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
27.10.2015 16:44:12 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
27.10.2015 16:44:12 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1295 ms

А когда я ввожу в браузере адрес http://localhost:8080/ch04/login_page, то выводится (в консоль) еще и вот:
Код: java
1.
ShowMainPageServlet doGet() : 1445953463048

только это).

Лог "catalina.2015-10-27.log":
Код: java
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.
27.10.2015 16:44:10 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
27.10.2015 16:44:10 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
27.10.2015 16:44:10 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 6871 ms
27.10.2015 16:44:10 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
27.10.2015 16:44:10 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.52
27.10.2015 16:44:10 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\JAVA\tomcat\webapps\ch04
27.10.2015 16:44:11 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\JAVA\tomcat\webapps\docs
27.10.2015 16:44:11 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\JAVA\tomcat\webapps\examples
27.10.2015 16:44:11 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\JAVA\tomcat\webapps\host-manager
27.10.2015 16:44:11 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\JAVA\tomcat\webapps\manager
27.10.2015 16:44:12 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory D:\JAVA\tomcat\webapps\ROOT
27.10.2015 16:44:12 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
27.10.2015 16:44:12 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
27.10.2015 16:44:12 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1295 ms
27.10.2015 16:46:42 org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-bio-8080"]
27.10.2015 16:46:42 org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["ajp-bio-8009"]
27.10.2015 16:46:42 org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
27.10.2015 16:46:43 org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["http-bio-8080"]
27.10.2015 16:46:43 org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["ajp-bio-8009"]
27.10.2015 16:46:43 org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["http-bio-8080"]
27.10.2015 16:46:43 org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["ajp-bio-8009"]


Еще один лог, "localhost.2015-10-27.log", уже с ошибкой NoClassDefFoundError javax/websocket/Endpoint:
Код: java
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.
javax/websocket/Endpoint:27.10.2015 16:44:11 org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
27.10.2015 16:44:11 org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
27.10.2015 16:44:11 org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@200db9')
27.10.2015 16:46:42 org.apache.catalina.core.StandardContext listenerStop
SEVERE: Exception sending context destroyed event to listener instance of class websocket.drawboard.DrawboardContextListener
java.lang.NoClassDefFoundError: javax/websocket/Endpoint
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
	at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2944)
	at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1208)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1569)
	at websocket.drawboard.DrawboardContextListener.contextDestroyed(DrawboardContextListener.java:32)
	at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:5014)
	at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5659)
	at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
	at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1575)
	at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1564)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: javax.websocket.Endpoint
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1718)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1569)
	... 19 more
27.10.2015 16:46:42 org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextDestroyed()
27.10.2015 16:46:42 org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextDestroyed()



наконец, третий лог, файл localhost_access_log.2015-10-27.txt:
Код: java
1.
127.0.0.1 - - [27/Oct/2015:16:44:23 +0300] "GET /ch04/login_page HTTP/1.1" 200 68



По "NoClassDefFoundError: javax/websocket/Endpoint" я гуглил и понял так, что надо убедиться, что в catalina.properties указаны jar'ы, относящиеся к вебсокетам, которые НЕ должны сканироваться на аннотации. Они у меня так и указаны (см тж аттач):
Код: java
1.
2.
3.
tomcat.util.scan.DefaultJarScanner.jarsToSkip=\
tomcat7-websocket.jar,websocket-api.jar,\
...
...
Рейтинг: 0 / 0
27.10.2015, 17:05
    #39088280
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tomcat и два сервлета, login + welcome: в браузере лезет сразу welcome
Приаттачьте что ли D:\JAVA\tomcat\webapps\ch04 целиком.
...
Рейтинг: 0 / 0
27.10.2015, 17:09
    #39088281
Barry Foo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tomcat и два сервлета, login + welcome: в браузере лезет сразу welcome
Blazkowicz,

вот, прилепил.
...
Рейтинг: 0 / 0
27.10.2015, 18:05
    #39088331
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tomcat и два сервлета, login + welcome: в браузере лезет сразу welcome
Barry Foo,

Отличная задачка на поломать голову. Косяк тут:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<servlet> 

    <servlet-name>ptr2login</servlet-name>
    <servlet-class>LoginServlet</servlet-class>


    <servlet-name>ptr2welcome</servlet-name>
    <servlet-class>ShowMainPageServlet</servlet-class>

</servlet> 


У вас объявлен 1 сервлет, а не два. Tomcat хитрым образом взял имя одного, а класс другого.
Должно быть так:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<servlet> 
    <servlet-name>ptr2login</servlet-name>
    <servlet-class>LoginServlet</servlet-class>
</servlet> 

<servlet> 
    <servlet-name>ptr2welcome</servlet-name>
    <servlet-class>ShowMainPageServlet</servlet-class>
</servlet> 



Аналогичная лажа и в servlet-mapping.

Изучайте лучше Servlet 3.х где маппить можно аннотациями без web.xml. Оно проще и понятнее.
...
Рейтинг: 0 / 0
27.10.2015, 18:11
    #39088341
Barry Foo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tomcat и два сервлета, login + welcome: в браузере лезет сразу welcome
Blazkowicz,

ох-х... а ведь на ровном месте, действительно :-)

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


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