[Java/Struts] struts-config.xml probleem

Pagina: 1
Acties:

  • MindStorm
  • Registratie: Juli 2002
  • Laatst online: 16-01-2024
Ik ben aan het expirimenteren met Struts, een framework voor Javawebsites en maak gebruik van versie 1.2.9. Het idee van struts is dat je in je struts-config.xml kan aangeven waar je url's naar wijzen, en aan de hand 'mappings' servlets kan laten doorverwijzen naar de juiste pagina's.

Tijdens het programmeren ben ik het volgende probleem tegengekomen: wanneer ik mijn beans/actionforms toevoeg in struts-config.xml werkt de hele applicatie niet meer (met uitzondering van de losse jsp's). Ook de global forwards werken dan niet meer.

Nu vraag ik mij af of het probleem bij mijn code/configuratie ligt, of zit het probleem in de server?

Hier even een voorbeeld van mijn struts-config.xml:

code:
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
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
  "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
    <!-- Formbean Definitions -->
    <form-beans>
        <form-bean name="inputForm" type="example.beans.InputForm"/>
    </form-beans>

    <!-- Global Exceptions -->
    <global-exceptions>
    </global-exceptions>

    <!--  Global Forwards -->
    <global-forwards>
        <forward name="Welcome" path="/Welcome.do" />
        <forward name="Name" path="/Name.do" />
    </global-forwards>

    <!-- Action Mappings -->
    <action-mappings>
        <action path="/Welcome" forward="/welcome.jsp"/>
        <action path="/Name" type="NameAction" name="inputForm" input="/index.jsp">
            <forward name="success" path="/displayName.jsp"/>
            <forward name="failure" path="/index.jsp"/>
        </action>
    </action-mappings>

    <!-- Message Resources -->
    <message-resources parameter="MessageResources"/>

    <plug-in className="org.apache.struts.validator.ValidatorPlugIn" >
        <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
    </plug-in>

</struts-config>


Ik heb uiteraard zelf ook al het nodige geprobeerd, onder andere de search hier en google, maar de search hier levert weinig bruikbaars op, en de examples die ik opgegoogled heb werken ook niet.

Er zijn twee 'soorten' errors die ik krijg, eentje is een java stacktrace (zie hieronder) en de andere is slechts een melding dat de servlet niet beschikbaar is.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
org.apache.jasper.JasperException: Exception in JSP: /index.jsp:9

6: <title>Sample Struts Application</title>
7: </head>
8: <body>
9:      <html:form action="/Name.do">
10:         <table width="80%" border="0">
11:             <tr>
12:                 <td>Name:</td>

//knip

Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:506)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
//knip



Heeft er iemand meer ervaring met Struts dan ik en kan die mij op weg helpen?

[ Voor 35% gewijzigd door MindStorm op 15-10-2006 16:54 . Reden: leesbaarheid struts-config.xml ]


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Je moet de volgorde, die gedefinieerd is in de DTD, in je struts-config.xml wel volgen. Als je de struts-config_1_2.dtd er even bijpakt zie je dat de struts-config tag volgende dtd spec heeft:
code:
1
<!ELEMENT struts-config (display-name?, description?, data-sources?, form-beans?, global-exceptions?, global-forwards?, action-mappings?, controller?, message-resources*, plug-in*)>

Het probleem is dus dat je plug-in definitie, naar helemaal beneden in de file moet verhuizen.

Je krijgt deze exceptions omdat de file niet correct geparsed kan worden. Een goede IDE helpt je hier meestal wel bij

  • MindStorm
  • Registratie: Juli 2002
  • Laatst online: 16-01-2024
-FoX- schreef op zondag 15 oktober 2006 @ 16:40:
Je moet de volgorde, die gedefinieerd is in de DTD, in je struts-config.xml wel volgen. Als je de struts-config_1_2.dtd er even bijpakt zie je dat de struts-config tag volgende dtd spec heeft:
code:
1
<!ELEMENT struts-config (display-name?, description?, data-sources?, form-beans?, global-exceptions?, global-forwards?, action-mappings?, controller?, message-resources*, plug-in*)>
Klopt helemaal, heb ik ook aangepast...maar het werkt desondanks nog steeds niet. Heb in de startpost even de struts-config.xml aangepast voor de helderheid.

Ik gebruik overigens IntelliJ als ide, met struts ondersteuning en dergelijke.

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

type="NameAction"; komt hier geen package voor?

Verander <action path="/Welcome" forward="/welcome.jsp"/> eens in
<action path="/Welcome" type="org.apache.struts.actions.ForwardAction" parameter="welcome.jsp"/>

Hoe ziet je web.xml er verder uit? Iets in de aard van:
XML:
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
  ...
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>1</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>1</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  ...

  • MindStorm
  • Registratie: Juli 2002
  • Laatst online: 16-01-2024
-FoX- schreef op zondag 15 oktober 2006 @ 18:13:
type="NameAction"; komt hier geen package voor?
Wanneer ik deze package toevoeg, wordt ie niet meer herkend...(IDE zegt "cannot resolve class NameAction)
-FoX- schreef op zondag 15 oktober 2006 @ 18:13:
Verander <action path="/Welcome" forward="/welcome.jsp"/> eens in
<action path="/Welcome" type="org.apache.struts.actions.ForwardAction" parameter="welcome.jsp"/>
Done, maar door bovenste error gebeurt er nog niets.

Web.xml:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >

    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    
</web-app>

  • flowerp
  • Registratie: September 2003
  • Laatst online: 04-02 02:01
MindStorm schreef op zondag 15 oktober 2006 @ 16:07:
Ik ben aan het expirimenteren met Struts, een framework voor Javawebsites en maak gebruik van versie 1.2.9.
Als je Struts eens wilt bekijken om historische redenen of omdat je mischien binnenkort een bestaande Struts applicatie moet gaan supporten, dan kun je deze post verder negeren. Wil je Struts echter gaan gebruiken voor nieuwe development, dan moet je eigenlijk weten dat het een beetje de status heeft van een 'deprecated' project. Hoewel een groepje fanatiekelingen het project nog nieuw leven probeerd in te blazen, is de algemene visie (zelfs, of sterker -juist- van de maker van Struts) dat JSF de opvolger is van Struts.

Hoewel Struts nog steeds aardige dingen heeft, is het net alsof je in deze tijd nog gaat leren hoe je een MFC applicatie bouwt.

Voor historische redenen is het echter wel nuttig. Struts blijft toch zo'n beetje de mother of all web frameworks (eigenlijk onterecht, webobjects (http://en.wikipedia.org/wiki/WebObjects) was eerder maar dat gebruikte nooit niemand). Zo wil ik zelf nog wel eens Smalltalk gaan leren om te zien waar OO en MVC nu echt begon. :)

It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.


  • MindStorm
  • Registratie: Juli 2002
  • Laatst online: 16-01-2024
Wellicht een idee dan om JSF te gaan gebruiken....thanks voor de tip

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

JSF mag dan wel een standaard zijn; Struts is nog steeds het meest gebruikte web framework tot op heden. Er zijn inderdaad wel betere alternatieven beschikbaar ondertussen. Spring MVC als request-based model2 framework (in dezelfde lijn als Struts, maar met een beter design); JSF als standaard; en verder heb je dan ook nog Echo2, Wicket als goede andere alternatieven.

Het leren van Struts raad ik dan weer niet af, aangezien er nog érg veel projecten zijn die Struts als web framework gebruiken.

Volgend artikel over Struts kan je misschien wel helpen om je probleem op te lossen Struts CRUD
CRUD staat voor Create, Read, Update, Delete; de basic operaties dus voor een administratieve applicatie

[ Voor 22% gewijzigd door -FoX- op 16-10-2006 13:08 ]


Verwijderd

-FoX- schreef op maandag 16 oktober 2006 @ 13:06:
JSF mag dan wel een standaard zijn; Struts is nog steeds het meest gebruikte web framework tot op heden.
Belangrijkste punt is natuurlijk dat de makers van Struts zelf JSF naar voren schuiven en mensen afraden of nog nieuwe projecten in Struts te beginnen.

Het lijkt me inderdaad nooit verkeerd om Struts kennis op je CV te hebben staan omdat het zeker nog veel gebruikt wordt. Wil je echter wat nieuws leren dan kun je beter eerst gewoon JSF leren omdat dat gewoon een standaard onderdeel van Java zelf is. Wil je wat gaten gaan opvullen in je kennis over frameworks, dan zou ik zeker Struts mee nemen.

Wat het standaard verhaal kun je het vergelijken met de desktop. Als je een GUI applicatie in Java wilt leren maken, dan kijkt iedereen gewoon altijd als eerste naar Swing. Pas als je dat kent loont het de moeite om ook eens naar alternatieve widget sets te kijken zoals SWT. (deze vergelijking gaat niet helemaal op omdat SWT zeker niet deprecated is en al helemaal niet dat de makers van SWT de mensen Swing aanraden maar het gaat even om het idee).
Pagina: 1