??xml version="1.0" encoding="utf-8" standalone="yes"?>在线观看亚洲,日韩成人影音,一区国产精品视频http://www.aygfsteel.com/yglwxl/zh-cnSat, 17 May 2025 06:41:50 GMTSat, 17 May 2025 06:41:50 GMT60Create Struts 2 Application in Eclipse : HTTP Status 500 http://www.aygfsteel.com/yglwxl/archive/2012/04/21/375434.html九宝九宝Fri, 20 Apr 2012 18:41:00 GMThttp://www.aygfsteel.com/yglwxl/archive/2012/04/21/375434.htmlhttp://www.aygfsteel.com/yglwxl/comments/375434.htmlhttp://www.aygfsteel.com/yglwxl/archive/2012/04/21/375434.html#Feedback0http://www.aygfsteel.com/yglwxl/comments/commentRss/375434.htmlhttp://www.aygfsteel.com/yglwxl/services/trackbacks/375434.htmlhttp://viralpatel.net/blogs/2009/12/tutorial-create-struts-2-application-eclipse-example.html 

problem:

HTTP Status 500 

java.lang.NullPointerException 	
org.apache.struts2.impl.StrutsActionProxy.getErrorMessage(StrutsActionProxy.java:69)
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
resolve problem:
1. struts.xml should under src
2. in struts.xml:  
<action name="login" method="excute"
class="net.viralpatel.struts2.LoginAction">


九宝 2012-04-21 02:41 发表评论
]]>
How to check file properties through WMI command line (fw)http://www.aygfsteel.com/yglwxl/archive/2011/12/07/365818.html九宝九宝Wed, 07 Dec 2011 14:29:00 GMThttp://www.aygfsteel.com/yglwxl/archive/2011/12/07/365818.htmlhttp://www.aygfsteel.com/yglwxl/comments/365818.htmlhttp://www.aygfsteel.com/yglwxl/archive/2011/12/07/365818.html#Feedback0http://www.aygfsteel.com/yglwxl/comments/commentRss/365818.htmlhttp://www.aygfsteel.com/yglwxl/services/trackbacks/365818.htmlHow to check file properties through WMI command line24.Sep.2009 | by Gusac | Filed in: Articles, Tutorials

With the lack of Graphical Interface on Windows 2008 Core server there comes a need of performing a lot of task through command line. One of which is checking file properties like file version, path, product verision etc. Luckily we have a command that makes this task simple. On a side note, We can also run the same command on other operating systems like Windows Xp, 2003, vista.

Here is the command:
wmic datafile where name='c:\\windows\\system32\\notepad.exe'

Click here to view the enlarged screenshot

Notice that we have used two backslashes \\ in the file path. Also, notice that the path is enclosed in the single quotes.
The output will be confusing to read in command prompt window. To read and understand it better, we can take the output in text format and read it in notepad.

While doing so, please do NOT wrap the text.
wmic datafile where name='c:\\windows\\system32\\notepad.exe' > out.txt

Click here to view the enlarged screenshot

The output will reveal the file properties like Hidden, Path, Drive, Version Caption, Access rights etc.

To get one particular property of a file we need to modify the command a little bit. We need to use the GET Alias injunction to the command mentioned above. Let's say we want to check the version for the file notepad.exe. The command that is used for this is:
wmic datafile where name='c:\\windows\\system32\\notepad.exe' get version

Similarily, there is a list of properties that can be fetched through this command line. They are:

Access Rights
Caption
Class Name
Compressed
Compression Method
Computer System Class Name
Computer System Name
Creation Date
Current File Open Count
Description
Drive
Eight Dot Three File Name
Encrypted
Encryption Method
File Extension
File Name
File System Class Name
File System Name
File Type
Hidden
Install Date
Last Accessed
Last Modified
Manufacturer
Name
Path
Readable
Should Be Archived
Size
Status
System File
Version
Writeable



九宝 2011-12-07 22:29 发表评论
]]>
Windows Authentication <windowsAuthentication>http://www.aygfsteel.com/yglwxl/archive/2011/09/16/358838.html九宝九宝Fri, 16 Sep 2011 13:46:00 GMThttp://www.aygfsteel.com/yglwxl/archive/2011/09/16/358838.htmlhttp://www.aygfsteel.com/yglwxl/comments/358838.htmlhttp://www.aygfsteel.com/yglwxl/archive/2011/09/16/358838.html#Feedback0http://www.aygfsteel.com/yglwxl/comments/commentRss/358838.htmlhttp://www.aygfsteel.com/yglwxl/services/trackbacks/358838.htmlfrom http://www.iis.net/ConfigReference/system.webServer/security/authentication/windowsAuthentication

Overview

The <windowsAuthentication> element defines configuration settings for the Internet Information Services (IIS) 7 Windows authentication module. You can use Windows authentication when your IIS 7 server runs on a corporate network that is using Microsoft Active Directory service domain identities or other Windows accounts to identify users. Because of this, you can use Windows authentication whether or not your server is a member of an Active Directory domain.

Windows authentication (formerly named NTLM, and also referred to as Windows NT Challenge/Response authentication) is a secure form of authentication because the user name and password are hashed before being sent across the network. When you enable Windows authentication, the client browser sends a strongly hashed version of the password in a cryptographic exchange with your Web server.

Windows authentication supports two authentication protocols, Kerberos and NTLM, which are defined in the <providers> element. When you install and enable Windows authentication on IIS 7, the default protocol is Kerberos. The <windowsAuthentication> element can also contain a useKernelMode attribute that configures whether to use the kernel mode authentication feature that is new to Windows Server 2008.

Windows authentication is best suited for an intranet environment for the following reasons:

  • Client computers and Web servers are in the same domain.
  • Administrators can make sure that every client browser is Internet Explorer 2.0 or later.
  • HTTP proxy connections, which are not supported by NTLM, are not required.
  • Kerberos version 5 requires a connection to Active Directory, which is not feasible in an Internet environment.

New in IIS 7.5

The <extendedProtection> element was introduced in IIS 7.5, which allows you to configure the settings for the new extended protection features that have been integrated into Windows authentication.

Compatibility

Version Notes
IIS 7.5 The <extendedProtection> element was added in IIS 7.5.
IIS 7.0 The <windowsAuthentication> element was introduced in IIS 7.0.
IIS 6.0 The <windowsAuthentication> element replaces portions of the IIS 6.0 AuthType and AuthFlags metabase properties.

Setup

The default installation of IIS 7 does not include the Windows authentication role service. To use Windows authentication on IIS, you must install the role service, disable Anonymous authentication for your Web site or application, and then enable Windows authentication for the site or application.

Note: After you install the role service, IIS 7 commits the following configuration settings to the ApplicationHost.config file.

<windowsAuthentication enabled="false" />

Windows Server 2008 or Windows Server 2008 R2

  1. On the taskbar, click Start, point to Administrative Tools, and then click Server Manager.
  2. In the Server Manager hierarchy pane, expand Roles, and then click Web Server (IIS).
  3. In the Web Server (IIS) pane, scroll to the Role Services section, and then click Add Role Services.
  4. On the Select Role Services page of the Add Role Services Wizard, select Windows Authentication, and then click Next.
  5. On the Confirm Installation Selections page, click Install.
  6. On the Results page, click Close.

Windows Vista or Windows 7

  1. On the taskbar, click Start, and then click Control Panel.
  2. In Control Panel, click Programs and Features, and then click Turn Windows Features on or off.
  3. Expand Internet Information Services, then World Wide Web Services, then Security.
  4. Select Windows Authentication, and then click OK.

How To

How to enable Windows authentication for a Web site, Web application, or Web service

  1. Open Internet Information Services (IIS) Manager:
    • If you are using Windows Server 2008 or Windows Server 2008 R2:
      • On the taskbar, click Start, point to Administrative Tools, and then click Internet Information Services (IIS) Manager.
    • If you are using Windows Vista or Windows 7:
      • On the taskbar, click Start, and then click Control Panel.
      • Double-click Administrative Tools, and then double-click Internet Information Services (IIS) Manager.
  2. In the Connections pane, expand the server name, expand Sites, and then the site, application, or Web service for which you want to enable Windows authentication.
  3. Scroll to the Security section in the Home pane, and then double-click Authentication.
  4. In the Authentication pane, select Windows Authentication, and then click Enable in the Actions pane.

How to enable Extended Protection for Windows authentication

  1. Open Internet Information Services (IIS) Manager:
    • If you are using Windows Server 2008 or Windows Server 2008 R2:
      • On the taskbar, click Start, point to Administrative Tools, and then click Internet Information Services (IIS) Manager.
    • If you are using Windows Vista or Windows 7:
      • On the taskbar, click Start, and then click Control Panel.
      • Double-click Administrative Tools, and then double-click Internet Information Services (IIS) Manager.
  2. In the Connections pane, expand the server name, expand Sites, and then the site, application, or Web service for which you want to enable Extended Protection for Windows authentication.
  3. Scroll to the Security section in the Home pane, and then double-click Authentication.
  4. In the Authentication pane, select Windows Authentication.
  5. Click Enable in the Actions pane.
  6. Click Advanced Settings in the Actions pane.
  7. When the Advanced Settings dialog box appears, select one of the following options in the Extended Protection drop-down menu:
    • Select Accept if you want to enable extended protection while providing down-level support for clients that do not support extended protection.
    • Select Required if you want to enable extended protection without providing down-level support.
  8. Click OK to close the Advanced Settings dialog box.

Configuration

The <windowsAuthentication> element is configurable at the site, application, or virtual directory level in the ApplicationHost.config file.

Attributes

Attribute Description
authPersistNonNTLM Optional Boolean attribute.

Specifies whether IIS automatically reauthenticates every non-NTLM (for example, Kerberos) request, even those on the same connection. False enables multiple authentications for the same connections.

Note: A setting of true means that the client will be authenticated only once on the same connection. IIS will cache a token or ticket on the server for a TCP session that stays established.

The default is false.
authPersistSingleRequest Optional Boolean attribute.

Setting this flag to true specifies that authentication persists only for a single request on a connection. IIS resets the authentication at the end of each request, and forces reauthentication on the next request of the session.

The default value is false.
enabled Required Boolean attribute.

Specifies whether Windows authentication is enabled.

The default value is false.
useKernelMode Optional Boolean attribute.

Specifies whether Windows authentication is done in kernel mode. True specifies that Windows authentication uses kernel mode.

Kernel-mode authentication may improve authentication performance and prevent authentication problems with application pools that are configured to use a custom identity.

As a best practice, do not disable this setting if you use Kerberos authentication and have a custom identity on the application pool.

The default is true.

Child Elements

Element Description
extendedProtection Optional element.

Specifies extended protection options for Windows authentication.

Note: This element was added in IIS 7.5.
providers Optional element.

Specifies security support providers used for Windows authentication.

Configuration Sample

The following default <windowsAuthentication> element is configured at the root ApplicationHost.config file in IIS 7.0, and disables Windows authentication by default. It also defines the two Windows authentication providers for IIS 7.0.

<windowsAuthentication enabled="false">
   <providers>
      <add value="Negotiate" />
      <add value="NTLM" />
   </providers>
</windowsAuthentication>

The following example enables Windows authentication and disables Anonymous authentication for a Web site named Contoso.

<location path="Contoso">
   <system.webServer>
      <security>
         <authentication>
            <anonymousAuthentication enabled="false" />
            <windowsAuthentication enabled="true" />
         </authentication>
      </security>
   </system.webServer>
</location>

Sample Code

The following examples disable Anonymous authentication for a site named Contoso, then enable Windows authentication for the site.

AppCmd.exe

appcmd.exe set config "Contoso" -section:system.webServer/security/authentication/anonymousAuthentication /enabled:"False" /commit:apphost

appcmd.exe set config "Contoso" -section:system.webServer/security/authentication/windowsAuthentication /enabled:"True" /commit:apphost

Note: You must be sure to set the commit parameter to apphost when you use AppCmd.exe to configure these settings. This commits the configuration settings to the appropriate location section in the ApplicationHost.config file.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample {

   private static void Main() {

      using(ServerManager serverManager = new ServerManager()) { 
         Configuration config = serverManager.GetApplicationHostConfiguration();

         ConfigurationSection anonymousAuthenticationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication", "Contoso");
         anonymousAuthenticationSection["enabled"] = false;

         ConfigurationSection windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Contoso");
         windowsAuthenticationSection["enabled"] = true;

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration

      Dim anonymousAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication", "Contoso")
      anonymousAuthenticationSection("enabled") = False

      Dim windowsAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Contoso")
      windowsAuthenticationSection("enabled") = True

      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var anonymousAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/anonymousAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso");
anonymousAuthenticationSection.Properties.Item("enabled").Value = false;

var windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso");
windowsAuthenticationSection.Properties.Item("enabled").Value = true;

adminManager.CommitChanges();

VBScript

Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set anonymousAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/anonymousAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso")
anonymousAuthenticationSection.Properties.Item("enabled").Value = False

Set windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso")
windowsAuthenticationSection.Properties.Item("enabled").Value = True

adminManager.CommitChanges()


九宝 2011-09-16 21:46 发表评论
]]>
How To Determine if Your Computer Is 32-Bit or 64-Bit(forward)http://www.aygfsteel.com/yglwxl/archive/2011/09/16/358751.html九宝九宝Thu, 15 Sep 2011 19:34:00 GMThttp://www.aygfsteel.com/yglwxl/archive/2011/09/16/358751.htmlhttp://www.aygfsteel.com/yglwxl/comments/358751.htmlhttp://www.aygfsteel.com/yglwxl/archive/2011/09/16/358751.html#Feedback0http://www.aygfsteel.com/yglwxl/comments/commentRss/358751.htmlhttp://www.aygfsteel.com/yglwxl/services/trackbacks/358751.htmlhow to check window version

run: Winver


Here's How:
  1. Open the System Information

    Open the Start menu, and click on Programs -> Accessories -> System Tools -> System Information

     

  2. Look in the System Summary

    The System Information tool will display detailed information about your Windows operating system. Once opened it will show the "System Summary" – it’s an overview of your computer and operating system.

  3. Look for the System Type Item

    On the right hand side of the window you will see a list of items. Look for the item called "System Type".

    The value of this item will tell you whether your computer is 32-bit or 64-bit:

    • x86-based PC: It’s a 32-bit computer.
    • x64-based PC: It’s a 64-bit computer.

     



九宝 2011-09-16 03:34 发表评论
]]>
ContentProvider分析http://www.aygfsteel.com/yglwxl/archive/2011/02/18/344618.html九宝九宝Fri, 18 Feb 2011 06:51:00 GMThttp://www.aygfsteel.com/yglwxl/archive/2011/02/18/344618.htmlhttp://www.aygfsteel.com/yglwxl/comments/344618.htmlhttp://www.aygfsteel.com/yglwxl/archive/2011/02/18/344618.html#Feedback0http://www.aygfsteel.com/yglwxl/comments/commentRss/344618.htmlhttp://www.aygfsteel.com/yglwxl/services/trackbacks/344618.html阅读全文

九宝 2011-02-18 14:51 发表评论
]]>
GestureDetector手势识别c?(?http://www.aygfsteel.com/yglwxl/archive/2011/02/16/344449.html九宝九宝Wed, 16 Feb 2011 07:03:00 GMThttp://www.aygfsteel.com/yglwxl/archive/2011/02/16/344449.htmlhttp://www.aygfsteel.com/yglwxl/comments/344449.htmlhttp://www.aygfsteel.com/yglwxl/archive/2011/02/16/344449.html#Feedback0http://www.aygfsteel.com/yglwxl/comments/commentRss/344449.htmlhttp://www.aygfsteel.com/yglwxl/services/trackbacks/344449.htmlView是在onTouchEvent(MotionEvent event)里对用户的动作做了一定的分析Q从而通知我们是发生了点击q是长按{事件?/span>

我们需要创Z?/span>GestureDetector的对象,传入listener对象Qview接收到的onTouchEvent中将event传给GestureDetectorq行分析Q?/span>listener会回调给我们相应的动作。其?/span>GestureDetector.SimpleOnGestureListenerQ?/span>Framework帮我们简化了Q是实现了上面提到的OnGestureListener?/span>OnDoubleTapListener两个接口的类Q我们只需要承它q写其中我们关心的回调卛_?/span>

Q那么,q个cd何用呢Q以下是使用该类的一个范例:

private GestureDetector mGestureDetector;

@Override

public void onCreate(Bundle savedInstanceState) {


  super.onCreate(savedInstanceState);


  mGestureDetector = new GestureDetector(this, new MyGestureListener());


}


@Override

public boolean onTouchEvent(MotionEvent event) {

 return mGestureDetector.onTouchEvent(event); 

/*  有关上面?onTouchEventҎQ我们可以直接判断MotionEvent的类型,

    对于手势Ud仅仅捕获ACTION_MOVE卛_Q?/p>

    我们通过参数MotionEvent e1, MotionEvent e2,float distanceX, float distanceY可以获取操作变化?/p>

   比如 distanceX > 0 向右边移动,distanceX < 0 则向左边QdistanceY > 0 向上滚动Q?distanceY < 0 向下滚动?/span>

*/

}


class MyGestureListener extends GestureDetector.SimpleOnGestureListener{

  @Override

  public boolean onSingleTapUp(MotionEvent ev) {

    Log.d("onSingleTapUp",ev.toString());

    return true;

  }


  @Override

  public void onShowPress(MotionEvent ev) {

    Log.d("onShowPress",ev.toString());

  }


  @Override

  public void onLongPress(MotionEvent ev) {

    Log.d("onLongPress",ev.toString());

  }

}

 


更多的回调消息,方便的对用户的动作进行响?/span>

public interface OnGestureListener {

                // Touch down时触?/span>, e?/span>down时的MotionEvent

                boolean onDown(MotionEvent e);

                // ?/span>Touch down之后一定时_115msQ触发,e?/span>down时的MotionEvent

                void onShowPress(MotionEvent e);

                // Touch up时触发,e?/span>up时的MotionEvent

                boolean onSingleTapUp(MotionEvent e);

                // 滑动时触发,e1?/span>down时的MotionEventQ?/span>e2?/span>move时的MotionEvent

                boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);

                // ?/span>Touch down之后一定时_500msQ触发,e?/span>down时的MotionEvent

                void onLongPress(MotionEvent e);

                // 滑动一D距,up时触发,e1?/span>down时的MotionEventQ?/span>e2?/span>up时的MotionEvent

                boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY);

} 

public interface OnDoubleTapListener {

                // 完成一ơ单击,q确定没有二M件后触发Q?/span>300msQ,e?/span>down时的MotionEvent

                boolean onSingleTapConfirmed(MotionEvent e);

                // W二ơ单?/span>down时触发,e为第一?/span>down时的MotionEvent

                boolean onDoubleTap(MotionEvent e);

                // W二ơ单?/span>down,move?/span>up旉触发Q?/span>eZ同时Z?/span>MotionEvent

                boolean onDoubleTapEvent(MotionEvent e);

}

boolean  onDoubleTap(MotionEvent e)
解释Q双ȝW二下Touch down时触?/div>
boolean  onDoubleTapEvent(MotionEvent e)
解释Q双ȝW二下Touch down和up都会触发Q可用e.getAction()区分?/div>
boolean  onDown(MotionEvent e)
解释QTouch down时触?/div>
boolean  onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
解释QTouch了滑动一点距dQup时触发?/div>
void  onLongPress(MotionEvent e)
解释QTouch了不Ud一直Touch down时触?/div>
boolean  onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
解释QTouch了滑动时触发?/div>
void  onShowPress(MotionEvent e)
解释QTouch了还没有滑动时触?/div>
Q与onDownQonLongPress比较,onDown只要Touch down一定立刻触发。而Touchdown后过一会没有滑动先触发onShowPress再是onLongPress?/div>
所以Touchdown后一直不滑动QonDown->onShowPress->onLongPressq个序触发?/div>
boolean  onSingleTapConfirmed(MotionEvent e)
boolean  onSingleTapUp(MotionEvent e)
解释Q上面这两个函数都是在touch down后又没有滑动QonScrollQ,又没有长按(onLongPressQ,然后Touchup时触发?/div>
点击一下非常快的(不滑动)TouchupQ?/div>
onDown->onSingleTapUp->onSingleTapConfirmed
点击一下稍微慢点的Q不滑动QTouchupQ?/div>
onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed




九宝 2011-02-16 15:03 发表评论
]]>onNewIntent 什么时候调?/title><link>http://www.aygfsteel.com/yglwxl/archive/2011/02/14/344254.html</link><dc:creator>九宝</dc:creator><author>九宝</author><pubDate>Mon, 14 Feb 2011 03:18:00 GMT</pubDate><guid>http://www.aygfsteel.com/yglwxl/archive/2011/02/14/344254.html</guid><wfw:comment>http://www.aygfsteel.com/yglwxl/comments/344254.html</wfw:comment><comments>http://www.aygfsteel.com/yglwxl/archive/2011/02/14/344254.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yglwxl/comments/commentRss/344254.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yglwxl/services/trackbacks/344254.html</trackback:ping><description><![CDATA[<span style="color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; "> <div><span style="color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; "><span style="font-family: arial, sans-serif; font-size: 13px; line-height: normal; "> <h4 class="jd-details-title" style="margin-top: 1.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 3px; padding-right: 95px; padding-bottom: 3px; padding-left: 3px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 1.1em; background-color: #e2e2e2; color: #222222; "><span id="wmqeeuq" class="normal" style="font-size: 0.9em; font-weight: normal; ">protected void </span><span id="wmqeeuq" class="sympad" style="margin-right: 2px; ">onNewIntent</span> <span id="wmqeeuq" class="normal" style="font-size: 0.9em; font-weight: normal; ">(<a style="color: #006699; ">Intent</a> intent)</span></h4> <div id="wmqeeuq" class="api-level" style="margin-top: -25px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 7px; padding-bottom: 0px; padding-left: 7px; border-style: initial; border-color: initial; font-size: 0.8em; font-weight: normal; color: #999999; float: right; ">Since: <a style="color: #999999; text-decoration: none; ">API Level 1</a></div> <div id="wmqeeuq" class="jd-details-descr" style="margin-top: 0.5em; margin-right: 0.25em; margin-bottom: 0.5em; margin-left: 0.25em; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; "> <div id="wmqeeuq" class="jd-tagdata jd-tagdescr" style="margin-top: 0.25em; margin-right: 0px; margin-bottom: 0.75em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; line-height: 1em; "> <p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.3em; ">This is called for activities that set launchMode to "singleTop" in their package, or if a client used the<code style="color: #007000; font-family: monospace; line-height: 1em; "><a style="color: #006699; ">FLAG_ACTIVITY_SINGLE_TOP</a></code> flag when calling <code style="color: #007000; font-family: monospace; line-height: 1em; "><a style="color: #006699; ">startActivity(Intent)</a></code>. In either case, when the activity is re-launched while at the top of the activity stack instead of a new instance of the activity being started, onNewIntent() will be called on the existing instance with the Intent that was used to re-launch it.</p> <p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.3em; ">An activity will always be paused before receiving a new intent, so you can count on <code style="color: #007000; font-family: monospace; line-height: 1em; "><a style="color: #006699; ">onResume()</a></code> being called after this method.</p> <p style="margin-top: 0.5em; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 1.3em; ">Note that <code style="color: #007000; font-family: monospace; line-height: 1em; "><a style="color: #006699; ">getIntent()</a></code> still returns the original Intent. You can use <code style="color: #007000; font-family: monospace; line-height: 1em; "><a style="color: #006699; ">setIntent(Intent)</a></code> to update it to this new Intent.</p> </div> </div> </span></span></div> <div><span style="color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; "><br /> </span></div> 在IntentActivity中重写下列方法:onCreate onStart onRestart  onResume  onPause onStop onDestroy  onNewIntent<br style="line-height: 22px; " /> 一、其他应用发IntentQ执行下列方法:<br style="line-height: 22px; " /> I/@@@philn(12410): onCreate<br style="line-height: 22px; " /> I/@@@philn(12410): onStart<br style="line-height: 22px; " /> I/@@@philn(12410): onResume<br style="line-height: 22px; " /> <br style="line-height: 22px; " /> 发Intent的方?<br style="line-height: 22px; " /> Uri uri = Uri.parse("philn://blog.163.com");<br style="line-height: 22px; " /> Intent it = new Intent(Intent.ACTION_VIEW, uri);    <br style="line-height: 22px; " /> startActivity(it);<br style="line-height: 22px; " /> <br style="line-height: 22px; " /> 二、接收Intent声明Q?br style="line-height: 22px; " />  <activity android:name=".IntentActivity" android:launchMode="singleTask"<br style="line-height: 22px; " />                   android:label="@string/testname"><br style="line-height: 22px; " />              <intent-filter><br style="line-height: 22px; " />                 <action android:name="android.intent.action.VIEW" /><br style="line-height: 22px; " />                 <category android:name="android.intent.category.DEFAULT" /><br style="line-height: 22px; " />                 <category android:name="android.intent.category.BROWSABLE" /><br style="line-height: 22px; " />                 <data android:scheme="philn"/><br style="line-height: 22px; " />             </intent-filter><br style="line-height: 22px; " />   </activity><br style="line-height: 22px; " /> <br style="line-height: 22px; " /> 三、如果IntentActivity处于d栈的端Q也是说之前打开q的ActivityQ现在处?br style="line-height: 22px; " /> I/@@@philn(12410): onPause<br style="line-height: 22px; " /> I/@@@philn(12410): onStop 状态的?br style="line-height: 22px; " /> 其他应用再发送Intent的话Q执行顺序ؓQ?br style="line-height: 22px; " /> I/@@@philn(12410): onNewIntent<br style="line-height: 22px; " /> I/@@@philn(12410): onRestart<br style="line-height: 22px; " /> I/@@@philn(12410): onStart<br style="line-height: 22px; " /> I/@@@philn(12410): onResume</span> <img src ="http://www.aygfsteel.com/yglwxl/aggbug/344254.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yglwxl/" target="_blank">九宝</a> 2011-02-14 11:18 <a href="http://www.aygfsteel.com/yglwxl/archive/2011/02/14/344254.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Observer模式在J2EE中的实现 [http://35java.com/zhibo/forum.php?mod=viewthread&tid=108&extra=page%3D3]http://www.aygfsteel.com/yglwxl/archive/2011/02/13/344203.html九宝九宝Sun, 13 Feb 2011 11:24:00 GMThttp://www.aygfsteel.com/yglwxl/archive/2011/02/13/344203.htmlhttp://www.aygfsteel.com/yglwxl/comments/344203.htmlhttp://www.aygfsteel.com/yglwxl/archive/2011/02/13/344203.html#Feedback0http://www.aygfsteel.com/yglwxl/comments/commentRss/344203.htmlhttp://www.aygfsteel.com/yglwxl/services/trackbacks/344203.html引言Q?/span>
            设计模式是经验的文档化。它是对被用来在特定场景下解决一般设计问题的cd怺通信的对象的描述。更通俗的来_它是一个问?解决Ҏ寏V一旦我们掌握了设计模式Q就{于拥有了一支强有力的专安伍。它甚至能够佉K向对象的新手利用前h的经验找责明的cd对象Q从而获得优雅的解决Ҏ。由于设计模式也是重构的目标Q如果在设计的初期适当地引入设计模式,可以减少重构的工作量?/span>
      但是Q我们也不能陷入模式的陷阱,Z使用模式而去套模式,那样会陷入Ş式主义。我们在使用模式的时候,一定要注意模式的意图(intentQ,而不要过多的d注模式的实现l节Q因些实现细节在特定情况下,可能会发生一些改变。不要顽固地认ؓ设计模式一书中的类图或实现代码׃表了模式本n?/span>
      下面Q我们来讨论一下ؓ什么要在分布式、多层系l中使用Observer模式?/span>
      

多层体系l构Qmulti-tier architectureQ:
            三层体系l构是多层体pȝ构中最单的一U,它一般包括:
      
  • 表示?presentation)Q窗口、报?
  • 业务逻辑?business logic)Q管理业务过E的d和规则。它又可以细分ؓ领域对象层(代表领域概念Q和服务层(提供数据库交互、安全性、打印报表)?/li>
  • 存储?storage)Q持久化存储机制。如数据库服务器{?br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
              
图一Q三层体pȝ?/strong>
              
      而Java 2q_企业版(J2EEQ是一U利用Java 2q_来简化诸多与多企业解决Ҏ的开发、部|和理相关的复杂问题的体系l构。它是开攄、基于标准的q_Q用以开发、部|和理N层结构、面向Web的,以服务器Z心的企业U应用?/span>
      Z支持领域对象的复用,q且佉K域对象的接口变更所带来的媄响最化。我们将领域层(模型Q和表示层(视图Q相分离?/span>
      采用模型Q视图模式的意义在于Q?/span>
      
  • 支持聚合度更高的模型定义Q模型的定义可以集中在领域q程的定义,而不是图形界面上?/li>
  • 允许模型和用户界面q行开发?/li>
  • 使用L面的需求变化对领域层所造成的媄响最化?/li>
  • 允许建立与一个现有的领域层对象相q接的新视图Q同时不影响领域层?/li>
  • 允许一个模型同时有多个视图Q例如用SVG和表根{?/li>
  • 允许模型层独立于用户界面层执行?br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; " />
      而这恰恰与Observer模式的意囄d。因此我们有必要跨层来实现Observer模式?/span>
      其实Q在应用中更多的是采用MVC框架来架构整个企业应用的。在MVC框架中,Model和View之间存在着依赖关系Q是Observer模式的典型应用。当然MVC框架q包括其它模式如Composite模式和Strategy模式。在J2EEq_中,我们可以把Web TierQ包括Jsp和servelet和JavaBeanQ看作是表示层,EJB Tier看作是领域层。而controller可能跨距Web Tier?EJB Tier?/span>
      在Javacd中采用Java.util.ObservablecdJava.util.Observer接口来实现Observer模式Q它们在单个的Java VM.中运行的很好Q但如果惛_EJB中用它们就会有一些问题。这正如我们引言中提到的Q模式的具体实现在特定情况下Q可能会发生一些改变?/span>
      

g递还是远E引用传递?
                    g递:        
在Java RMI中要求所有的参数和返回类型是JAVA的基本类型或实现Java.io.Serilizable的对象。串行化对象通过g递(又名拯传递)Q而不是引用传递,q意味着在某一层中串行化对象的更ƈ不自动媄响到其它的对象?nbsp;     
              q程引用传递:        
对于EJB对象而言Q它׃个接口(home接口和remote接口Q和一个类l成。容器会Ҏejb规范来生成实C面两个接口的c(我们分别UCؓxxxEJBHome对象和xxxEjbObject对象Q。在较多的容器的实现Ҏ中,xxxEJBHome对象使用了factory模式来创建xxxEjbObject对象QxxxEjbObject对象则采用proxy模式Q作为xxxBean的代理类。在生成以上两个对象的同Ӟ容器会从部v文g中读取关于安全、事务、持久性等服务q在xxxEjbObject对象和xxxEJBHome对象中添加以上服务的代码。而且xxxEJBHome对象和xxxEjbObject对象都是分布式对象,我们在此只讨论xxxEjbObject对象。所谓分布式对象Q从本质上来Ԍ分ؓ3个部分:object server、skeleton、stub。其中object server和skeleton位于服务器端Q而stub位于客户端。Object server负责实现业务逻辑Qskeleton负责marshal和unmarshalҎ{֐?nbsp;     
              
图二Q分布式对象
              
      昄QEJB的客P调用EJB的对象)可以是Q何对象,包括EJB和一般的Javacȝx用Q何语a写的corba客户端?/span>
      从EJB的客戯角来看的话,我们只能看到一个home接口、一个remote接口Q对于实体bean的话Q还可以看见一个主键类Q而beancd客户是不可见的)。但我们从上面的Q我们可以知道,对于remote接口中地Ҏ调用Q实际上是多态地调用XXX_StubcR即XXX_Stub对象对客户具有可见性(但这U可见性是透明的,卛_户不知道q种可见性的存在Q。由于,XXX_Stub对象和Object Server实现了相同的接口Qƈ且Object server真正实现了业务逻辑。所以,当在客户端调用XXX_Stub对象的方法时候,XXX_Stub对象通过socket通信机制方法签名传lXXX_Skeleton对象QXXX_Skeleton对象在去委托Object Server完成业务处理逻辑。因此,Object Server本n发生了改变。我们称XXX_Stub对象是Object Server对象的远E引用,q认为当分布式对象作为参C递的时候,是通过引用传递的Q会产生副作?/span>

九宝 2011-02-13 19:24 发表评论
]]>
RMI的定??http://blog.csdn.net/ocean181/archive/2010/09/02/5857273.aspxhttp://www.aygfsteel.com/yglwxl/archive/2011/02/13/344202.html九宝九宝Sun, 13 Feb 2011 10:46:00 GMThttp://www.aygfsteel.com/yglwxl/archive/2011/02/13/344202.htmlhttp://www.aygfsteel.com/yglwxl/comments/344202.htmlhttp://www.aygfsteel.com/yglwxl/archive/2011/02/13/344202.html#Feedback0http://www.aygfsteel.com/yglwxl/comments/commentRss/344202.htmlhttp://www.aygfsteel.com/yglwxl/services/trackbacks/344202.htmlRMI的定?/h2>

Java RMI QRemote Method Invocation q程Ҏ调用Q是用Java?a class="channel_keylink" target="_blank" style="text-decoration: none; color: #336601; ">JDK1.1中实现的Q它大大增强了Java开发分布式应用的能力。Java作ؓ一U风靡一时的|络开发语aQ其巨大的威力就体现在它强大的开发分布式|络应用的能力上Q而RMI是开发百分之癄Java的网l分布式应用pȝ的核心解x案之一。其实它可以被看作是RPC的Java版本。但是传l?a class="channel_keylink" target="_blank" style="text-decoration: none; color: #336601; ">RPCq不能很好地应用于分布式对象pȝ。而Java RMI 则支持存储于不同地址I间?a class="channel_keylink" target="_blank" style="text-decoration: none; color: #336601; ">E序U对象之间彼此进行通信Q实现远E对象之间的无缝q程调用?/p>

RMI目前使用Javaq程消息交换协议JRMPQJava Remote Messaging ProtocolQ进行通信。JRMP是专为Java的远E对象制定的协议。因此,Java RMIhJava?#8220;Write Once,Run Anywhere”的优点,是分布式应用pȝ的百分之癄Java解决Ҏ。用Java RMI开发的应用pȝ可以部v在Q何支?a class="channel_keylink" target="_blank" style="text-decoration: none; color: #336601; ">JREQJava Run Environment JavaQ运?a class="channel_keylink" target="_blank" style="text-decoration: none; color: #336601; ">环境Q的q_上。但׃JRMP是专为Java对象制定的,因此QRMI对于用非Java语言开发的应用pȝ的支持不뀂不能与用非Java语言书写的对象进行通信?/p>

RMI?a class="channel_keylink" target="_blank" style="text-decoration: none; color: #336601; ">CORBA的关p?/h2>

RMI 和CORBA常被视ؓ怺竞争?a class="channel_keylink" target="_blank" style="text-decoration: none; color: #336601; ">技?/a>Q因Z者都提供对远E分布式对象的透明讉K。但q两U技术实际上是相互补充的Q一者的长处正好可以弥补另一者的短处。RMI ?CORBA 的结合生了 RMI-IIOPQRMI-IIOP 是企?a class="channel_keylink" target="_blank" style="text-decoration: none; color: #336601; ">服务?/a>?Java 开发的基础

1997 q_IBM ?Sun Microsystems启动了一Ҏ在促q?Java 作ؓ企业开发技术的发展的合作计划。两家公司特别着力于如何?Java 用作服务器端语言Q生成可以结合进现有体系l构的企业代码。所需要的是一U远E传输技术,它兼?Java ?RMIQRemote Method InvocationQ远E方法调用)较少?a class="channel_keylink" target="_blank" style="text-decoration: none; color: #336601; ">资源占用量和更成熟的 CORBAQCommon Object Request Broker ArchitectureQ公共对象请求代理体pȝ构)技术的健壮性。出于这一需要,RMI-IIOP问世了,它帮助将 Java 语言推向了目前服务器端企业开发的L语言的领先地位?/p>

RMI的组?/h2>

一个正常工作的RMIpȝ׃面几个部分组成:

1、远E服务的接口定义

2、远E服务接口的具体实现

3、桩QStubQ和框架QSkeletonQ文?/p>

4、一个运行远E服务的服务?/p>

5、一个RMI命名服务Q它允许客户端去发现q个q程服务

6、类文g的提供者(一个HTTP或者FTP服务器)

7、一个需要这个远E服务的客户端程?/p>

RMI的实?/h2>

下面我们一步一步徏立一个简单的RMIpȝ。首先在你的机器里徏立一个新的文件夹Q以便放|我们创建的文gQؓ了简单v见,我们只用一个文件夹存放客户端和服务端代码,q且在同一个目录下q行服务端和客户端?br />
如果所有的RMI文g都已l设计好了,那么你需要下面的几个步骤ȝ成你的系l:

1?nbsp;  ~写q且~译接口的Java代码
2?nbsp;  ~写q且~译接口实现的Java代码
3?nbsp;  从接口实现类中生?Stub ?Skeleton cL?br /> 4?nbsp;  ~写q程服务的主q行E序
5?nbsp;  ~写RMI的客LE序
6?nbsp;  安装q且q行RMIpȝ

1、接?br />
W一步就是徏立和~译服务接口的Java代码。这个接口定义了所有的提供q程服务的功能,下面是源E序Q?br />
   1. //Calculator.java
   2. //define the interface
   3. import java.rmi.Remote;
   4.
   5. public interface Calculator extends Remote
   6. {
   7.     public long add(long a, long b)
   8.         throws java.rmi.RemoteException;
   9.
  10.     public long sub(long a, long b)
  11.         throws java.rmi.RemoteException;
  12.
  13.     public long mul(long a, long b)
  14.         throws java.rmi.RemoteException;
  15.
  16.     public long div(long a, long b)
  17.         throws java.rmi.RemoteException;
  18. }


注意Q这个接口承自RemoteQ每一个定义的Ҏ都必LZ个RemoteException异常对象?br />
建立q个文gQ把它存攑֜刚才的目录下Qƈ且编译?br />
>javac Calculator.java

2、接口的具体实现

下一步,我们p写远E服务的具体实现Q这是一个CalculatorImplcLӞ

   1. //CalculatorImpl.java
   2. //Implementation
   3. import java.rmi.server.UnicastRemoteObject;
   4.
   5. public class CalculatorImpl extends UnicastRemoteObject implements Calculator
   6. {
   7.
   8.     // q个实现必须有一个显式的构造函敎ͼq且要抛Z个RemoteException异常
   9.     public CalculatorImpl()
  10.         throws java.rmi.RemoteException {
  11.         super();
  12.      }
  13.
  14.     public long add(long a, long b)
  15.         throws java.rmi.RemoteException {
  16.         return a + b;
  17.      }
  18.
  19.     public long sub(long a, long b)
  20.         throws java.rmi.RemoteException {
  21.         return a - b;
  22.      }
  23.
  24.     public long mul(long a, long b)
  25.         throws java.rmi.RemoteException {
  26.         return a * b;
  27.      }
  28.
  29.     public long div(long a, long b)
  30.         throws java.rmi.RemoteException {
  31.         return a / b;
  32.      }
  33. }


同样的,把这个文件保存在你的目录里然后编译他?br />
q个实现cM用了UnicastRemoteObject去联接RMIpȝ。在我们的例子中Q我们是直接的从UnicastRemoteObject q个cMl承的,事实上ƈ不一定要q样做,如果一个类不是从UnicastRmeoteObject上承,那必M用它的exportObject() Ҏ去联接到RMI?br />
如果一个类l承自UnicastRemoteObjectQ那么它必须提供一个构造函数ƈ且声明抛Z个RemoteException对象。当q个构造函数调用了super()Q它久激zUnicastRemoteObject中的代码完成RMI的连接和q程对象的初始化?br />
3、Stubs 和Skeletons

下一步就是要使用RMI~译器rmic来生成桩和框架文Ӟq个~译q行在远E服务实现类文g上?br />
>rmic CalculatorImpl

在你的目录下q行上面的命令,成功执行完上面的命o你可以发C个Calculator_stub.class文gQ如果你是用的Java2SDKQ那么你q可以发现Calculator_Skel.class文g?br />
4、主机服务器

q程RMI服务必须是在一个服务器中运行的。CalculatorServercL一个非常简单的服务器?br />
   1. //CalculatorServer.java
   2. import java.rmi.Naming;
   3.
   4. public class CalculatorServer {
   5.
   6.    public CalculatorServer() {
   7.      try {
   8.         Calculator c = new CalculatorImpl();
   9.        Naming.rebind("rmi://localhost:1099/CalculatorService", c);
  10.       } catch (Exception e) {
  11.        System.out.println("Trouble: " + e);
  12.       }
  13.     }
  14.
  15.    public static void main(String args[]) {
  16.      new CalculatorServer();
  17.     }
  18. }


建立q个服务器程序,然后保存C的目录下Qƈ且编译它?br />
5、客L

客户端源代码如下Q?br />
   //CalculatorClient.java
   
    import java.rmi.Naming;
    import java.rmi.RemoteException;
    import java.net.MalformedURLException;
   import java.rmi.NotBoundException;
   
   public class CalculatorClient {
   
       public static void main(String[] args) {
         try {
             Calculator c = (Calculator)
                              Naming.lookup(
                    "rmi://localhost
                            /CalculatorService");
               System.out.println( c.sub(4, 3) );
            System.out.println( c.add(4, 5) );
               System.out.println( c.mul(3, 6) );
              System.out.println( c.div(9, 3) );
            }
           catch (MalformedURLException murle) {
               System.out.println();
              System.out.println(
                 "MalformedURLException");
               System.out.println(murle);
            }
           catch (RemoteException re) {
              System.out.println();
               System.out.println(
                          "RemoteException");
               System.out.println(re);
           }
          catch (NotBoundException nbe) {
              System.out.println();
               System.out.println(
                          "NotBoundException");
               System.out.println(nbe);
            }
           catch (
               java.lang.ArithmeticException
                                         ae) {
              System.out.println();
              System.out.println(
               "java.lang.ArithmeticException");
             System.out.println(ae);
            }
       }
   }

保存q个客户端程序到你的目录下(注意q个目录是一开始徏立那个,所有的我们的文仉在那个目录下Q,q且~译他?br />
6、运行RMIpȝ

现在我们建立了所有运行这个简单RMIpȝ所需的文Ӟ现在我们l于可以q行q个RMIpȝ啦!来n受吧?br />
我们是在命o控制Cq行q个pȝ的,你必d启三个控制台H口Q一个运行服务器Q一个运行客LQ还有一个运行RMIRegistry?br />
首先q行注册E序RMIRegistryQ你必须在包含你刚写的类的那么目录下q行q个注册E序?br />
>rmiregistry

好,q个命o成功的话Q注册程序已l开始运行了Q不要管他,现在切换到另外一个控制台Q在W二个控制台里,我们q行服务器CalculatorServiceQ因为RMI的安全机制将在服务端发生作用,所以你必须增加一条安全策略。以下是对应安全{略的例?br /> grant {
permission java.security.AllPermission "", "";
};

注意:q是一条最单的安全{略,它允怓Q何h做Q何事,对于你的更加关键性的应用,你必L定更加详l安全策略?br />
现在Zq行服务端,你需要除客户c?CalculatorClient.class)之外的所有的cL件。确认安全策略在policy.txt文g之后,使用如下命o来运行服务器?br />
> java -Djava.security.policy=policy.txt CalculatorServer

q个服务器就开始工作了Q把接口的实现加载到内存{待客户端的联接。好现在切换到第三个控制収ͼ启动我们的客L?br />
Z在其他的机器q行客户端程序你需要一个远E接?Calculator.class) 和一个stub(CalculatorImpl_Stub.class)?使用如下命oq行客户?br />
> java -Djava.security.policy=policy.txt CalculatorClient

如果所有的q些都成功运行,你应该看C面的输出Q?br /> 1
9
18
3

如果你看C上面的输出,恭喜你,你成功了Q你已经成功的创Z一个RMIpȝQƈ且他正工作了。即使你q行在同一个计机上,RMIq是使用了你的网l堆栈和TCP/IP去进行通讯Qƈ且是q行在三个不同的Java虚拟Z。这已经是一个完整的RMIpȝ?/p>

九宝 2011-02-13 18:46 发表评论
]]>JavaBean PropertyChange 之设计模式Observer(?http://www.aygfsteel.com/yglwxl/archive/2011/02/13/344201.html九宝九宝Sun, 13 Feb 2011 10:26:00 GMThttp://www.aygfsteel.com/yglwxl/archive/2011/02/13/344201.htmlhttp://www.aygfsteel.com/yglwxl/comments/344201.htmlhttp://www.aygfsteel.com/yglwxl/archive/2011/02/13/344201.html#Feedback0http://www.aygfsteel.com/yglwxl/comments/commentRss/344201.htmlhttp://www.aygfsteel.com/yglwxl/services/trackbacks/344201.html阅读全文

九宝 2011-02-13 18:26 发表评论
]]>
վ֩ģ壺 ̩| | ۰| ̩| ͭɽ| ¡| | °Ͷ| | ̳| ɽ| ̫| | Զ| Ӣɳ| | ƽ| ɽ| | ˮ| | | | ػʵ| ɽ| | | | ɽ| | ֹ| | ˮ| | | | Ͽ| | ɽ| | Ϫ|