??xml version="1.0" encoding="utf-8" standalone="yes"?>天天爽天天狠久久久,成人做爰视频www网站小优视频,久久综合久久鬼色中文字http://www.aygfsteel.com/kuntao/Happy&Optimistic&Effectivezh-cnFri, 20 Jun 2025 01:27:16 GMTFri, 20 Jun 2025 01:27:16 GMT60改写的日期选择?/title><link>http://www.aygfsteel.com/kuntao/archive/2006/04/27/43560.html</link><dc:creator>Kun Tao's Blog</dc:creator><author>Kun Tao's Blog</author><pubDate>Thu, 27 Apr 2006 06:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/kuntao/archive/2006/04/27/43560.html</guid><wfw:comment>http://www.aygfsteel.com/kuntao/comments/43560.html</wfw:comment><comments>http://www.aygfsteel.com/kuntao/archive/2006/04/27/43560.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kuntao/comments/commentRss/43560.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kuntao/services/trackbacks/43560.html</trackback:ping><description><![CDATA[ <p>本程序改变自|上的一个datapickerQ没有用javax包,而是Zjava.awt包。you can use it in your applet.共四个文件?br /><br />//1.AbsoluteConstraints.java<br /><br />import java.awt.Dimension;<br />import java.awt.Point;</p> <p>public class AbsoluteConstraints<br />    implements java.io.Serializable {<br />  static final long serialVersionUID = 5261460716622152494L;<br />  public int x;<br />  public int y;<br />  public int width = -1;<br />  public int height = -1;<br />  public AbsoluteConstraints(Point pos) {<br />    this(pos.x, pos.y);<br />  }</p> <p>  public AbsoluteConstraints(int x, int y) {<br />    this.x = x;<br />    this.y = y;<br />  }</p> <p>  public AbsoluteConstraints(Point pos, Dimension size) {<br />    this.x = pos.x;<br />    this.y = pos.y;<br />    if (size != null) {<br />      this.width = size.width;<br />      this.height = size.height;<br />    }<br />  }</p> <p>  public AbsoluteConstraints(int x, int y, int width, int height) {<br />    this.x = x;<br />    this.y = y;<br />    this.width = width;<br />    this.height = height;<br />  }</p> <p>  public int getX() {<br />    return x;<br />  }</p> <p>  public int getY() {<br />    return y;<br />  }</p> <p>  public int getWidth() {<br />    return width;<br />  }</p> <p>  public int getHeight() {<br />    return height;<br />  }</p> <p>  public String toString() {<br />    return super.toString() + " [x=" + x + ", y=" + y + ", width=" + width +<br />        ", height=" + height + "]";<br />  }<br />}<br /><br /><br /><br />//2.import java.awt.*;</p> <p>public class AbsoluteLayout<br />    implements LayoutManager2, java.io.Serializable {<br />  static final long<br />      serialVersionUID = -1919857869177070440L;<br />  protected java.util.Hashtable constraints = new java.util.Hashtable();<br />  public<br />      void addLayoutComponent(String name, Component comp) {<br />    throw new IllegalArgumentException();<br />  }</p> <p>  public void<br />      removeLayoutComponent(Component comp) {<br />    constraints.remove(comp);<br />  }</p> <p>  public Dimension preferredLayoutSize<br />      (Container parent) {<br />    int maxWidth = 0;<br />    int maxHeight = 0;<br />    for (java.util.Enumeration e =<br />         constraints.keys(); e.hasMoreElements(); ) {<br />      Component comp = (Component) e.nextElement();<br />      AbsoluteConstraints<br />          ac = (AbsoluteConstraints) constraints.get(comp);<br />      Dimension size = comp.getPreferredSize();<br />      int width =<br />          ac.getWidth();<br />      if (width == -1)<br />        width = size.width;<br />      int height = ac.getHeight();<br />      if (height == -1)<br />        height = size.height;<br />      if (ac.x + width > maxWidth)<br />        maxWidth = ac.x + width;<br />      if (ac.y + height ><br />          maxHeight)<br />        maxHeight = ac.y + height;<br />    }<br />    return new Dimension(maxWidth, maxHeight);<br />  }</p> <p>  public<br />      Dimension minimumLayoutSize(Container parent) {<br />    int maxWidth = 0;<br />    int maxHeight = 0;<br />    for<br />        (java.util.Enumeration e = constraints.keys(); e.hasMoreElements(); ) {<br />      Component comp = (Component) e.nextElement();<br />      AbsoluteConstraints ac = (AbsoluteConstraints) constraints.get(comp);<br />      Dimension size = comp.getMinimumSize();<br />      int width = ac.getWidth();<br />      if (width == -1)<br />        width = size.width;<br />      int height = ac.getHeight();<br />      if (height == -1)<br />        height = size.height;<br />      if (ac.x + width > maxWidth)<br />        maxWidth = ac.x + width;<br />      if<br />          (ac.y + height > maxHeight)<br />        maxHeight = ac.y + height;<br />    }<br />    return new Dimension(maxWidth, maxHeight);<br />  }</p> <p>  public void layoutContainer(Container parent) {<br />    for (java.util.Enumeration e = constraints.keys();<br />         e.hasMoreElements(); ) {<br />      Component comp = (Component) e.nextElement();<br />      AbsoluteConstraints ac =<br />          (AbsoluteConstraints) constraints.get(comp);<br />      Dimension size = comp.getPreferredSize();<br />      int width = ac.getWidth();<br />      if (width == -1)<br />        width = size.width;<br />      int height = ac.getHeight();<br />      if (height == -1)<br />        height = size.height;<br />      comp.setBounds(ac.x, ac.y, width, height);<br />    }<br />  }</p> <p>  public void addLayoutComponent<br />      (Component comp, Object constr) {<br />    if (! (constr instanceof AbsoluteConstraints))<br />      throw new<br />          IllegalArgumentException();<br />    constraints.put(comp, constr);<br />  }</p> <p>  public Dimension maximumLayoutSize(Container<br />                                     target) {<br />    return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);<br />  }</p> <p>  public float getLayoutAlignmentX<br />      (Container target) {<br />    return 0;<br />  }</p> <p>  public float getLayoutAlignmentY(Container target) {<br />    return 0;<br />  }</p> <p>  public void invalidateLayout(Container target) {}<br />}<br /><br />// 3DateField.java<br /><br />import java.awt.BorderLayout;<br />import java.awt.Color;<br />import java.awt.Insets;<br />import java.awt.Point;<br />import java.awt.event.ActionEvent;<br />import java.awt.event.ActionListener;<br />import java.awt.event.ComponentAdapter;<br />import java.awt.event.ComponentEvent;<br />import java.awt.event.MouseAdapter;<br />import java.awt.event.MouseEvent;<br />import java.awt.event.MouseMotionAdapter;<br />import java.net.URL;<br />import java.text.DateFormat;<br />import java.text.ParseException;<br />import java.util.Date;<br />import java.awt.*;</p> <p>public final class DateField<br />    extends Panel {<br />  private static final long serialVersionUID = 1L;<br />  private final TextField dateText = new TextField(12);<br />  private final Button dropdownButton = new Button();<br />  private DatePicker dp;<br />  private Dialog dlg;<br />  Point origin = new Point();<br />  final class Listener<br />      extends ComponentAdapter {<br />    public void componentHidden(final ComponentEvent evt) {<br />      final Date dt = ( (DatePicker) evt.getSource()).getDate();<br />      if (null != dt)<br />        dateText.setText(dateToString(dt));<br />      dlg.dispose();<br />    }<br />  }</p> <p>  public DateField() {<br />    super();<br />    init();<br />  }</p> <p>  public DateField(final Date initialDate) {<br />    super();<br />    init();<br />    dateText.setText(dateToString(initialDate));<br />  }</p> <p>  public Date getDate() {<br />    return stringToDate(dateText.getText());<br />  }</p> <p>  public void setDate(Date date) {<br />    String v = dateToString(date);<br />    if (v == null) {<br />      v = "";<br />    }<br />    dateText.setText(v);<br />  }</p> <p>  private void init() {<br />    setLayout(new BorderLayout());<br />    dateText.setText("");<br />    dateText.setEditable(false);<br />    dateText.setBackground(new Color(255, 255, 255));<br />    add(dateText, BorderLayout.CENTER);<br />    dropdownButton.setLabel("选择");<br />    dropdownButton.setBackground(Color.yellow);<br />    dropdownButton.addActionListener(new ActionListener() {<br />      public void actionPerformed(final ActionEvent evt) {<br />        onButtonClick(evt);<br />      }<br />    });<br />    add(dropdownButton, BorderLayout.EAST);<br />  }</p> <p>  private void onButtonClick(final java.awt.event.ActionEvent evt) {<br />    if ("".equals(dateText.getText()))<br />      dp = new DatePicker();<br />    else<br />      dp = new DatePicker(stringToDate(dateText.getText()));<br />    dp.addComponentListener(new Listener());<br />    final Point p = dateText.getLocationOnScreen();<br />    p.setLocation(p.getX(), p.getY() - 1 + dateText.getSize().getHeight());<br />    dlg = new Dialog(new Frame(), true);<br />    dlg.addMouseListener(new MouseAdapter() {<br />      public void mousePressed(MouseEvent e) {<br />        origin.x = e.getX();<br />        origin.y = e.getY();<br />      }<br />    });<br />    dlg.addMouseMotionListener(new MouseMotionAdapter() {<br />      public void mouseDragged(MouseEvent e) {<br />        Point p = dlg.getLocation();<br />        dlg.setLocation(p.x + e.getX() - origin.x, p.y + e.getY() - origin.y);<br />      }<br />    });<br />    dlg.setLocation(p);<br />    dlg.setResizable(false);<br />    dlg.setUndecorated(true);<br />    dlg.add(dp);<br />    dlg.pack();<br />    dlg.setVisible(true);<br />  }</p> <p>  private static String dateToString(final Date dt) {<br />    if (null != dt)<br />      return DateFormat.getDateInstance(DateFormat.LONG).format(dt);<br />    return null;<br />  }</p> <p>  private static Date stringToDate(final String s) {<br />    try {<br />      return DateFormat.getDateInstance(DateFormat.LONG).parse(s);<br />    }<br />    catch (ParseException e) {<br />      return null;<br />    }<br />  }</p> <p>  public static void main(String[] args) {<br />    Dialog dlg = new Dialog(new Frame(), true);<br />    DateField df = new DateField();<br />   //dlg.getContentPane().add(df);<br />   dlg.add(df);<br />    dlg.pack();<br />    dlg.setVisible(true);<br />    System.out.println(df.getDate().toString());<br />    System.exit(0);<br />  }<br />}<br /><br />//4.DatePicker.java<br /><br />import java.awt.*;<br />import java.awt.event.*;<br />import java.util.GregorianCalendar;<br />import java.util.Date;<br />import java.util.Calendar;<br />import java.text.DateFormat;<br />import java.text.FieldPosition;<br />/*<br />import javax.swing.*;<br />import javax.swing.plaf.BorderUIResource;<br />*/<br />public final class DatePicker<br />    extends Panel {<br />  private static final long serialVersionUID = 1L;<br />  private static final int startX = 10;<br />  private static final int startY = 60;<br />  private static final Font smallFont = new Font("Dialog", Font.PLAIN, 10);<br />  private static final Font largeFont = new Font("Dialog", Font.PLAIN, 12);<br />  private static final Insets insets = new Insets(2, 2, 2, 2);<br />  private static final Color highlight = Color.YELLOW;//new Color(255, 255, 204);<br />  private static final Color white = new Color(255, 255, 255);<br />  private static final Color gray = new Color(204, 204, 204);<br />  private Component selectedDay = null;<br />  private GregorianCalendar selectedDate = null;<br />  private GregorianCalendar originalDate = null;<br />  private boolean hideOnSelect = true;<br />  private final Button backButton = new Button();<br />  private final Label monthAndYear = new Label();<br />  private final Button forwardButton = new Button();<br />  private final Label[] dayHeadings = new Label[] {<br />      new Label("?),<br />      new Label("一"),<br />      new Label("?),<br />      new Label("?),<br />      new Label("?),<br />      new Label("?),<br />      new Label("?)};</p> <p>  private final Label[][] daysInMonth = new Label[][] {<br />      {<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label()}<br />      , {<br />      new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label()}<br />      , {<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label()}<br />      , {<br />      new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label()}<br />      , {<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label()}<br />      , {<br />      new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label(),<br />      new Label(), new Label()}<br />  };<br />  private final Button todayButton = new Button();<br />  private final Button cancelButton = new Button();<br />  public DatePicker() {<br />    super();<br />    selectedDate = getToday();<br />    init();<br />  }</p> <p>  public DatePicker(final Date initialDate) {<br />    super();<br />    if (null == initialDate)<br />      selectedDate = getToday();<br />    else<br />      (selectedDate = new GregorianCalendar()).setTime(initialDate);<br />    originalDate = new GregorianCalendar(selectedDate.get(Calendar.YEAR),<br />                                         selectedDate.get(Calendar.MONTH),<br />                                         selectedDate.get(Calendar.DATE));<br />    init();<br />  }</p> <p>  public boolean isHideOnSelect() {<br />    return hideOnSelect;<br />  }</p> <p>  public void setHideOnSelect(final boolean hideOnSelect) {<br />    if (this.hideOnSelect != hideOnSelect) {<br />      this.hideOnSelect = hideOnSelect;<br />      initButtons(false);<br />    }<br />  }</p> <p>  public Date getDate() {<br />    if (null != selectedDate)<br />      return selectedDate.getTime();<br />    return null;<br />  }</p> <p>  private void init() {<br />    setLayout(new AbsoluteLayout());<br />    /*<br />    this.setMinimumSize(new Dimension(161, 226));<br />    this.setMaximumSize(getMinimumSize());<br />    this.setPreferredSize(getMinimumSize());<br />    this.setBorder(new BorderUIResource.EtchedBorderUIResource());<br />    */<br />   this.setSize(new Dimension(161, 226));<br />    backButton.setFont(smallFont);<br />    backButton.setLabel("<");<br />  //  backButton.setSize(insets);<br /> //   backButton.setDefaultCapable(false);<br />    backButton.addActionListener(new ActionListener() {<br />      public void actionPerformed(final ActionEvent evt) {<br />        onBackClicked(evt);<br />      }<br />    });<br />    add(backButton, new AbsoluteConstraints(10, 10, 20, 20));<br />    monthAndYear.setFont(largeFont);<br />    monthAndYear.setAlignment((int)TextField.CENTER_ALIGNMENT);<br />    monthAndYear.setText(formatDateText(selectedDate.getTime()));<br />    add(monthAndYear, new AbsoluteConstraints(30, 10, 100, 20));<br />    forwardButton.setFont(smallFont);<br />    forwardButton.setLabel(">");<br /> //   forwardButton.setMargin(insets);<br />//    forwardButton.setDefaultCapable(false);<br />    forwardButton.addActionListener(new ActionListener() {<br />      public void actionPerformed(final ActionEvent evt) {<br />        onForwardClicked(evt);<br />      }<br />    });<br />    add(forwardButton, new AbsoluteConstraints(130, 10, 20, 20));<br />    int x = startX;<br />    for (int ii = 0; ii < dayHeadings.length; ii++) {<br />    //  dayHeadings[ii].setOpaque(true);<br />      dayHeadings[ii].setBackground(Color.LIGHT_GRAY);<br />      dayHeadings[ii].setForeground(Color.WHITE);<br />      dayHeadings[ii].setAlignment((int)TextField.CENTER_ALIGNMENT);<br />    //  dayHeadings[ii].setHorizontalAlignment(Label.CENTER);<br />      add(dayHeadings[ii], new AbsoluteConstraints(x, 40, 21, 21));<br />      x += 20;<br />    }<br />    x = startX;<br />    int y = startY;<br />    for (int ii = 0; ii < daysInMonth.length; ii++) {<br />      for (int jj = 0; jj < daysInMonth[ii].length; jj++) {<br />      //  daysInMonth[ii][jj].setOpaque(true);<br />        daysInMonth[ii][jj].setBackground(white);<br />        daysInMonth[ii][jj].setFont(smallFont);<br />     //   daysInMonth[ii][jj].setHorizontalAlignment(Label.CENTER);<br />        daysInMonth[ii][jj].setText("");<br />        daysInMonth[ii][jj].addMouseListener(new MouseAdapter() {<br />          public void mouseClicked(final MouseEvent evt) {<br />            onDayClicked(evt);<br />          }<br />        });<br />        add(daysInMonth[ii][jj], new AbsoluteConstraints(x, y, 21, 21));<br />        x += 20;<br />      }<br />      x = startX;<br />      y += 20;<br />    }<br />    initButtons(true);<br />    calculateCalendar();<br />  }</p> <p>  private void initButtons(final boolean firstTime) {<br />    if (firstTime) {<br />      final Dimension buttonSize = new Dimension(68, 24);<br />      todayButton.setLabel("今天");<br />      todayButton.setSize(buttonSize);<br />      /*<br />      todayButton.setMargin(insets);<br />      todayButton.setMaximumSize(buttonSize);<br />      todayButton.setMinimumSize(buttonSize);<br />      todayButton.setPreferredSize(buttonSize);<br />      todayButton.setDefaultCapable(true);<br />      todayButton.setSelected(true);<br />      */<br />      todayButton.addActionListener(new ActionListener() {<br />        public void actionPerformed(final ActionEvent evt) {<br />          onToday(evt);<br />        }<br />      });<br />      cancelButton.setLabel("取消");<br />      cancelButton.setSize(buttonSize);<br />      /*<br />      cancelButton.setMargin(insets);<br />      cancelButton.setMaximumSize(buttonSize);<br />      cancelButton.setMinimumSize(buttonSize);<br />      cancelButton.setPreferredSize(buttonSize);<br />      */<br />      cancelButton.addActionListener(new ActionListener() {<br />        public void actionPerformed(final ActionEvent evt) {<br />          onCancel(evt);<br />        }<br />      });<br />    }<br />    else {<br />      this.remove(todayButton);<br />      this.remove(cancelButton);<br />    }<br />    if (hideOnSelect) {<br />      add(todayButton, new AbsoluteConstraints(25, 190, 52, -1));<br />      add(cancelButton, new AbsoluteConstraints(87, 190, 52, -1));<br />    }<br />    else {<br />      add(todayButton, new AbsoluteConstraints(55, 190, 52, -1));<br />    }<br />  }</p> <p>  private void onToday(final java.awt.event.ActionEvent evt) {<br />    selectedDate = getToday();<br />    setVisible(!hideOnSelect);<br />    if (isVisible()) {<br />      monthAndYear.setText(formatDateText(selectedDate.getTime()));<br />      calculateCalendar();<br />    }<br />  }</p> <p>  private void onCancel(final ActionEvent evt) {<br />    selectedDate = originalDate;<br />    setVisible(!hideOnSelect);<br />  }</p> <p>  private void onForwardClicked(final java.awt.event.ActionEvent evt) {<br />    final int day = selectedDate.get(Calendar.DATE);<br />    selectedDate.set(Calendar.DATE, 1);<br />    selectedDate.add(Calendar.MONTH, 1);<br />    selectedDate.set(Calendar.DATE,<br />                     Math.min(day, calculateDaysInMonth(selectedDate)));<br />    monthAndYear.setText(formatDateText(selectedDate.getTime()));<br />    calculateCalendar();<br />  }</p> <p>  private void onBackClicked(final java.awt.event.ActionEvent evt) {<br />    final int day = selectedDate.get(Calendar.DATE);<br />    selectedDate.set(Calendar.DATE, 1);<br />    selectedDate.add(Calendar.MONTH, -1);<br />    selectedDate.set(Calendar.DATE,<br />                     Math.min(day, calculateDaysInMonth(selectedDate)));<br />    monthAndYear.setText(formatDateText(selectedDate.getTime()));<br />    calculateCalendar();<br />  }</p> <p>  private void onDayClicked(final java.awt.event.MouseEvent evt) {<br />    final Label fld = (Label) evt.getSource();<br />    if (!"".equals(fld.getText())) {<br />      fld.setBackground(highlight);<br />      selectedDay = fld;<br />      selectedDate.set(Calendar.DATE, Integer.parseInt(fld.getText()));<br />      setVisible(!hideOnSelect);<br />    }<br />  }</p> <p>  private static GregorianCalendar getToday() {<br />    final GregorianCalendar gc = new GregorianCalendar();<br />    gc.set(Calendar.HOUR_OF_DAY, 0);<br />    gc.set(Calendar.MINUTE, 0);<br />    gc.set(Calendar.SECOND, 0);<br />    gc.set(Calendar.MILLISECOND, 0);<br />    return gc;<br />  }</p> <p>  private void calculateCalendar() {<br />    if (null != selectedDay) {<br />      selectedDay.setBackground(white);<br />      selectedDay = null;<br />    }<br />    final GregorianCalendar c = new GregorianCalendar(selectedDate.get(Calendar.<br />        YEAR), selectedDate.get(Calendar.MONTH), 1);<br />    final int maxDay = calculateDaysInMonth(c);<br />    final int selectedDay = Math.min(maxDay, selectedDate.get(Calendar.DATE));<br />    int dow = c.get(Calendar.DAY_OF_WEEK);<br />    for (int dd = 0; dd < dow; dd++) {<br />      daysInMonth[0][dd].setText("");<br />    }<br />    int week;<br />    do {<br />      week = c.get(Calendar.WEEK_OF_MONTH);<br />      dow = c.get(Calendar.DAY_OF_WEEK);<br />      final Label fld = this.daysInMonth[week - 1][dow - 1];<br />      fld.setText(Integer.toString(c.get(Calendar.DATE)));<br />      if (selectedDay == c.get(Calendar.DATE)) {<br />        fld.setBackground(highlight);<br />        this.selectedDay = fld;<br />      }<br />      if (c.get(Calendar.DATE) >= maxDay)<br />        break;<br />      c.add(Calendar.DATE, 1);<br />    }<br />    while (c.get(Calendar.DATE) <= maxDay); week--;<br />    for (int ww = week; ww < daysInMonth.length; ww++) {<br />      for (int dd = dow; dd < daysInMonth[ww].length; dd++) {<br />        daysInMonth[ww][dd].setText("");<br />      }<br />      dow = 0;<br />    }<br />    c.set(Calendar.DATE, selectedDay);<br />    selectedDate = c;<br />  }</p> <p>  private static int calculateDaysInMonth(final Calendar c) {<br />    int daysInMonth = 0;<br />    switch (c.get(Calendar.MONTH)) {<br />      case 0:<br />      case 2:<br />      case 4:<br />      case 6:<br />      case 7:<br />      case 9:<br />      case 11:<br />        daysInMonth = 31;<br />        break;<br />      case 3:<br />      case 5:<br />      case 8:<br />      case 10:<br />        daysInMonth = 30;<br />        break;<br />      case 1:<br />        final int year = c.get(Calendar.YEAR);<br />        daysInMonth = (0 == year % 1000) ? 29 : (0 == year % 100) ? 28 :<br />            (0 == year % 4) ? 29 : 28;<br />        break;<br />    }<br />    return daysInMonth;<br />  }</p> <p>  private static String formatDateText(final Date dt) {<br />    final DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);<br />    final StringBuffer mm = new StringBuffer();<br />    final StringBuffer yy = new StringBuffer();<br />    final FieldPosition mmfp = new FieldPosition(DateFormat.MONTH_FIELD);<br />    final FieldPosition yyfp = new FieldPosition(DateFormat.YEAR_FIELD);<br />    df.format(dt, mm, mmfp);<br />    df.format(dt, yy, yyfp);<br />    return (mm.toString().substring(mmfp.getBeginIndex(), mmfp.getEndIndex()) +<br />            "?" +<br />            yy.toString().substring(yyfp.getBeginIndex(), yyfp.getEndIndex()) +<br />            "q?);<br />  }<br />}</p> <img src ="http://www.aygfsteel.com/kuntao/aggbug/43560.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kuntao/" target="_blank">Kun Tao's Blog</a> 2006-04-27 14:32 <a href="http://www.aygfsteel.com/kuntao/archive/2006/04/27/43560.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>圆音寺,露水Q蜘http://www.aygfsteel.com/kuntao/archive/2005/10/25/16797.htmlKun Tao's BlogKun Tao's BlogTue, 25 Oct 2005 12:14:00 GMThttp://www.aygfsteel.com/kuntao/archive/2005/10/25/16797.htmlhttp://www.aygfsteel.com/kuntao/comments/16797.htmlhttp://www.aygfsteel.com/kuntao/archive/2005/10/25/16797.html#Feedback0http://www.aygfsteel.com/kuntao/comments/commentRss/16797.htmlhttp://www.aygfsteel.com/kuntao/services/trackbacks/16797.html从前Q有一座圆韛_Q每天都有许多h上香拜佛Q香火很旺。在圆音寺庙前的横梁上有个蜘蛛结了张|,׃每天都受到香火和虔诚的祭拜的熏托Q蛛蛛便有了佛性。经q了一千多q的修炼Q蛛蛛佛性增加了不少?  忽然有一天,佛主光了圆韛_Q看见这里香火甚旺,十分高兴。离开寺庙的时候,不轻易间地抬_看见了横梁上的蛛蛛。佛d下来Q问q只蜘蛛Q“你我相见ȝ是有~,我来问你个问题,看你修炼了这一千多q来Q有什么真知拙见。怎么P”蜘蛛遇见佛d是高_q忙{应了。佛主问刎ͼ“世间什么才是最珍贵的?”蜘蛛想了想Q回{到Q“世间最珍贵的是‘得不到’和‘已失去’。”佛ȝ了点_d了?  p样又q了一千年的光景,蜘蛛依旧在圆韛_的横梁上修炼Q它的佛性大增。一日,佛主又来到寺前,对蜘蛛说道:“你可还好,一千年前的那个问题Q你可有什么更q认识吗?”蜘蛛说Q“我觉得世间最珍贵的是‘得不到’和‘已失去’。”佛主说Q“你再好好想惻I我会再来找你的。?  又过了一千年Q有一天,刮v了大风,风将一滴甘露吹C蜘蛛|上。蜘蛛望着甘露Q见它晶莚w亮Q很漂亮Q顿生喜׃意。蜘蛛每天看着甘露很开心,它觉得这是三千年来最开心的几天。突Ӟ 又刮起了一阵大风,甘露吹C。蜘蛛一下子觉得失去了什么,感到很寂寞和难过。这时佛d来了Q问蜘蛛Q“蜘蛛这一千年Q你可好好想q这个问题:世间什么才是最珍贵的?”蜘蛛想C甘露Q对佛主_“世间最珍贵的是‘得不到 ’和‘已失去’。”佛主说Q“好Q既然你有这L认识Q我让你Ch间走一朝吧。?  pP蜘蛛投胎C一个官宦家庭,成了一个富家小姐,父母为她取了个名字叫蛛儿。一晃,蛛儿C十六岁了Q已l成了个婀娜多姿的女Q长的十分漂亮,楚楚动h?  q一日,新科状元郎甘鹿中士,皇帝军_在后花园Z举行庆功宴席。来了许多妙龄少奻I包括蛛儿Q还有皇帝的公主长风公丅R状元郎在席间表演诗词歌赋,大献才艺Q在场的女无一不被他折倒。但蛛儿一点也不紧张和吃醋Q因为她知道Q这是佛主赐予她的姻~?  q了些日子,说来很yQ蛛儉K同母亲上香拜佛的时候,正好甘鹿也陪同母亲而来。上完香拜过佛,二位长者在一边说上了话。蛛儿和甘鹿便来到走廊上聊天Q蛛儿很开心,l于可以和喜Ƣ的人在一起了Q但是甘鹿ƈ没有表现出对她的喜爱。蛛儿对甘鹿_“你N不曾记得十六q前Q圆韛_的蜘蛛网上的事情了吗Q”甘鹿很诧异Q说Q“蛛儿姑娘,你漂亮,也很讨h喜欢Q但你想象力未免丰富了一点吧。”说|,和母亲离开了?  蛛儿回到Ӟ心想Q佛L然安排了q场ȝQؓ何不让他记得那g事,甘鹿ZҎ没有一点的感觉Q?  几天后,皇帝下召Q命新科状元甘鹿和长风公d婚;蛛儿和太子芝草完婚。这一消息对蛛儿如同晴I霹電IҎ么也想不同Q佛ȝ然这样对奏V几日来Q她不吃不喝Q穷I急思,灵魂将出壳Q生命危在旦夕。太子芝草知道了Q急忙赶来Q扑倒在床边Q对奄奄一息的蛛儿说道Q“那日,在后花园众姑娘中Q我对你一见钟情,我苦求父皇,他才{应。如果你MQ那么我也就不活了。”说着拿起了宝剑准备自刎?  在q时Q佛L了,他对快要出壳的蛛儿灵说Q“蜘蛛,你可曾想q,甘露Q甘鹿)是由谁带Cq里来的呢?是风Q长风公主)带来的,最后也是风它带走的。甘鹿是属于镉K公主的,他对你不q是生命中的一D|曌Ӏ而太子芝草是当年圆音寺门前的一小草,他看了你三千q_爱慕了你三千q_但你却从没有低下头看q它。蜘蛛,我再来问你,世间什么才是最珍贵的?”蜘蛛听了这些真怹后,好象一下子大彻大悟了,她对佛主_“世间最珍贵的不是‘得不到’和‘已失去’,而是现在能把握的q福。”刚说完Q佛dd了,蛛儿的灵也回位了,睁开眼睛Q看到正要自刎的太子芝草Q她马上打落宝剑Q和太子深深的抱着…?  故事l束了,你能领会蛛儿最后一ȝ所说的话吗Q“世间最珍贵的不是‘得不到?和‘已失去’,而是现在能把握的q福。?

Kun Tao's Blog 2005-10-25 20:14 发表评论
]]>
当前行的J2EE WEB应用架构分析Q?Q?/title><link>http://www.aygfsteel.com/kuntao/archive/2005/10/21/16338.html</link><dc:creator>Kun Tao's Blog</dc:creator><author>Kun Tao's Blog</author><pubDate>Fri, 21 Oct 2005 12:38:00 GMT</pubDate><guid>http://www.aygfsteel.com/kuntao/archive/2005/10/21/16338.html</guid><wfw:comment>http://www.aygfsteel.com/kuntao/comments/16338.html</wfw:comment><comments>http://www.aygfsteel.com/kuntao/archive/2005/10/21/16338.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kuntao/comments/commentRss/16338.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kuntao/services/trackbacks/16338.html</trackback:ping><description><![CDATA[     摘要: 2.1.3. 优缺?优点Q?一些开发商开始采用ƈ推广q个框架作ؓ开源项目,有很多先q的实现思想对大型的应用支持的较好有集中的网导航定?~点Q?不是业届标准对开发工L支持不够复杂的taglibQ需要比较长的时间来掌握html form ?actionform的搭配比较封闭,但这也是它的_֍所在?修改把actionform属性的讄器和讉K器修Ҏd或生成xml文档的方法,然后 ht...  <a href='http://www.aygfsteel.com/kuntao/archive/2005/10/21/16338.html'>阅读全文</a><img src ="http://www.aygfsteel.com/kuntao/aggbug/16338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kuntao/" target="_blank">Kun Tao's Blog</a> 2005-10-21 20:38 <a href="http://www.aygfsteel.com/kuntao/archive/2005/10/21/16338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>当前行的J2EE WEB应用架构分析Q?Q?/title><link>http://www.aygfsteel.com/kuntao/archive/2005/10/21/16334.html</link><dc:creator>Kun Tao's Blog</dc:creator><author>Kun Tao's Blog</author><pubDate>Fri, 21 Oct 2005 12:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/kuntao/archive/2005/10/21/16334.html</guid><wfw:comment>http://www.aygfsteel.com/kuntao/comments/16334.html</wfw:comment><comments>http://www.aygfsteel.com/kuntao/archive/2005/10/21/16334.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kuntao/comments/commentRss/16334.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kuntao/services/trackbacks/16334.html</trackback:ping><description><![CDATA[     摘要: 转蝲说明Q本文主要讲q内容:J2EE web架构基线Q模型选取以及几个模型的优~点Ҏ。一、J2EE体系包括java server pages(JSP) ,java SERVLET, enterprise beanQWEB service{技术。怎样把这些技术组合v来Ş成一个适应目需要的E_架构是项目开发过E中一个非帔R要的步骤。完成这个步骤可以Ş成一个主要里E碑基线?.各种因数初步定 Z...  <a href='http://www.aygfsteel.com/kuntao/archive/2005/10/21/16334.html'>阅读全文</a><img src ="http://www.aygfsteel.com/kuntao/aggbug/16334.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kuntao/" target="_blank">Kun Tao's Blog</a> 2005-10-21 20:21 <a href="http://www.aygfsteel.com/kuntao/archive/2005/10/21/16334.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发J2EE应用应遵循的几点原则http://www.aygfsteel.com/kuntao/archive/2005/10/21/16329.htmlKun Tao's BlogKun Tao's BlogFri, 21 Oct 2005 11:43:00 GMThttp://www.aygfsteel.com/kuntao/archive/2005/10/21/16329.htmlhttp://www.aygfsteel.com/kuntao/comments/16329.htmlhttp://www.aygfsteel.com/kuntao/archive/2005/10/21/16329.html#Feedback0http://www.aygfsteel.com/kuntao/comments/commentRss/16329.htmlhttp://www.aygfsteel.com/kuntao/services/trackbacks/16329.html阅读全文

Kun Tao's Blog 2005-10-21 19:43 发表评论
]]>
J2EE之Duke学习Q二Q?http://www.aygfsteel.com/kuntao/archive/2005/09/21/13674.htmlKun Tao's BlogKun Tao's BlogWed, 21 Sep 2005 11:44:00 GMThttp://www.aygfsteel.com/kuntao/archive/2005/09/21/13674.htmlhttp://www.aygfsteel.com/kuntao/comments/13674.htmlhttp://www.aygfsteel.com/kuntao/archive/2005/09/21/13674.html#Feedback0http://www.aygfsteel.com/kuntao/comments/commentRss/13674.htmlhttp://www.aygfsteel.com/kuntao/services/trackbacks/13674.html建立,打包,部v及运行Duke 银行应用E序 
作?Jimsons
目录
From:http://www.21tx.com/dev/2005/04/23/33123.html
1. 准备工作...
2.    启动服务?/FONT>...
2.1创徏银行数据?..
2.2捕获数据库模?..
2.3创徏JDBC数据?..
2.4 用户和l添加到file?..
3. ~译Duke银行应用E序代码...
4. 打包q|Duke银行应用E序...
4.1 打包企业Beans.
4.2 打包应用E序客户?..
4.3 打包Web客户?..
4.4 打包q|应用程?..
5. q行应用E序客户端Application Client
6. q行Web客户?..
7. 关于例子源代码中的错误更?..
7.1 NextIdBean代码中的错误...
7.2 Web模块中的错误...
8. 参考资?..  
 
1. 准备工作
假设你的计算Z已经安装?/FONT>J2EE 1.4 SDK,在徏立DUKE银行应用E序之前,你必dhttp://java.sun.com/j2ee/1.4/download.html #tutorial下蝲j2eetutorial压羃包ƈ其解压~?假定你解压的路径?CODE><INSTALL>/j2eetutorial14,打开例子的配|文?CODE><INSTALL>/j2eetutorial14/examples/common/build.properties
l         j2ee.home的DZ应用E序服务?Application Server)的安装位|?例如你的应用E序服务器安装在C:/Sun/AppServer,那么你应该设|如? j2ee.home=C:/Sun/AppServer
l         j2ee.tutorial.home  的D|ؓ你j2eetutorial的安装位|?例如: j2ee.tutorial.home=C:/j2eetutorial14
l         假如你安装应用程序服务器的时候管理员的用户名不是用默认的admin,那你要将admin.user的值改Z讄的用户名
l         假如你安装应用程序服务器时不是用默认?080端口,则要domain.resources.port的值改Z讄的端?
l         ?lt;INSTALL>/j2eetutorial14/examples/common/admin-password.txt文g中AS_ADMIN_PASSWORD的DZ安装应用E序服务器时讄的管理员密码,? AS_ADMIN_PASSWORD=yourpassword
你必d启动PointBase数据库服务器q且向数据库中添加客户和帐号的资?你还要向应用E序服务器中d一些资? 最后你才能开始打?部v和运行例?
2.1创徏银行数据?/FONT>
你必d创徏数据库ƈ向数据表中输入数?然后企业Bean才能从中d或向其中写入数据,h据以下步骤来创徏数据表ƈ输入数据:
1.       启动PointBase数据库服务器
2.       打开命o?转到<INSTALL>/j2eetutorial14/examples/bank/目录?执行命oasant create-db_common, q条命o调用PointBasel端工具库执?lt;INSTALL>/j2eetutorial14/examples/bank/sql/create-table.sql中的SQL语句, q些SQL语句的功能是先删除所有已l存在的表ƈ创徏新表q向表中插入数据, 因ؓW一ơ运行这些语句时q些表ƈ不存? 所以你会看C些SQL错误信息,你可以忽略不理这些错误信?
2.2捕获数据库模?/FONT>
在创q输入数据之?你可以捕莯间的l构q保存到一个模式文件中,请通过以下步骤来捕h?
1.       打开命o行ƈ切换?lt;INSTALL>/j2eetutorial14/examples/bank/目录
2.       执行以下命oasant capture-db-schema , 执行此命令后生成模式文g<INSTALL>/j2eetutorial14/examples/bank/build/dukesbank.dbschema
2.3创徏JDBC数据?/FONT>
Duke银行的企业Bean用JNDI名jdbc/BankDB来引用数据库,h行以下步?
1.       打开理l端面http://localhost:4848/asadmin
2.       展开JDBC分支,选择JDBC Resources, 选择 New
3.       其命名为jdbc/BankDBq将它映到 PointBasePool
2.4 用户和l添加到file?/FONT>
用户和l添加到file安全域后,应用E序服务器就能判断哪些用戯讉KWeb客户端的企业Bean的方法和资源,d的步骤如?
1.       打开理l端面http://localhost:4848/asadmin
2.       展开Configuration分支q展开Security分支
3.       展开Realms分支q中file?/FONT>
4.       点击Manage Usersq点击New
5.       Ҏ下表输入Duke银行的用户和l?/FONT>
User
Password
Group
200
j2ee
bankCustomer
bankadmin
j2ee
bankAdmin
 
3. ~译Duke银行应用E序代码
打开命o?转到<INSTALL>/j2eetutorial14/examples/bank/目录,执行命oasant build ,q个命oq译了企业Bean,应用E序客户端和Web客户端的全部代码,~译后的代码位于<INSTALL>/j2eetutorial14/examples/bank/build目录?
4. 打包q|Duke银行应用E序
以下q程假设你对用部|工h包企业Bean, 应用E序客户端和Web应用E序的过E都比较熟悉,下面介绍如何打包q|Duke银行(如果你按照以下步骤做了之?部v或运行此应用E序q存在问?那你可以用我们在<INSTALL>/j2eetutorial14/examples/bank/provided-jars/ 目录下提供的EAR文gx包好的文件来部v和运行这个例?
4.1 打包企业Beans
1.       创徏一?/FONT>EJB JAR模块q命名ؓDukesBankEJBJAR ,其保存?lt;INSTALL>/j2eetutorial14/examples/bank/目录?
2.       d<INSTALL>/j2eetutorial14/examples/bank/build/com/sun/ebank/目录下的ejb和util? q有 <INSTALL>/j2eetutorial14/examples/bank/build/目录下的dukesbank.dbschema文g.
3.       创徏实体Beans(选择d到DukesBankEJBJAR?
a. 用企业Bean向导创徏下面每个表格中的CMP2.0 (容器理持久? 企业bean:
 
AccountBean的设|如下表:
Setting
Value
Local Home Interface
LocalAccountHome
Local Interface
LocalAccount
Persistent Fields
accountId, balance, beginBalance, beginBalanceTimeStamp, creditLine, description, type
Abstract Schema Name
AccountBean
Primary Key Class
Existing field accountId
CustomerBean的设|如下表:
 
Setting
Value
Local Home Interface
LocalCustomerHome
Local Interface
LocalCustomer
Persistent Fields
city, customerId, email, firstName, lastName, middleInitial, phone, state, street, zip
Abstract Schema Name
CustomerBean
Primary Key Class
Existing field customerId
TxBean的设|如下表:
 
Setting
Value
Local Home Interface
LocalTxHome
Local Interface
LocalTx
Persistent Fields
amount, balance, description, timeStamp, txId
Abstract Schema Name
TxBean
Primary Key Class
Existing field txId
NextIdBean的设|如下表:
 
Setting
Value
Local Home Interface
LocalNextIdHome
Local Interface
LocalNextId
Persistent Fields
beanName, id
Abstract Schema Name
NextIdBean
Primary Key Class
Existing field beanName
 
4. Ҏ下表建立实体bean的关p?
 
Multi-plicity
Bean A
Field Referencing Bean B and Field Type
Bean B
Field Referencing Bean A and Field Type
*:*
AccountBean
customers, java.util.Collection
CustomerBean
accounts, java.util.
Collection
1:*
AccountBean
none
TxBean
account
 
b. 在Sun-specific SettingsàCMP Database 对话?/FONT>
1.       JNDI名字命名为jdbc/BankDB
2.       点击Create Database Mappings,选中Map to Tables in Database Schema Fileq从下拉列表中选择dukesbank.dbschema,如下图所C?/FONT>
3.       每选择一个企业bean,下方׃昄持久域的映射, L认那些域和关p?
c. Ҏ下表为finder讄EJB QL查询语句
 
Duke银行中的finder查询
Enterprise Bean
Method
EJB QL Query
AccountBean
findByCustomerId
select distinct object(a)
from AccountBean a, in (a.customers) as c
where c.customerId = ?1
CustomerBean
findByAccountId
select distinct object(c)
from CustomerBean c, in (c.accounts) as a
where a.accountId = ?1
CustomerBean
findByLastName
select object(c)
from CustomerBean c
where c.lastName = ?1
TxBean
findByAccountId
select object(t)
from TxBean t
where t.account.accountId = ?3
and (t.timeStamp >= ?1 and t.timeStamp <= ?2)
d. 在NextIdBean的Transaction标签??NextIdBean.getNextId Ҏ的Transaction Attributes属性设|ؓRequires New.
 
5. 调用企业Bean向导创徏下表中的stateful session beans(x状态会话bean)
 
Session Bean
Home Interface
Remote Interface
Implementation Class
Account
ControllerBean
Account
ControllerHome
Account
Controller
AccountControllerBean
Customer
ControllerBean
Customer
ControllerHome
Customer
Controller
CustomerControllerBean
TxControllerBean
TxControllerHome
TxController
TxBean
    
a.       Ҏ下表列出的添加session beans 到local entity beans 的EJB references即EJB引用.
 
EJB References in AccountControllerBean
Coded Name
EJB Type
Interfaces
Home Interface
Local Interface
Enterprise Bean Name
ejb/account
Entity
Local
Local
AccountHome
LocalAccount
AccountBean
ejb/
customer
Entity
Local
Local
CustomerHome
LocalCustomer
CustomerBean
ejb/nextId
Entity
Local
Local
NextIdHome
LocalNextId
NextIdBean
EJB References in CustomerControllerBean
Coded Name
EJB Type
Interfaces
Home Interface
Local Interface
Enterprise Bean Name
ejb/customer
Entity
Local
Local CustomerHome
Local
Customer
CustomerBean
ejb/nextId
Entity
Local
Local
NextIdHome
Local
NextId
NextIdBean
EJB References in TxControllerBean
Coded Name
EJB Type
Interfaces
Home Interface
Local Interface
Enterprise Bean Name
ejb/account
Entity
Local
Local
AccountHome
Local
Account
AccountBean
ejb/
tx
Entity
Local
Local
TxHome
LocalTx
TxBean
ejb/nextId
Entity
Local
Local
NextIdHome
Local
NextId
NextIdBean
 
b.       所有session bean的Transaction Management讄为Container-Managed卛_器管?/FONT>
6.       保存q个模块
 
4.2 打包应用E序客户?/FONT>
       1. 调用 Application Client 向导
a.      创徏一个应用程序客L模块,它命名为DukesBankACJARq把它保存到<INSTALL>/j2eetutorial14/examples/bank/目录?/FONT>
b.      d<INSTALL>/j2eetutorial14/examples/bank/build/com/sun/ebank/目录下的appclient, util, ejb/exception包和 ejb/*/*Controller* 即home和远E接口文?即AccountController, AccountControllerHome, CustomerController, CustomerControllerHome, TxController, TxControllerHome) 到JAR?
c.       选择appclient.BankAdmin 作ؓ应用E序客户端的main class (ȝ)
2. Ҏ下表d对session bean的EJB 引用
Coded Name
EJB Type
Interface
JNDI Name of Session Bean
ejb/accountController
Session
Remote
AccountControllerBean
ejb/customerController
Session
Remote
CustomerControllerBean
3. 保存q个模块.
4.3 打包Web客户?/FONT>
1.      通过Web Component向导创徏一个web模块,命名为DukesBankWARq保存到<INSTALL>/j2eetutorial14/examples/bank/目录?选择Dispatcher 作ؓServletc?其它保持默认.
2.      d以下内容到web模块?/FONT>
a.      d<INSTALL>/j2eetutorial14/examples/bank/build/com/sun/ebank/目录下的web, util, ejb/exception包和 ejb/*/*Controller* 即home和远E接口文?即AccountController, AccountControllerHome, CustomerController, CustomerControllerHome, TxController, TxControllerHome) 到模块中.
b.      d<INSTALL>/j2eetutorial14/examples/bank/build/目录下的template目录,所有的jsp面,所有的WebMessages*.properties文g和tutorial-template.tld文g到模块中.
c.       在添加文件的对话框中WebMessages*.properties文g从根目录拖到WEB-INF/classes目录?如下?/FONT>
 
3.      context root 讄?/bank
4.      打开Dispatcherlg的Aliases标签, d/accountHist, /accountList, /atm, /atmAck, /main, /transferAck, /transferFunds, and /logoff作ؓaliases
5.      d下表列出的session bean对EJB 的引?/FONT>
Coded Name
EJB Type
Interface
JNDI Name of Session Bean
ejb/accountController
Session
Remote
AccountControllerBean
ejb/customerController
Session
Remote
CustomerControllerBean
ejb/txController
Session
Remote
TxControllerBean
6.      在标{JSP propertyd名ؓbank的组,q个l对应的URL pattern(URL模式)?.jsp,d/template/prelude.jspf 到include prelude ?/FONT>
7.      在Context标签,d参数名ؓjavax.servlet.jsp.jstl.fmt.localizationContext,gؓWebMessages.
8.      在Security标签d安全控制
a. 选择Form Based作ؓuser authenticationҎ,在authentication讄中将realm的D|ؓfile, login page (d? 讄?logon.jsp, error page (错误?讄?logonError.jsp.
b. d一个security constraint和web resource collection, 用deploytool提供的默认名U?/FONT>
c. 在web resource collection.中添加URL Patterns(URL模式): /main, /accountList, /accountHist, /atm, /atmAck, /transferFunds, ?/transferAck
d. 选中HTTPҎPOST和GET.
e. d安全角色(authorized role ) bankCustomer
       9. 保存q个模块
 
4.4 打包q|应用程?/FONT>
1.      创徏一个J2EE application(J2EE应用E序), 它命名为DukesBankApp,q保存到<INSTALL>/j2eetutorial14/examples/bank/目录?/FONT>
2.     dDukesBankACJAR应用E序客户端模块到DukesBankApp
3.     dDukesBankEJBJAR即EJB模块到DukesBankApp
4.     dDukesBankWAR即Web模块到DukesBankApp
5.     d安全角色(security roles) 名ؓ bankAdmin ?bankCustomer
6.     Z业beand以下的安全设|?security settings)
a.     AccountControllerBean:在Security标签,方法removeCustomerFromAccount, removeAccount, createAccount, ?addCustomerToAccount的限制访问权限的安全角色为bankAdmin ;?/CODE>General标签, 点击Sun-specific Settings,然后在弹出的对话框中点击IOR, 在Context对话框将Required讄为true, realm讄为file.
b.     CustomerControllerBean: 在Security标签,方法getCustomersOfAccount, createCustomer, getCustomersOfLastName, setName, removeCustomer, ?setAddress的限制访问权限的安全角色为bankAdmin ;?/CODE>General标签, 点击Sun-specific Settings,然后在弹出的对话框中点击IOR, 在Context对话框将Required讄为true, realm讄为file.
c.     TxControllerBeanQ在Security标签,方法getTxsOfAccount, makeCharge, deposit, transferFunds, withdraw, ?makePayment的限制访问权限的安全角色为bankCustomer
7.     如果你还没有启动应用E序服务器(Application Server.Q那你现在就启动?
8.     bankCustomer角色映射到bankCustomerl?/FONT>
9.     bankAdmin角色映射到bankAdminl?/FONT>
10.  保存q个应用E序模块
11.  Deploy(部v)q个应用E序Q在部vkesBankApp对话框选中Return Client Jar卌回客LJar选项.
12.  在deploytool中选中server,右边出现的bank选中q启动它Q?/FONT>
5. q行应用E序客户端Application Client
h据以下步骤来q行应用E序客户?
1.           打开命o行,转到<INSTALL>/j2eetutorial14/examples/bank/目录?/FONT>
2.           如果是要q行英文版本的客Lp入以下命令:        appclient -client DukesBankAppClient.jar
DukesBankAppClient.jarq个文g是你刚才部v旉中q回客户端JAR而返回的文gQ?/CODE>
3.           如果惌行西班牙语版本的客户端则q行以下命oQ?BR>appclient -client DukesBankAppClient.jar es
4.           在弹出的d框中Q输入用户名bankadmin密码?j2eeQ然后你可以看C下的界面Q?BR> 
6. q行Web客户?/FONT>
h据以下步骤来q行Web客户?/FONT>
1.     请在览器中打开地址http://localhost:8080/bank/main ,如果查看西班牙版本的客户端则只需在浏览器的语a讄中更改.
2.     在登录页面,输入用户?00Q密码j2eeq提?
3.     当你选择Account List,则你会看C下画面.
 
7. 关于例子源代码中的错误更?/FONT>
       7.1 NextIdBean代码中的错误
    此错误会造成部v发生错误不能完成Q将<INSTALL>/j2eetutorial14/examples/bank/src/com/sun/ebank/ejb/util/目录下的NextIdBean.java文g打开,扑ֈ下面q行代码
public Object ejbCreate() throws CreateException {
方法ejbCreate()的返回类型由Object更改为String,再重新编译,q在deploytool中更新此文gQ重新部|即可成?/FONT>
       7.2 Web模块中的错误
    打开Web客户端,输入用户名密码然后提交可能会抛出javax.servlet.jsp.JspTagException错误Q请Ҏ以下步骤q行更正:
        1. 用文本编辑器新徏java文档命名为CustomerHackFilterQ保存到<INSTALL>/j2eetutorial14/examples/bank/src/com/sun/ebank/web目录?内容如下Q?BR>package com.sun.ebank.web;
 
import javax.servlet.*;
import javax.servlet.http.*;
import com.sun.ebank.util.Debug;
import com.sun.ebank.web.*;
import java.io.IOException;
 
/**
 * this is a dumb hack.  update 4 seems to broken unless a
 * CustomerBean is placed in the request linked to the BeanManager.
 * Naturally, we need to add a BeanManager to the session here,
 * doing some of the work the dispatcher should have done.
 */
public class CustomerHackFilter  implements Filter
{
    private FilterConfig filterConfig = null;
        public void init(FilterConfig filterConfig)
        throws ServletException
    {
        this.filterConfig = filterConfig;
    }
 
    public void destroy() {
        this.filterConfig = null;
    }
 
    public void doFilter(ServletRequest req, ServletResponse response,
                         FilterChain chain)
        throws IOException,
               ServletException
    {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpSession        session = request.getSession();
 
        BeanManager beanManager =
            (BeanManager) session.getAttribute("beanManager");
 
        if (beanManager == null) {
            Debug.print("hack - Creating bean manager.");
            beanManager = new BeanManager();
            session.setAttribute("beanManager", beanManager);
        }
 
        CustomerBean customerBean = new CustomerBean();
        customerBean.setBeanManager(beanManager);
        request.setAttribute("customerBean", customerBean);
        Debug.print("hack - added customerBean to request");
 
        chain.doFilter(request, response);
    }
}
   2. 重新~译源代?/FONT>
   3. 选中DukesBankWAR模块,~辑内容,扑ֈcom/sun/ebank/web/ CustomerHackFilter.class,它d到包?
   4. 选中DukesBankWAR模块,在Filter Mapping标签,点击Edit Filter List,在弹出的对话框中点击Add Filter,在Filter Class下拉列表中选中com.sun.ebank.web.CustomerHackFilter,Filter Name为CustomerHack,选择OK
   5. q是在这个标{֜,点击Add,弹出 “Add Servlet Filter Mapping?在Filter Name下拉列表中选CustomerHack,下面选中 “Filter this Servlet?选OK,如下?
   6. 保存q个模块q新部|运行即可修正错?/FONT>


Kun Tao's Blog 2005-09-21 19:44 发表评论
]]>
J2EE之Duke学习Q一Q?/title><link>http://www.aygfsteel.com/kuntao/archive/2005/09/17/13251.html</link><dc:creator>Kun Tao's Blog</dc:creator><author>Kun Tao's Blog</author><pubDate>Sat, 17 Sep 2005 12:47:00 GMT</pubDate><guid>http://www.aygfsteel.com/kuntao/archive/2005/09/17/13251.html</guid><wfw:comment>http://www.aygfsteel.com/kuntao/comments/13251.html</wfw:comment><comments>http://www.aygfsteel.com/kuntao/archive/2005/09/17/13251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kuntao/comments/commentRss/13251.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kuntao/services/trackbacks/13251.html</trackback:ping><description><![CDATA[Duke执行环境Q?BR>1.J2SE JDK;(download from :http://java.sun.com/j2se/download.html#sdk)<BR>2.J2EE JDK;(download from :http://java.sun.com/j2ee/download.html#sdk)<BR>3.Ant;(download from:http://jakarta.apathe.org/builds/jakarta-ant)<BR>4.Structs;(download from:http://jakarta.apathe.org/builds/jakarta-structs)<BR>5.J2ee Tutorial;(download from :http://java.sun.com/j2ee/download.html#tutorial)<BR>环境配置Q?BR>1.?BR>2.<STRONG><FONT size=2><SPAN lang=EN-US>J2EE</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q行环境的搭?/SPAN><SPAN lang=EN-US><?XML:NAMESPACE PREFIX = O /><O:P> </O:P></SPAN></FONT></STRONG> <P class=MsoNormal style="MARGIN-LEFT: 42pt"><FONT size=2><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发企业的应用程序需要搭建好</SPAN><SPAN lang=EN-US>J2EE</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的运行环境。其实也是?/SPAN><SPAN lang=EN-US>SUN</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">公司的网站上?/SPAN><SPAN lang=EN-US>DOWN</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/SPAN><SPAN lang=EN-US>J2EE 1.4 SDK</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发工具包。然后双d装文Ӟ如果你下载的版本与我的一栗那么这个安装文件就会是q个名字Q?/SPAN><SPAN lang=EN-US>j2eesdk-1_4-dr-windows-eval.exe</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。同L我们也将</SPAN><SPAN lang=EN-US>J2EE SDK</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安装?/SPAN><SPAN lang=EN-US>C</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">盘根目录下?/SPAN><SPAN lang=EN-US><O:P> </O:P></SPAN></FONT></P> <P class=MsoNormal style="MARGIN-LEFT: 42pt"><B><FONT size=2><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需要特别提醒大家的是:</SPAN><SPAN lang=EN-US>J2EE</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q行环境的搭建是?/SPAN><SPAN lang=EN-US>J2SE</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q行环境的搭Zؓ基础的。其实想也想得到Z么。如果没?/SPAN><SPAN lang=EN-US>JDK</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q哪里来的编译和q行命o呢(</SPAN><SPAN lang=EN-US>JAVA</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/SPAN><SPAN lang=EN-US>javac</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q。安装完</SPAN><SPAN lang=EN-US>J2EE 1.4 SDK</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包后Q具体的讄与测试步骤如下:</SPAN><SPAN lang=EN-US><O:P> </O:P></SPAN></FONT></B></P> <P class=MsoNormal style="MARGIN-LEFT: 60pt; TEXT-INDENT: -18pt; mso-list: l3 level1 lfo4; tab-stops: list 60.0pt"><FONT size=2><SPAN lang=EN-US>1?SPAN style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Times New Roman; FONT-VARIANT: normal">  </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首先叛_</SPAN><SPAN lang=EN-US>PATH</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变量里添?/SPAN><SPAN lang=EN-US>J2EE SDK</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/SPAN><SPAN lang=EN-US>BIN</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录。如Q?/SPAN><SPAN lang=EN-US>C:\j2sdkee1.3.1\bin</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。如何往里面dQ前面已l讲q?/SPAN><SPAN lang=EN-US><O:P> </O:P></SPAN></FONT></P> <P class=MsoNormal style="MARGIN-LEFT: 60pt; TEXT-INDENT: -18pt; mso-list: l3 level1 lfo4; tab-stops: list 60.0pt"><FONT size=2><SPAN lang=EN-US>2?SPAN style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Times New Roman; FONT-VARIANT: normal">  </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后新徏两个变量Q一个是</SPAN><SPAN lang=EN-US>JAVA_HOME</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q变量gؓQ?/SPAN><SPAN lang=EN-US>JDK</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的安装目录。另一个是</SPAN><SPAN lang=EN-US>J2EE_HOME</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q变量gؓ</SPAN><SPAN lang=EN-US>J2EE SDK</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的安装目录。如囄Q?/SPAN><SPAN lang=EN-US><O:P> </O:P></SPAN></FONT><SPAN lang=EN-US><FONT size=2><IMG height=107 src="http://www.hnniit.com/XYSQ/PIC/10.htm5.jpg" width=347 border=0 v:shapes="_x0000_i1029"><O:P> </O:P></FONT></SPAN><SPAN lang=EN-US><FONT size=2><IMG height=106 src="http://www.hnniit.com/XYSQ/PIC/10.htm6.jpg" width=347 border=0 v:shapes="_x0000_i1030"><O:P> <BR></O:P></FONT></SPAN><FONT size=2><SPAN lang=EN-US>3?SPAN style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Times New Roman; FONT-VARIANT: normal">  </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">最后往</SPAN><SPAN lang=EN-US>CLASSPATH</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变量里添加一个关键的</SPAN><SPAN lang=EN-US>JAR</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包。它是</SPAN><SPAN lang=EN-US>J2EE.JAR</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包。比如我d的就是:</SPAN><SPAN lang=EN-US>C:\j2sdkee1.3.1\lib\j2ee.jar</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/SPAN><SPAN lang=EN-US><O:P> </O:P></SPAN></FONT></P> <P class=MsoNormal style="MARGIN-LEFT: 60pt; TEXT-INDENT: -18pt; mso-list: l3 level1 lfo4; tab-stops: list 60.0pt"><SPAN lang=EN-US><FONT size=2>4?SPAN style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Times New Roman; FONT-VARIANT: normal">  </SPAN></FONT></SPAN><FONT size=2><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所有的工作做完以后。大家可以通过以下方式验证一下我们的</SPAN><SPAN lang=EN-US>J2EE</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">环境是否已经搭徏成功。在命o提示W状态下输入命oQ?/SPAN><SPAN lang=EN-US>J2EE </SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/SPAN><SPAN lang=EN-US>Verbose</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。如果屏q的最下面看到了这样一句话</SPAN><B><SPAN lang=EN-US>J2EE server startup complete.</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那就表示</SPAN><SPAN lang=EN-US>J2EE</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器成功启动了。在我们?/SPAN><SPAN lang=EN-US>J2EE</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">E序要布|和q行的过E中。服务器一直启动着?/SPAN></B><SPAN lang=EN-US><O:P> </O:P></SPAN></FONT></P> <P class=MsoNormal style="MARGIN-LEFT: 60pt"><FONT size=2><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">另外提一下,如果你需要停?/SPAN><SPAN lang=EN-US>J2EE</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器,必须再开一个命令窗口,q运行如下命令:</SPAN><SPAN lang=EN-US>J2EE –STOP</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。成功运行后Q将会有提示语句。再ȝ看启动服务器的那个窗口,你将可以看到提示W了?/SPAN><B><SPAN lang=EN-US><O:P> </O:P></SPAN></B></FONT></P> <P class=MsoNormal style="MARGIN-LEFT: 60pt; TEXT-INDENT: -18pt; mso-list: l3 level1 lfo4; tab-stops: list 60.0pt"><FONT size=2><SPAN lang=EN-US>5?SPAN style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Times New Roman; FONT-VARIANT: normal">  </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q样做了q不够,我们q需要到|页里去试一下服务器默认面是否能够正常昄Q这h能保证我们能够进</SPAN><SPAN lang=EN-US>WEB</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">E序的开发。双?/SPAN><SPAN lang=EN-US>IE</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">览器的图标Q在地址栏里输入Q?/SPAN><SPAN lang=EN-US><A href="http://localhost:8000,如果你能看到以下H口中的内容/">http://localhost:8000,<SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果你能看到以下H口中的内容</SPAN></A></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q那p明你?/SPAN><SPAN lang=EN-US>J2EE</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">环境已经搭徏成功。需要说明一点,?/SPAN><SPAN lang=EN-US>localhost:</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后的?/SPAN><SPAN lang=EN-US>J2EE</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器提供的</SPAN><SPAN lang=EN-US>WEB</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务端口受?/SPAN><SPAN lang=EN-US><O:P> </O:P></SPAN></FONT></P> <P class=MsoNormal style="MARGIN-LEFT: 60pt"><FONT size=2><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需要提醒大家的是:<B>当你打开|页之前Q确认你?/B></SPAN><B><SPAN lang=EN-US>J2EE</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器是启动着的?/SPAN></B><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果你机器上没有安装|卡Q或是网卡安装不正确Q也会导致无法打开</SPAN><SPAN lang=EN-US>J2EE</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器默认页面?/SPAN><SPAN lang=EN-US><O:P> <BR></O:P></SPAN></FONT><SPAN lang=EN-US><FONT size=2><IMG style="WIDTH: 448px; HEIGHT: 224px" height=158 src="http://www.hnniit.com/XYSQ/PIC/10.htm7.jpg" width=448 border=0 v:shapes="_x0000_i1031"><O:P> </O:P></FONT></SPAN></P> <P class=MsoNormal style="TEXT-INDENT: 37.5pt"><B><FONT size=2><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></SPAN></FONT></B> </P><img src ="http://www.aygfsteel.com/kuntao/aggbug/13251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kuntao/" target="_blank">Kun Tao's Blog</a> 2005-09-17 20:47 <a href="http://www.aygfsteel.com/kuntao/archive/2005/09/17/13251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用的ant的操?/title><link>http://www.aygfsteel.com/kuntao/archive/2005/07/19/8002.html</link><dc:creator>Kun Tao's Blog</dc:creator><author>Kun Tao's Blog</author><pubDate>Tue, 19 Jul 2005 08:56:00 GMT</pubDate><guid>http://www.aygfsteel.com/kuntao/archive/2005/07/19/8002.html</guid><wfw:comment>http://www.aygfsteel.com/kuntao/comments/8002.html</wfw:comment><comments>http://www.aygfsteel.com/kuntao/archive/2005/07/19/8002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kuntao/comments/commentRss/8002.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kuntao/services/trackbacks/8002.html</trackback:ping><description><![CDATA[<P align=left><STRONG>常用的ant的操?BR><BR>常用的ant的操作,方便自己查询Q所以传到网上,如果有朋友觉得不够,误充:<BR>主要的内Ҏ</STRONG>Q?BR>  (1)建立一个项?BR>  (2)建立属?BR>  (3)Ҏ据库的操?BR>  (4)javac~译 <BR>  (5)删除目录 <BR>  (6)建立目录 <BR>  (7)拯文g?<BR>  (8)jarZ个包 <BR>  (9)拯单个文g <BR>  (10)q行<BR>有更多更好的常用?我没惛_?希望大家补充? <BR>  <BR><STRONG><FONT color=#f73809><!--(1)建立一个项目,默认的操作ؓtarget=all. --></FONT></STRONG><BR><project name="proj" default="all" basedir="."></P> <P><STRONG><FONT color=#ff0000>  <!--(2)建立一些属性,以供下边的操作用?--></FONT><BR></STRONG>  <property name="root"  value="./" /><BR>  <property name="deploy_path"  value="d:/deploy" /><BR>  <property name="srcfile"  value="d:/srcfile" />  <BR>  <BR>  <target name="all" depends="compile,deploy"/><BR>  <BR><STRONG><FONT color=#ff0000>  <!--(3)Ҏ据库的操?demo.ddl中写的是sql语句 driver,url,userid,password随具体情况设|?-></FONT></STRONG>  <BR>  <!-- Oracle --><BR>  <target name="db_setup_oracle" description="Database setup for Oracle"><BR>    <antcall target="check_params_results"/><BR>    <sql driver="oracle.jdbc.driver.OracleDriver"<BR>       url="jdbc:oracle:thin:@192.168.0.1:1521:oa" <BR>       userid="oa" password="oa"<BR>       onerror="continue" <BR>       print="yes"<BR>       src="./demo.ddl"/><BR>  </target></P> <P><STRONG><FONT color=#ee6911><FONT color=#ff3300>  </FONT><FONT color=#ff0000><!--(4)javac~译 --></FONT>  <BR></FONT></STRONG>  <target name="compile">   <BR>    <javac srcdir="${srcfile}"<BR>      destdir="${root}/oa/"<BR>      includes="*.java"<BR>      classpath="${CLASSPATH};${CLIENT_CLASSES}/utils_common.jar"   <!--CLASSPATH和CLIENT_CLASSES是环境变?-><BR>    /><BR>  </target><BR> <BR>  <target name="deploy" depends="compile"><BR>    <!-- Create the time stamp --><BR>    <tstamp/><BR>    <BR><STRONG><FONT color=#ff0000>    <!--(5)删除目录-->    <BR>    <!--(6)建立目录--></FONT></STRONG><BR>    <delete dir="${root}/dist/"/>    <BR>    <mkdir dir="${root}/dist/"/>      </P> <P>    <delete dir="${deploy_path}"/>    <BR>    <mkdir dir="${deploy_path}"/>     <BR>  <BR><STRONG><FONT color=#ff0000>    <!--(7)拯文g?-></FONT></STRONG><BR>    <copy todir="${root}/dist/">     <BR>            <fileset dir="${root}/oa/"><BR>                <include name="*.class"/><BR>            </fileset><BR>    </copy&g </P><img src ="http://www.aygfsteel.com/kuntao/aggbug/8002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kuntao/" target="_blank">Kun Tao's Blog</a> 2005-07-19 16:56 <a href="http://www.aygfsteel.com/kuntao/archive/2005/07/19/8002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>The Java interpreter proceeds as follows...http://www.aygfsteel.com/kuntao/archive/2005/07/13/7617.htmlKun Tao's BlogKun Tao's BlogWed, 13 Jul 2005 07:08:00 GMThttp://www.aygfsteel.com/kuntao/archive/2005/07/13/7617.htmlhttp://www.aygfsteel.com/kuntao/comments/7617.htmlhttp://www.aygfsteel.com/kuntao/archive/2005/07/13/7617.html#Feedback0http://www.aygfsteel.com/kuntao/comments/commentRss/7617.htmlhttp://www.aygfsteel.com/kuntao/services/trackbacks/7617.html.class files. Starting at that root, the interpreter will take the package name and replace each dot with a slash to generate a path name from the CLASSPATH root (so package foo.bar.baz becomes foo\bar\baz or foo/bar/baz or possibly something else, depending on your operating system). This is then concatenated to the various entries in the CLASSPATH. That’s where it looks for the .class file with the name corresponding to the class you’re trying to create. (It also searches some standard directories relative to where the Java interpreter resides).

Kun Tao's Blog 2005-07-13 15:08 发表评论
]]>
The process of creating an objecthttp://www.aygfsteel.com/kuntao/archive/2005/07/13/7588.htmlKun Tao's BlogKun Tao's BlogWed, 13 Jul 2005 01:22:00 GMThttp://www.aygfsteel.com/kuntao/archive/2005/07/13/7588.htmlhttp://www.aygfsteel.com/kuntao/comments/7588.htmlhttp://www.aygfsteel.com/kuntao/archive/2005/07/13/7588.html#Feedback0http://www.aygfsteel.com/kuntao/comments/commentRss/7588.htmlhttp://www.aygfsteel.com/kuntao/services/trackbacks/7588.htmlps:from Thinking in Java chapter 4

Consider a class called Dog:

  1. The first time an object of type Dog is created (the constructor is actually a static method), or the first time a static method or static field of class Dog is accessed, the Java interpreter must locate Dog.class, which it does by searching through the classpath. 
  2. As Dog.class is loaded (creating a Class object, which you’ll learn about later), all of its static initializers are run. Thus, static initialization takes place only once, as the Class object is loaded for the first time. 
  3. When you create a new Dog( ), the construction process for a Dog object first allocates enough storage for a Dog object on the heap. 
  4. This storage is wiped to zero, automatically setting all the primitives in that Dog object to their default values (zero for numbers and the equivalent for boolean and char) and the references to null
  5. Any initializations that occur at the point of field definition are executed. 
  6. Constructors are executed. As you shall see in Chapter 6, this might actually involve a fair amount of activity, especially when inheritance is involved.


Kun Tao's Blog 2005-07-13 09:22 发表评论
]]>
վ֩ģ壺 | ˳| | | ֦| | ʼ| ½| ʲ| | Ϫ| | Ϫ| | ¹| ԫ| | °Ͷ| ˷| ƽ| | | | ɽ| ʯ| | | | | Ҧ| ɫ| ¬| | Ͻ| | ʡ| ɽ| | ֥| | |