Avatar billede usse Nybegynder
20. februar 2008 - 15:23 Der er 5 kommentarer og
1 løsning

Læs XML til Servlet

Jeg er lige begyndt at lege med Servlets og er desværre stødt ind i et problem når det gælder om at læse en XML fil til en servlet.
Det virker som det skal hvis det kører over main console, men ikke over browseren..

----------------------------------------------------------
public class WelcomeServlet extends HttpServlet
{
    private MyXMLParser mxp;
    private String scrollingMessage;
    private int repeats;
   
    public void init( ServletConfig config ) throws ServletException
    {
        // Load in XML file with a parser
        try
        {
            mxp = new MyXMLParser();
            mxp.parseIt( "ScrollingText.xml" );
           
            HashMap<String, String> elements = mxp.getElements();
           
            scrollingMessage = elements.get( "message" );
            repeats = Integer.parseInt(elements.get( "repeats" ));
        }
        catch( Exception ex )
        {
            System.out.println( "Exception in : " + ex );
            ex.printStackTrace();
        }       
       
    }
   
    public void destroy()
    {
        // Clean save hits
    }
   
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException
    {
        // Load in XML file with a parser       
        response.setContentType( "text/html" );
       
        PrintWriter out = response.getWriter();
       
        String title = "Welcome to The Advanced Computer Science Study in Sønderborg";
       
        out.println( "<HEAD><TITLE>"+title+"</TITLE></HEAD>" );
        out.println( "<BODY BGCOLOR='#FDF5E6'>\n" +
                    "<H1 ALIGN='CENTER'>"+title+"</H1>" +
                    "<MARQUEE LOOP="+repeats+" BEHAVIOR='BOUNCE'>"+scrollingMessage+repeats+"</MARQUEE>" );
        out.println( "</BODY></HTML>" );
    }
----------------------------------------------------------

public class MyXMLParser
{
    private SAXParserFactory factory;
    private SAXParser parser;
    private MyHandler myHandler;
    private HashMap<String, String> items;
       
    public MyXMLParser()
      {
          try
          {
              items = new HashMap<String, String>();
             
            factory = SAXParserFactory.newInstance();
            factory.setValidating( false );

            parser = factory.newSAXParser();
            myHandler = new MyHandler();
             
          }
          catch(Exception ex)
          {
              System.out.println("Error in Constructing parser: " + ex);
          }
      }
     
      public void parseIt( String file ) throws Exception
      {
          XMLReader xr = parser.getXMLReader();
        xr.setContentHandler( myHandler );
        xr.parse( file );
          //parser.parse( file, myHandler );
      }
     
      public HashMap<String, String> getElements()
      {
          return items;
      }
     
      public int size()
      {
          return items.size();
      }   
 
    class MyHandler extends DefaultHandler
    {
        private String currentElement;
       
        public void startElement( String uri, String localName, String qName, Attributes attrs )
        {
            System.out.print("<" + qName );
            currentElement = qName;
            int count = attrs.getLength();
           
            for (int i = 0; i < count; i++)
            {
                System.out.print(" " + attrs.getQName(i) + "=\"" + attrs.getValue(i) + "\"");
            }
           
            System.out.print(">");
        }
       
        public void endElement(String name)
        {
            System.out.print("</" + name + ">");
        }
       
        public void characters( char[] data, int start, int length )
        {
            String text = new String( data, start, length );
            System.out.print( text );
           
            items.put( currentElement , "2" );   
        }
       
        public void ignorableWhitespace( char[] data, int start,int length )
        {
            characters( data, start, length );
        }
       
        public void warning(SAXParseException spe)
        {
            System.out.println( "Warning " + spe );
        }
       
        public void error(SAXParseException spe)
        {
            System.out.println( "error in XML ->" + spe );
        }
       
        public void endDocument()
        {
            System.out.print("\nThe end!");
        }
               
    }
----------------------------------------------------------

<?xml version='1.0' standalone='yes'?>

<scrolling_message>
    <message>Come to the fridays bar happy hour from 12-14</message>
    <repeats>2</repeats>
</scrolling_message>

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

Her er hvad jeg har, kan bare ikke få den til at hente data fra xml filen...
Avatar billede arne_v Ekspert
20. februar 2008 - 16:01 #1
Hvilken fejl faar du ?

Et gaet kunne vaere at du skal angive fuld sti til filen fordi current dir er
et andet sted end du tror.
Avatar billede arne_v Ekspert
20. februar 2008 - 16:05 #2
Fremfor at outputte HTML fra Java har du saa overvejet XSLT (server side) ?
Avatar billede usse Nybegynder
06. marts 2008 - 16:26 #3
jamen du havde simpelthen ret, det var stien der skulle angives helt fra drevet af.. lavede primært det på denne måde da det var en opgave.. hvorfor i det hele taget gøre det på server-side med XSLT, da de fleste browsere understøtter XSLT?
Avatar billede usse Nybegynder
06. marts 2008 - 16:26 #4
her er et lille svar
Avatar billede arne_v Ekspert
06. marts 2008 - 16:41 #5
svar fra mig
Avatar billede arne_v Ekspert
06. marts 2008 - 16:46 #6
Fordelen ved at lave transformeringen server side er at du kan lave det med relativt
simpel kode mens du ved transformering client side skal ud i forskelle paa JavaScript
mellem IE og FF, folk der disabler JavaScript og alt muligt andet crap.

Fordelen ved at lave transformeringen client side er at client PC'erne har masser af
ledig CPU mens din server muligvis skal servicere hundreder eller tudsinder af klienter.
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