Avatar billede kennethdavidsen Nybegynder
16. oktober 2003 - 18:56 Der er 21 kommentarer og
1 løsning

Servlet, tomcat, web.xml problemer

Jeg har læst lidt i dokumentationen til tomcat og oprettet mappen test i:
"C:\Program Files\Apache Group\Tomcat 4.1\webapps" og i mappen test ligger
mappen: "WEB-INF" og i mappen "WEB-INF" ligger filen "web.xml" og mappen
"classes" som indeholder klasserne. Jeg kan ikke få det til at virke.
Jeg hat en servlet der skrivet HelloWord på skærmen, denne fik jeg til at virke efter at have kopieret og pastet følgende ind i web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN
" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <servlet>
    <servlet-name>HelloWorld2</servlet-name>
    <servlet-class>HelloWorld2</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloWorld2</servlet-name>
    <url-pattern>/HelloWorld2</url-pattern>
  </servlet-mapping>
</web-app>

Men det kan ikke være rigtigt at man skal skrive alle sine servletter ind i web.xml, jeg lavede en gang en applikation i mappen "Tomcat 4.1\webapps\examples\WEB-INF\classes" uden at skrive noget ind i filen web.xml.

Hvordan løser jeg dette ?
Avatar billede arne_v Ekspert
16. oktober 2003 - 18:59 #1
Hvis du vil referere til servletten som /test/Xxxx så skal den mappes
i web.xml !

Men der er også mulighed for en default mapping - jeg prøver lige at
finde syntaxen.

Jeg synes da iøvrigt at det er en udmærker ting at servlets skal defineres.
Avatar billede arne_v Ekspert
16. oktober 2003 - 19:00 #2
Prøv med /test/servlet/Xxxx !
Avatar billede arne_v Ekspert
16. oktober 2003 - 19:00 #3
ALtså /test/servlet/HelloWorld2
Avatar billede kennethdavidsen Nybegynder
16. oktober 2003 - 19:02 #4
Skal jeg skrive test/servlet/ i web.xml i stedet for HelloWord2 ?
Avatar billede arne_v Ekspert
16. oktober 2003 - 19:04 #5
Nej.

Jeg snakker om URL !
Avatar billede kennethdavidsen Nybegynder
16. oktober 2003 - 19:04 #6
Hvis jeg skriver /test/servlet/HelloWorld2, så bliver jeg vel nødt til at skrive alle andre filer ind i web.xml, "/test/servlet/HelloWorld3", "/test/servlet/HelloWorld4" osv. som jeg helst vil undgå.
Avatar billede arne_v Ekspert
16. oktober 2003 - 19:05 #7
Avatar billede arne_v Ekspert
16. oktober 2003 - 19:05 #8
Men jeg ville som sagt altid mappe alle mine servlets.
Avatar billede kennethdavidsen Nybegynder
16. oktober 2003 - 19:10 #9
Ok, jeg forstår lidt mere af hvordan det hele virker, men:
"http://127.0.0.1:8080/test/servlet/HelloWorld2" virker ikke.
"http://127.0.0.1:8080/test/HelloWorld2" virker.
Avatar billede arne_v Ekspert
16. oktober 2003 - 19:18 #10
Du har jo også mapping.

Derfor virker den sidste.
Avatar billede kennethdavidsen Nybegynder
16. oktober 2003 - 19:24 #11
Ja, men jeg ville mene at første også burde virke og hvorfor virker den ikke ?
Avatar billede arne_v Ekspert
16. oktober 2003 - 19:25 #12
Men jeg har lige checket lidt mere om den første.

Det ser ud som om at det kun er http://localhost:8080/servlet/Xxxxx der
mappes til ROOT\WEB-INF\classes af invoker servletten.

SÅ medmindre du vil bruge ROOT webapp (ikke pænt) eller rette i
invoker servlet (heller ikke pænT), så hænger du no på web.xml !
Avatar billede kennethdavidsen Nybegynder
16. oktober 2003 - 19:33 #13
Ok, mange tak for hjælpen, lige et sidste spørgsmål. Hvis jeg skal tilføje flere filer, f.eks "HelloWorldExample.class" til web.xml, skal jeg så tilføje linjerne:
<servlet>
    <servlet-name>HelloWorldExample</servlet-name>
    <servlet-class>HelloWorldExample</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloWorldExample</servlet-name>
    <url-pattern>/HelloWorldExample</url-pattern>
  </servlet-mapping>

til "web.xml" så den kommer til at se sådan ud:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN
" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <servlet>
    <servlet-name>HelloWorld2</servlet-name>
    <servlet-class>HelloWorld2</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloWorld2</servlet-name>
    <url-pattern>/HelloWorld2</url-pattern>
  </servlet-mapping>
  <servlet>
      <servlet-name>HelloWorldExample</servlet-name>
      <servlet-class>HelloWorldExample</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>HelloWorldExample</servlet-name>
      <url-pattern>/HelloWorldExample</url-pattern>
  </servlet-mapping>
</web-app>
Avatar billede arne_v Ekspert
16. oktober 2003 - 19:51 #14
Jeg mener at man normalt tager all servlet tags først og så alle
servlet-mapping tags.
Avatar billede arne_v Ekspert
16. oktober 2003 - 20:01 #15
Der står lidt mere om invoker her:
  http://jakarta.apache.org/tomcat/tomcat-4.1-doc/catalina/funcspecs/fs-invoker.html

(men der er temmeligt uforståeligt)
Avatar billede kennethdavidsen Nybegynder
16. oktober 2003 - 20:06 #16
Skal Tomcat serveren genstartes efter hver gang man har tilføjet i web.xml ?
Avatar billede arne_v Ekspert
16. oktober 2003 - 20:08 #17
Ja.

Eller så skal du kalde management restart.
Avatar billede arne_v Ekspert
16. oktober 2003 - 20:14 #19
Det lykkedes mog at dekryptere den dokumentation.

Hvis du tilføjer:

      <servlet>
        <servlet-name>testinvoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>testinvoker</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>

til webapps\test\WEB-INF\web.xml så kan du bruge:

http://localhost:8080/test/servlet/Xxxx
(som kører webapps\test\WEB-INF\classes\Xxxx.class servletten)
Avatar billede arne_v Ekspert
16. oktober 2003 - 20:15 #20
Men jeg synes stadigvæk at du skal erlære dine servlets.

Det giver en god kontrol med ens web app.

Og specielt når du begynder at bruge packages er det noget pæne URL's.
Avatar billede arne_v Ekspert
16. oktober 2003 - 20:15 #21
Og nu vil jeg tillade mig at ligge et svar.
Avatar billede kennethdavidsen Nybegynder
16. oktober 2003 - 20:31 #22
Du har så sannelig fortjent de 30 point, mange tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester