package net.blogjava.rss;import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.sun.syndication.feed.WireFeed;
import com.sun.syndication.feed.synd.SyndContent;
import com.sun.syndication.feed.synd.SyndContentImpl;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndEntryImpl;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.feed.synd.SyndFeedImpl;
import com.sun.syndication.io.FeedException;
import com.sun.syndication.io.SyndFeedOutput;
import com.sun.syndication.io.WireFeedOutput;/**
 * Servlet implementation class FeedServlet
 */
public class FeedServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String DEFAULT_FEED_TYPE = "default.feed.type";
private static final String FEED_TYPE = "type";
private static final String MIME_TYPE = "application/xml; charset=UTF-8";
private static final String COULD_NOT_GENERATE_FEED_ERROR = "Could not generate feed error!";
private static final DateFormat DATE_PARSER = new SimpleDateFormat(
"yyyy-MM-dd");
private String _defaultFeedType; /**
 * @see Servlet#init(ServletConfig)
 */
public void init(ServletConfig config) throws ServletException {
_defaultFeedType = config.getInitParameter(DEFAULT_FEED_TYPE);
_defaultFeedType = (_defaultFeedType != null) ? _defaultFeedType
: "atom_0.3";
} /**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
 *      response)
 */
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException {
try {
SyndFeed feed = getFeed(request);
String feedType = request.getParameter(FEED_TYPE);
feedType = (feedType != null) ? (checkFeedType(feedType) ? feedType
: _defaultFeedType) : _defaultFeedType; feed.setFeedType(feedType);
response.setContentType(MIME_TYPE);
SyndFeedOutput output = new SyndFeedOutput();
output.output(feed, response.getWriter());
//ws
System.out.println(output.outputString(feed));
/**
 * And now you have an RSS feed ready to go! To write your RSS feed to an output stream, 
 * just use the SyndFeedOutput class, as shown in Listing 5.Listing 5. Publishing the feed
Writer writer = new FileWriter("stream.xml");
         SyndFeedOutput output = new SyndFeedOutput();
         output.output(feed,writer);
       writer.close();  */
/*WireFeed wfeed = feed.createWireFeed();
WireFeedOutput out = new WireFeedOutput();
out.output(wfeed, response.getWriter());

System.out.println(out.outputString(wfeed));*/
/*Feed fedd1 = new Feed();
WireFeedOutput out = new WireFeedOutput();
WireFeed wfeed = null;
try {
 wfeed = (WireFeed) fedd1.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.output(wfeed, response.getWriter());*/
//ws

} catch (FeedException e) {
String msg = COULD_NOT_GENERATE_FEED_ERROR;
log(msg, e);
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
msg);
}
} protected SyndFeed getFeed(HttpServletRequest req) throws IOException,
FeedException {
SyndFeed feed = new SyndFeedImpl(); feed.setTitle("RSS订阅内容");
feed.setLink("http://hi.baidu.com/imxzl");
feed.setDescription("这里是描述!!!"); List<SyndEntry> entries = new ArrayList<SyndEntry>();
SyndEntry entry;
SyndContent description; entry = new SyndEntryImpl();
entry.setTitle("ROME v0.1");
entry.setLink("http://wiki.java.net/bin/view/Javawsxml/rome01");

try {
entry.setPublishedDate(DATE_PARSER.parse("2004-06-08"));
} catch (ParseException ex) {
// IT CANNOT HAPPEN WITH THIS SAMPLE
}
description = new SyndContentImpl();
description.setType("text/plain");
description.setValue("Initial release of ROME");
entry.setDescription(description);
entries.add(entry); entry = new SyndEntryImpl();
entry.setTitle("Rome v0.2");
entry.setLink("http://wiki.java.net/bin/view/Javawsxml/rome02");
try {
entry.setPublishedDate(DATE_PARSER.parse("2004-06-16"));
} catch (ParseException ex) {
// IT CANNOT HAPPEN WITH THIS SAMPLE
}
description = new SyndContentImpl();
description.setType("text/html");
description
.setValue("Bug fixes, minor API changes and some new features"
+ "<p>For details check the <a href=\"http://wiki.java.net/bin/view/Javawsxml/RomeChangesLog#RomeV02\">Changes Log for 0.2</a></p>");
entry.setDescription(description);
entries.add(entry); entry = new SyndEntryImpl();
entry.setTitle("ROME v0.3");
entry.setLink("http://wiki.java.net/bin/view/Javawsxml/rome03");
try {
entry.setPublishedDate(DATE_PARSER.parse("2004-07-27"));
} catch (ParseException ex) {
// IT CANNOT HAPPEN WITH THIS SAMPLE
}
description = new SyndContentImpl();
description.setType("text/html");
description
.setValue("<p>Bug fixes, API changes, some new features and some Unit testing</p>"
+ "<p>For details check the <a href=\"http://wiki.java.net/bin/view/Javawsxml/RomeChangesLog#RomeV03\">Changes Log for 0.3</a></p>");
entry.setDescription(description);
entries.add(entry); entry = new SyndEntryImpl();
entry.setTitle("ROME v0.4");
entry.setLink("http://wiki.java.net/bin/view/Javawsxml/rome04");

try {
entry.setPublishedDate(DATE_PARSER.parse("2004-09-24"));
} catch (ParseException ex) {
// IT CANNOT HAPPEN WITH THIS SAMPLE
}
description = new SyndContentImpl();
description.setType("text/html");
description
.setValue("<p>Bug fixes, API changes, some new features, Unit testing completed</p>"
+ "<p>For details check the <a href=\"http://wiki.java.net/bin/view/Javawsxml/RomeChangesLog#RomeV04\">Changes Log for 0.4</a></p>");
entry.setDescription(description);
entries.add(entry); feed.setEntries(entries);


return feed;
} private boolean checkFeedType(String feedType) {
boolean isFeedType = false;
if (feedType.equals("rss_2.0") || feedType.equals("atom_0.3")) {
isFeedType = true;
}
return isFeedType;
}
}

解决方案 »

  1.   

    package com.example.programmingas3.simpleclock { import flash.display.Sprite;

    public class SimpleClock extends Sprite
    {
    import com.example.programmingas3.simpleclock.AnalogClockFace; 
    import flash.events.TimerEvent;
    import flash.utils.Timer;

    /**
     * The time display component.
     */
    public var face:AnalogClockFace;

    /**
     * The Timer that acts like a heartbeat for the application.
     */
    public var ticker:Timer;

    public static const millisecondsPerMinute:int = 1000 * 60;
            public static const millisecondsPerHour:int = 1000 * 60 * 60;
            public static const millisecondsPerDay:int = 1000 * 60 * 60 * 24;

    /**
     * Sets up a SimpleClock instance.
     */
    public function initClock(faceSize:Number = 200):void 
    {
        // sets the invoice date to today’s date
                var invoiceDate:Date = new Date();
                
                // adds 30 days to get the due date
                var millisecondsPerDay:int = 1000 * 60 * 60 * 24;
                var dueDate:Date = new Date(invoiceDate.getTime() + (30 * millisecondsPerDay));            var oneHourFromNow:Date = new Date(); // starts at the current time
        oneHourFromNow.setTime(oneHourFromNow.getTime() + millisecondsPerHour);
        
    // Creates the clock face and adds it to the Display List
    face = new AnalogClockFace(Math.max(20, faceSize));
    face.init();
    addChild(face);

    // Draws the initial clock display
    face.draw(); // Creates a Timer that fires an event once per second.
             ticker = new Timer(1000); 
            
             // Designates the onTick() method to handle Timer events
                ticker.addEventListener(TimerEvent.TIMER, onTick);
                
                // Starts the clock ticking
                ticker.start();
            } /**
     * Called once per second when the Timer event is received.
     */
            public function onTick(evt:TimerEvent):void 
            {
             // Updates the clock display.
                face.draw();
            }
    }
    }
      

  2.   

    package com.example.programmingas3.simpleclock
    {
        import flash.display.Shape;
        import flash.display.Sprite;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.text.StaticText;
        import flash.events.*;
        import flash.text.TextField;
        import flash.text.TextFormat;

    /**
     * Displays a round clock face with an hour hand, a minute hand, and a second hand.
     */
        public class AnalogClockFace extends Sprite
        {
      /**
     * The desired width of this component, as opposed to the .width
     * property which represents tha actual width.
     */
    public var w:uint = 200;

    /**
     * The desired height of this component, as opposed to the .height
     * property which represents tha actual height.
     */
    public var h:uint = 200;

        /**
          * The radius from the center of the clock to the 
          * outer edge of the circular face outline.
          */
            public var radius:uint;
            
            /**
             * The coordinates of the center of the face.
             */
            public var centerX:int;
            public var centerY:int;
            
            /**
             * The three hands of the clock.
             */
            public var hourHand:Shape;
            public var minuteHand:Shape;
            public var secondHand:Shape;
            
            /**
             * The colors of the background and each hand.
             * These could be set using parameters or 
             * styles in the future.
             */ 
            public var bgColor:uint = 0xEEEEFF;
            public var hourHandColor:uint = 0x003366;
            public var minuteHandColor:uint = 0x000099;
            public var secondHandColor:uint = 0xCC0033;
            
            /**
             * Stores a snapshot of the current time, so it
             * doesn't change while in the middle of drawing the
             * three hands.
             */
            public var currentTime:Date;
            
            /**
             * Contructs a new clock face. The width and
             * height will be equal.
             */  
            public function AnalogClockFace(w:uint) 
            {
    this.w = w;
    this.h = w;

    // Rounds to the nearest pixel
    this.radius = Math.round(this.w / 2);

    // The face is always square now, so the
    // distance to the center is the same
    // horizontally and vertically
    this.centerX = this.radius;
    this.centerY = this.radius;
            }
            
            /**
             * Creates the outline, hour labels, and clock hands.
             */ 
            public function init():void 
            {
             // draws the circular clock outline
             drawBorder();
            
             // draws the hour numbers
             drawLabels();         // creates the three clock hands
             createHands();
            }
            
            /**
            * Draws a circular border.
            */
            public function drawBorder():void
            {
             graphics.lineStyle(0.5, 0x999999);
             graphics.beginFill(bgColor);
             graphics.drawCircle(centerX, centerY, radius);
             graphics.endFill();
            }
      
       /**
        * Puts numeric labels at the hour points.
        */
            public function drawLabels():void
            {
             for (var i:Number = 1; i <= 12; i++)
             {
             // Creates a new TextField showing the hour number
             var label:TextField = new TextField();
             label.text = i.toString();
            
             // Places hour labels around the clock face.
             // The sin() and cos() functions both operate on angles in radians.
             var angleInRadians:Number = i * 30 * (Math.PI/180)
            
             // Place the label using the sin() and cos() functions to get the x,y coordinates.
             // The multiplier value of 0.9 puts the labels inside the outline of the clock face.
             // The integer value at the end of the equation adjusts the label position,
             // since the x,y coordinate is in the upper left corner.
             label.x = centerX + (0.9 * radius * Math.sin( angleInRadians )) - 5;
             label.y = centerY - (0.9 * radius * Math.cos( angleInRadians )) - 9;
            
             // Formats the label text.
             var tf:TextFormat = new TextFormat();
             tf.font = "Arial";
             tf.bold = "true";
             tf.size = 12;
             label.setTextFormat(tf);
            
             // Adds the label to the clock face display list.
             addChild(label);
             }
            }
            
            /**
            * Creates hour, minute, and second hands using the 2D drawing API.
            */
            public function createHands():void
            {
             // Uses a Shape since it's the simplest component that supports
             // the 2D drawing API.
             var hourHandShape:Shape = new Shape();
             drawHand(hourHandShape, Math.round(radius * 0.5), hourHandColor, 3.0);
             this.hourHand = Shape(addChild(hourHandShape));
             this.hourHand.x = centerX;
             this.hourHand.y = centerY;
            
               var minuteHandShape:Shape = new Shape();
             drawHand(minuteHandShape, Math.round(radius * 0.8), minuteHandColor, 2.0);
             this.minuteHand = Shape(addChild(minuteHandShape));
              this.minuteHand.x = centerX;
             this.minuteHand.y = centerY;
     
              var secondHandShape:Shape = new Shape();
             drawHand(secondHandShape, Math.round(radius * 0.9), secondHandColor, 0.5);
             this.secondHand = Shape(addChild(secondHandShape));
             this.secondHand.x = centerX;
             this.secondHand.y = centerY;
            }
            
            /**
            * Draws a clock hand with a given size, color, and thickness.
            */
            public function drawHand(hand:Shape, distance:uint, color:uint, thickness:Number):void
            {
             hand.graphics.lineStyle(thickness, color);
             hand.graphics.moveTo(0, distance);
             hand.graphics.lineTo(0, 0);
            }
            
           /**
            * Called by the parent container when the display is being drawn.
            */
            public function draw():void
            {
             // Stores the current date and time in an instance variable
             currentTime = new Date();
             showTime(currentTime);
            }
            
            /**
             * Displays the given Date/Time in that good old analog clock style.
             */
            public function showTime(time:Date):void 
            {
             // Gets the time values
            var seconds:uint = time.getSeconds();
            var minutes:uint = time.getMinutes();
            var hours:uint = time.getHours();
            
            // Multiplies by 6 to get degrees
            this.secondHand.rotation = 180 + (seconds * 6);
            this.minuteHand.rotation = 180 + (minutes * 6);
            
            // Multiplies by 30 to get basic degrees, and then
            // adds up to 29.5 degrees (59 * 0.5) to account 
            // for the minutes
            this.hourHand.rotation = 180 + (hours * 30) + (minutes * 0.5);
    }
        }
    }