ÈÕÀú
| |||||||||
| ÈÕ | Ò» | ¶þ | Èý | ËÄ | Îå | Áù | |||
| 1 | 2 | 3 | 4 | 5 | 6 | ||||
| 7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
| 14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
| 21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
| 28 | 29 | 30 | |||||||
ËÑË÷±êÌâ
×îÐÂÀ´¿Í
×îÐÂÆÀÂÛ
ͳ¼ÆÐÅÏ¢
- ·ÃÎÊÁ¿: 1421
- ÈÕÖ¾Êý: 27
- ÊéÇ©Êý: 3
- ½¨Á¢Ê±¼ä: 2008-04-03
- ¸üÐÂʱ¼ä: 2008-08-05
ÎÒµÄ×îÐÂÈÕÖ¾
-
SUDO
2008-8-05
linuxϵͳ¹ÜÀíÖ¸Áî
sudoÊÇÔÊÐíϵͳ¹ÜÀíÔ±ÈÃÆÕͨÓû§Ö´ÐÐһЩ»òÕßÈ«²¿µÄrootÃüÁîµÄÒ»¸ö¹¤¾ß£¬Èçhalt£¬reboot£¬suµÈµÈ¡£ÕâÑù²»½ö¼õÉÙÁËrootÓû§µÄµÇ½ ºÍ¹ÜÀíʱ¼ä£¬Í¬ÑùÒ²Ìá¸ßÁ˰²È«ÐÔ¡£Sudo²»ÊǶÔshellµÄÒ»¸ö´úÌæ£¬ËüÊÇÃæÏòÿ¸öÃüÁîµÄ¡£ËüµÄÌØÐÔÖ÷ÒªÓÐÕâÑù¼¸µã£º
¡ì SudoÄܹ»ÏÞÖÆÓû§Ö»ÔÚij̨Ö÷»úÉÏÔËÐÐijЩÃüÁî¡£
¡ì SudoÌṩÁ˷ḻµÄÈÕÖ¾£¬ÏêϸµØ¼Ç¼ÁËÿ¸öÓû§¸ÉÁËʲô¡£ËüÄܹ»½«ÈÕÖ¾´«µ½ÖÐÐÄÖ÷»ú»òÕßÈÕÖ¾·þÎñÆ÷¡£
¡ì SudoʹÓÃʱ¼ä´ÁÎļþÀ´Ö´ÐÐÀàËÆµÄ¡°¼ìƱ¡±ÏµÍ³¡£µ±Óû§µ÷ÓÃsudo²¢ÇÒÊäÈëËüµÄÃÜÂëʱ£¬Óû§»ñµÃÁËÒ»ÕÅ´æ»îÆÚΪ5·ÖÖӵį±£¨Õâ¸öÖµ¿ÉÒÔÔÚ±àÒëµÄʱºò¸Ä±ä£©¡£
¡ì SudoµÄÅäÖÃÎļþÊÇsudoersÎļþ£¬ËüÔÊÐíϵͳ¹ÜÀíÔ±¼¯ÖеĹÜÀíÓû§µÄʹÓÃȨÏÞºÍʹÓõÄÖ÷»ú¡£ËüËù´æ·ÅµÄλÖÃĬÈÏÊÇÔÚ/etc/sudoers£¬ÊôÐÔ±ØÐëΪ0411¡£
Ò»,°²×°
¼ì²âÊÇ·ñÒ»¾°²×°ÁËSUDO:
[root@localhost ~]# rpm -q sudo
sudo-1.6.8p12-4.1 -
PUTTY½éÉÜ
2008-6-02
Putty
Ëæ×ÅLinuxÔÚ·þÎñÆ÷¶ËÓ¦ÓÃµÄÆÕ¼°£¬Linuxϵͳ¹ÜÀíÔ½À´Ô½ÒÀÀµÓÚÔ¶³Ì¡£ÔÚ¸÷ÖÖÔ¶³ÌµÇ¼¹¤¾ßÖУ¬PuttyÊÇ
³öÉ«µÄ¹¤¾ßÖ®Ò»¡£
PuttyÊÇÒ»¸öÃâ·ÑµÄ¡¢Windows 32ƽ̨ϵÄtelnet¡¢rloginºÍssh¿Í»§¶Ë£¬µ«Êǹ¦ÄÜË¿ºÁ²»Ñ·É«ÓÚÉÌÒµµÄ
telnetÀ๤¾ß¡£ÓÃËüÀ´Ô¶³Ì¹ÜÀíLinuxÊ®·ÖºÃÓã¬ÆäÖ÷ÒªÓŵãÈçÏ£º
¡ô ÍêÈ«Ãâ·Ñ;
¡ô ÔÚWindows 9x/NT/2000ÏÂÔËÐеͼ·Ç³£ºÃ;
¡ô È«ÃæÖ§³Össh1ºÍssh2£»
¡ô ÂÌÉ«Èí¼þ£¬ÎÞÐè°²×°£¬ÏÂÔØºóÔÚ×ÀÃæ½¨¸ö¿ì½Ý·½Ê½¼´¿ÉʹÓã»
¡ô Ìå»ýºÜС£¬½ö364KB (0.54 beta°æ±¾)£»
¡ô ²Ù×÷¼òµ¥£¬ËùÓеIJÙ×÷¶¼ÔÚÒ»¸ö¿ØÖÆÃæ°åÖÐʵÏÖ¡£
ʹÓüò½é£º
°ÑPuttyÏÂÔØµ½»úÆ÷ÉÏ£¬Ë«»÷putty.exe£¬¾Í³öÏÖÈçͼ1µÄÅäÖýçÃæ¡£Ñ¡Ôñ¡°Session¡±£¬ÔÚ¡°Host Name
(or IP address)¡±ÊäÈë¿òÖÐÊäÈëÓû·ÃÎʵÄÖ÷»úÃû»òIP£¬±ÈÈçserver1»ò192.168.9.4¡£¶Ë¿ÚºÅ£¨Port£©¸ù
¾ÝʹÓõÄÐÒéÓÐËùÇø±ð£¬sshĬÈÏʹÓÃ22£¬telnetĬÈÏʹÓÃ23£¬rloginĬÈÏʹÓÃ513¡£ÔÚ¡°Protocol¡±µ¥
Ñ¡À¸ÖÐÑ¡ÔñʹÓõÄÐÒ飬һ°ãÊÇtelnet»òssh£¬ÕâÈ¡¾öÓÚ·þÎñÆ÷ÌṩµÄ·þÎñ¡£ÔÚ¡°Saved Session¡±ÊäÈë
À¸ÖÐÊäÈëÈÎÎñµÄÃû×Ö£¬µ¥»÷¡°Save¡±°´Å¥£¬¾Í¿ÉÒÔ°ÑÈÎÎñÅäÖñ£´æÆðÀ´ÁË¡£
ÅäÖÃÍê³Éºóµ¥»÷¡°Open¡±°´Å¥£¬³öÏÖÈçͼ2µÄµÇ¼½çÃæ£¬¾Í¿ÉÒÔʹÓÃPuttyÁ¬½ÓLinuxÖ÷»úÁË¡£
¹ØÓÚputtyµÄһЩʹÓÃÖг£¼ûµÄÎÊÌâ
Ò»¡¢ÔÚWindowsÖÐʹÓÃputtyµÇ¼FreeBsdϵͳʱ£¬Äܹ»ÊäÈëÓû§Ãû£¬µ«ÊÇÊäÈëÃÜÂëºó°´»Ø³µ¼ü°ëÌìÎÞ·´Ó¦
¡£
´ð£ºÉèÖùý³ÌÈçÏ£º
1. ÔÚ/etc/ssh/sshd_configÖÐÌí¼ÓÈçÏÂÄÚÈÝ£¬Ê¹ÆÕͨÓû§¿ÉÒÔͨ¹ýSSHµÇ¼£º
AllowUsers ÆÕͨÓû§ÕʺÅ
UseDNS no
2. ½«Ï£ÍûʹÓÃsuÃüÁîµÄÓû§¼ÓÈëµ½wheel×éÖУ¬ÔÚ/etc/groupÖÐ×÷ÈçÏÂÐÞ¸Ä
wheel:*:0:root,ÆÕͨÓû§ÕʺÅ
¶þ¡¢ÔÚlogin as: ºóÊäÈëÓû§Ãû£¬J04222035@cs8.xmu.edu.cn's password: ¹â±ê²»¶¯¡£¼´Ê¹ÊäÈëÕýÈ·µÄ
ÃÜÂëÒ²ÊÇûÓз´Ó¦£¿
´ð£ºÕâÊÇÒòΪputty²»ÏñtelentÄÇÑù»áÖ±½ÓÏÔʾÃÜÂ룬¶øÊDz»ÏÔʾÃÜÂ룬ֻҪÄãÊäÈëµÄÃÜÂëÊÇÕýÈ·µÄ£¬
¼´Ê¹²»ÏÔʾֻҪÊäÍêÃÜÂëºóÖ±½Ó»Ø³µ¼´¿É½øÈ룬²»ÓÃÔÚºõ¹â±ê²»¶¯¡£ -
About Connection Methods
2008-5-19
SSH
SSH is a customized secure shell connection, which provides automatic data encryption. This is compatible with other SSH protocols.
rexec
rexec (remote execution) connection provides network security by requiring the remote host to recognize your host name, login name, password, and command. The connection is allowed after the host name is recognized; otherwise, the connection fails. The command is executed after the login name and password are accepted.
rlogin
rlogin (remote login) provides a remote connection through the command line interface. After connecting, the machine will authenticate by requesting username and password, and a program to run.
rsh
rsh (remote shell) provides remote connection with minimal security. It is recommended that rsh only be used on a trusted private network; data is not encrypted, including login name and password. This connection is not recommended for use on the public internet.
command
command provides the ability to run local applications which require X-Server support. Specify the target (program) to run and Start In (directory of where to run the program).
telnet
telnet provides a remote connection through the command line interface. After connecting, the machine will authenticate by requesting username and password, and request a program to run.
XDMCP
XDMCP (X Display Manger Control Protocol) allows logging in to several remote sessions with one or multiple hosts. XDMCP is best used on trusted networks.
X-Win32 supports multiple monitors for XDMCP connections; this allows you to direct an XDMCP connection to another monitor. The maximum number of monitors is dependent on your Windows operating system and your workstation.
Three XDMCP modes are available, Query, Broadcast, and Indirect, which are described below.
-
X-Win32 8
2008-5-19
ÖÐÎĽéÉÜ X-Win32 ·ÂÕæLINUX¡¢UNIX´°¿Ú Á¬½ÓLinux/Unix X´°¿Ú³ÌÐò (ËùÒÔ±ØÐëÓÐX-windows µÄserver)
X-Win32°æÊÇStarNet×îеÄX´°¿ÚÓ¦ÓóÌÐò,רΪΪ´°¿Ú¼ÆËã»úËùÉè¼Æ,
°üÀ¨´°¿Ú95,98,ME£¬NT4.0ºÍ´°¿Ú2000.
X-Win32ÔÊÐí´°¿ÚʹÓÃÕßÁ¬½Óµ½¾ÖÓòÍøÂçÉϵÄLinux/UnixËźòÆ÷
»ò¾ÓÉÒòÌØÍøÁ¬½Óµ½Linux/UnixËźòÆ÷
´°×ÀÃæÖ®ÉÏ»áÏÔʾX´°¿ÚÓ¦ÓóÌÐòÔÚÄÇЩËźòÆ÷ÉÏÖ´ÐС£
¶øÇÒ¿ÉÔÚX´°¿ÚÓ¦ÓóÌÐò´°¿ÚÓ¦ÓóÌÐòÖ®¼ä¿ìËÙµÄÇл»
¸üÉñÆæµÄÊÇÍêȫ֧³Öcopy and paste¹¦ÄÜ
ÈÃÄúµÄÐÅÏ¢²»Òò²Ù×÷ϵͳ²»Í¬¶øÂ©½Ó¡£
ʹÓÃXDMCPÁ¬½ÓÑ¡Ïî,ÄãÄÜÊäÈëÕû¸öUnix»òLinux×ÀÃæ,
ÀýÈçCDE£¬KDE»òGnome.
½«´°¿Ú¸öÈ˼ÆËã»ú±ä³ÉÓÐÁ¦µÄUnix»òLinux¹¤×÷Õ¾¡£
ƽ¾ùÿÄêStarNetÍÆ³ö¶þ»òÈý¸öеÄX-Win32µÄ°æ±¾,
й¦ÄܰüÀ¨:
ÅäÖô°¿Ú¸öÈ˼ÆËã»úµÄX-Config£¬¿ìËÙ¶¨Î»¼üÁ¬½Óµ½Unix/LinuxËźòÆ÷¡£
Ö§Ô®Windows Terminal Server
µÚÒ»¸ö¹¤Òµ¼¶SSHÁ¬½ÓÄ£¿é
¶àXDMCPÔÊÐíʹÓÃÕßÁ¬½Óµ½²»Í¬µÄLinux/UnixËźòÆ÷
Ö§³Ö´°¿Ú98ºÍ2000¶àÏÔʾÆ÷Ö®¹¦ÄÜ,¶ÔÓÚÁ¬½Ó¶àËźòÆ÷µÄʹÓÃÕߴ˹¦Äܷdz£ÊÊÓÃ
¿ÉÔÚ¼ÆËã»úÖвå¶àÍøÂ翨¡£´Ë¹¦Äܷdz£Êʺϸ´ÔÓµÄÍøÂçÐÒé
X-Win32+SSH
X-Win32ÊÇΨһ×Ô¶¯µØ±à¼ÓÃÜÂëÕûºÏSSHÁ¬½ÓÑ¡¸öÈ˼ÆËã»úÓëUnix/LinuxËźòÆ÷ÔÚ
SSHÊÇÒÀ¾ÝF-Secure¹æ·¶¶ø¶¨µÄ,ÊÇÆóÒµ×ȫ½â¾ö·½°¸¡£
X-Win32ĿǰÓÐÓ¢ÓïºÍµÂÓï¡£·¨Óï½øÐÐÖУ¬¶øÇÒÆäËüµÄÓïÑÔ°æ±¾·¢Õ¹ÖС£
X-Win32µÄ²úÆ·ÕÜѧÊÇÉè¼ÆÎª¿ìËٵĺͼòµ¥Ò×Óúͷֵ£µÄËźòÆ÷¡£
ËùÒÔÎÒÃÇÈ«ÊÀ½çÓÐÒ»°ÙÎåÊ®ÍòÈËʹÓÃX-Win32
ÍêÕûµÄX-Win32µÄDemo°æ¿ÉÒÔÏÂÔØÊ¹ÓÃ45Ìì
Ŀǰ°æ±¾ÓÐÉÌÒµ,½ÌÓý,Õþ¸®,ѧÉú,µ«¹¦ÄÜÍêÈ«Ïàͬ
ÈôÄúÐèҪչʾ°æ³ÌÐò ÇëÓëÎÒÃÇÁªÂçÓ¢ÎĽéÉÜ A Focused X-Server
Whether you are designing an advanced IC, analyzing a string of human DNA, accessing an Oracle database, or configuring your enterprise networking server from home, X-Win32 allows you to quickly, easily and securely connect your Windows computer to any Solaris, HP/UX, AIX or Linux system. With Sun, HP and IBM competing feverishly in the UNIX-based enterprise server market and Linux commanding a growing share of the small- and mid-size server segment, the demand for PC X server software has remained strong. But unlike the mid-1990s when X server companies competed on the basis of who could bundle the most peripheral functionality (NFS, Terminal Emulation, FTP, etc), today¡¯s users demand:
A focused PC X server that easily turns any Windows computer into a powerful UNIX or Linux workstation and smoothly connects to even the most demanding 3-D EDA application on Solaris, HP/UX, AIX or Linux servers.
An X server that is easy to install, configure and operate and backed with a strong engineering and tech support program.
Security! Companies are protecting their servers with firewalls, VPNs and other security measures. To remain effective as a remote access tool, today¡¯s PC X server must offer a Secure Shell (SSH) connect option.
Low cost! With a broad choice of connectivity solutions available, cost-conscience customers are shifting away from solutions costing as much as $700.00 USD per seat. Many are finding that X-Win32 offers superior performance at three to five times less cost per seat!
Run an entire Solaris CDE, Gnome, KDE or other X desktop on top of your Windows desktop
Back To Top
Network Computing Magazine: X-Win32 is "Best PC X Server"
From the outset in 1989, X-Win32 has remained focused on the X server functionality, high performance, ease of use, stability and low cost. That makes X-Win32 the ideal remote host access server for today¡¯s customers. Please see Product Features list for more details.
When the editors of Network Computing Magazine recently chose X-Win32 as the "Best PC X" server among the top nine competitors, they concluded that X-Win32 outperformed the field. "X-Win32 shows the competition what¡¯s what ¡ X-Win32 wins the comparison because it combines function, speed and operational ease very well."
Combine these attributes with low cost-per-user and free support services and X-Win32 offers an unbeatable value!
Back To Top
Pricing, Quotes & Site Licenses
At just $245.00 USD (single commercial license), X-Win32 remains priced 30-65 percent below competing solutions. Volume discounts as well as discounts for Government and Educational users make X-Win32 the most affordable PC X server for every type of customer.
You can quickly generate one or more quotes on our web site, or request a detailed pricing request from our Sales Department or one of our Resellers. You can also order X-Win32 from the Online Store that offers a small discount for purchasing with a credit card. StarNet accepts faxed Purchase Orders at +1-408-739-0936. Product will be delivered upon receipt of the Purchase Order and Net 30-day payment terms are extended as a courtesy.
Site Licenses: StarNet offers two types of site licenses for corporate and government customers, including a Maintenance Program that does not require an upfront license purchase. Customers pay a low annual maintenance fee instead. All support and upgrade are covered under these license programs.
Educational Site Licenses: StarNet¡¯s Campus-X-Connect (CXC) site license program has made X-Win32 the leading X terminal software in the field of education. More than 1,600 Universities and Colleges around the world have already taken advantage of the CXC educational license program. More than 130 universities around the world have purchased Unlimited CXC Campus or Department licenses.
Back To Top
No One Supports Their Product Like This!
Customers often judge the quality of a product by the quality of the support the publisher provides. StarNet¡¯s support program goes further than any and we will never charge for these services:
Free Telephone and E-mail support with a guarantee of a response ¨C human response! ¨C the same or next business day!
Free Upgrades for one year! Each new or upgraded license comes with one year of Free Upgrade Coverage! Simply download and install a future full or patch release. Customers can add a second or third year of Upgrade Support at a small add-on fee, resulting in a clearly defined and low long-term cost-of-ownership.
Integrated Support: X-Win32 is the only PC X server with an integrated "Error Logging" feature. Simply turn on the feature should you ever experience a problem. Error Logging captures the activity that leads up to a failure. Simply attach the log in an email to StarNet Support.
Engineering Support. Almost all product development is driven by customers who request new functions. Version 5.4, for example, includes three key new capabilities requested by a large semiconductor manufacturer. Six weeks after submitting the request, the customer was testing the features!
Online Tutorial: To demonstrate the simplicity and power of X-Win32, StarNet has created a unique Online Tutorial that uses a Red Hat server and online instructions for setting up various kinds of sessions.
No one supports their product like this!
Back To Top
Adding Value, Not Cost!
There are two philosophies in software marketing:
Develop great new features and charge a premium
Add value, not cost
Adding value without increasing our prices is at the core of StarNet¡¯s marketing strategy. This past year alone, we¡¯ve added these premium features without increasing price:
OpenGL Support was added so customers can now run advanced 3-D applications like Abacus
An improved SSH Connect Option, based on PuTTY, was added.
We¡¯ve added four new localizations; French, Italian, Spanish and Japanese
Back To Top
Investing in Innovation
At a time when other X server publishers have reduced their engineering staff or shifted resources to different products, StarNet has tripled its engineering staff. Bringing innovative new capabilities to market has helped X-Win32 gain significant marketshare in the PC X server market during the past two years. Some of the recent innovations include:
SSH: X-Win32 was the first PC X server to integrate SSH as a connect option beside the standard RSH, REXEC and XDMCP protocols. Even today, few X11 servers come with integrated SSH and some charge premiums up to $65.00 USD per user.
X-Admin32: Introduced in Version 5.4, X-Admin32 allows users to create one or more sessions, save those sessions as a file, and email the file as an attachment to a group of users, such as colleagues or students. Just double-clicking the file will add those sessions to the user¡¯s X-Win32 registry and they can use the sessions immediately.
Error Logging: X-Win32 now allows the user to turn on an Error Logging facility that can capture all activity leading up to some error. These data can be attached in an email to an internal help desk or to StarNet Support. The data is highly valuable in quickly identifying a problem and providing a solution.
OpenGL: While some X11 servers offer 3-D support, X-Win32 was the first to offer support for the Silicon Graphics OpenGL and MESA GLX extensions and also provide the benefit of hardware acceleration by routing the OpenGL-based X traffic through the computer¡¯s OpenGL-compatible graphics accelerator card.
Single Source: Despite all of the changes in Windows in recent years, X-Win32 still uses a single-source installation that covers Windows 95, 98, ME, NT, Windows 2000 and Windows XP (Home and Professional).
Transparent Concurrent License System: X-Win32 uses a concurrent licensing system that allows customers to install X-Win32 on any number of computer on their network. The licensing system is self-monitoring and completely transparent to the customer. No license server or wrapper programs are used. The license system can dramatically lower the customer¡¯s cost per seat because a 10-user license, for example, often serves as many as 25 users who need the X server only on an occasional basis.
Those are just some of the features in X-Win32. Please review a complete list of Product Features.
X-Win32 Version 5.4.3
X-Win32 is the ONLY PC X server that lets you connect to multiple UNIX/Linux desktops at the same time and also run some X Windows applications in separate Xterm windows. That is just one of the innovative features in X-Win32 that greatly boosts your productivity. Please review many of the other great features you¡¯ll find in X-Win32 in the list below.
New Features in Version 5.4.3
1) Integrated SSH Connection Module
X-Win32 now includes StarNetSSH, a SSH implementation derived from the open source PuTTY SSH.
2) IPsmarts
Useful when connecting though a NAT router to a host on the Internet.
3) Command-Line OptionFeature
X-Win32 now offers a command-line feature that allows users to dynamically invoke a session. This is useful in cases where there are multiple Unix/Linux servers and you are using a server load-balancing utility. See Instructions.
4) Silent Installation
You can now perform remote (silent) installation of X-Win32 on Windows machines across your network. See Instructions.
5) X-Admin32
X-Admin32 is a unique new Session Distribution tool that allows users to create sessions, save the sessions to a file and email the file to other users (or save it to a shared network folder) who can then instantly use the sessions.
X-Admin32 allows Windows users even those who are unfamiliar with UNIX or Linux and do not know how to set up sessions to work productively with Linux and UNIX applications. It will also allow engineers and manager to easily distribute sessions to a large group of co-workers or staff. And you can use the X-Admin32 tool to gain access to your sessions from any computer in your organization by accessing the session file on a shared network folder. See Instructions.
6) Error Logging
An error logging capability has been added to X-Win32, which allows the user to visually examine the request, reply, and error messages generated by X-Win32. This information can also be forwarded to an internal HelpDesk or to StarNet¡¯s customer support staff. Such information can result in faster turn- around time for problem resolution.
To turn on error logging, select "Show Message" from the X-Win32 system menu. When the message window appears, selecting the "File/Debugging/Logging" option will activate/deactivate the error logging function. When activated, the user will be allowed to select the name and location of the output file.
After completing the Error Logging procedure, it is advisable to turn the feature off as it will cause regular applications to run slower. To turn off logging, repeat the "File/Debugging/Logging" selection from the message window, and the logging function will by turned off. Rebooting X-Win32 has the same effect.
7) Font Path Updates
The updating of Font Paths is improved. Users who migrate to a new version of X-Win32 will be able to retain the font paths they created in an earlier version.
8) Faster Installation
Version 5.4 features InstallShield as the default installation vehicle. A previous version 5.3.3, which used the Microsoft Installer (MSI) system, proved incompatible with certain Windows OS platforms. It also increased the size of the X-Win32 download file by 3 megabytes, making the installation take considerable longer. Because some customers need the MSI system to remote install X-Win32 across a network of users, an MSI version of X-Win32 is available to customers at no additional charge.
Back To Top
Major Features:
Multiple XDMCP Sessions allows you to run multiple Unix and Linux desktops from different UNIX and Linux servers. Simply alt-tab between desktops.
MultiCast allows you to narrow the list of X servers and workstations that respond to an XDMCP query to just those you are interested in.
Session Administration & Distribution. Version 5.4 includes a new X-Admin32 tool that allows users to create sessions that are saved to a file. The file can be attached to an email to a group of users or can be saved in a shared folder on the network. Double-clicking the file will install the session(s) in the user¡¯s registry. X-Admin32 also allows administrators to update network license keys on end user computers.
LBX Support enables users to significantly increase performance of the X applications when connected to a server over a slow connection.
OpenGL Support. X-Win32 now connects to powerful 3-D applications based on the Silicon Graphics OpenGL and GLX protocols.
Windows Terminal Server Support lets system administrators set up X-Win32 on a Windows or CITRIX terminal server to allow the terminals, even diskless thin client terminals, connect to a Linux or Unix server.
Error Logging: Coming in Version 5.4 (August release), Error Logging enables the user to turn on this feature that will log the activity leading up to an error or the popping up of an error dialog box.
Multi-Language: X-Win32 can be installed in either English, German: French, Spanish, Japanese and Italian.
Single Windows Mode, Multiple Window Mode or Both. You can run some sessions in SWM on one monitor and other in MWM on another monitor or alt-tab back and forth from the Unix and Windows desktops.
Small Size: X-Win32 measures less than 10 megabytes.
Saving Windows Settings: X-Win32 is the only PC X server that automatically saves settings for the desired Window Mode for each application.
Create Desktop Shortcut feature added that lets users create a shortcut to a session with a single click of the mouse in X-Config ¨C Sessions
A Session Wizard makes it simple to set up sessions on a Linux or Unix server.
Multiple Monitor Support for both Windows 98, Windows 2000 and Windows XP
Pop-up Dialog boxes now have a Help button that brings up the corresponding page in the Help System.
Multiple Networking Cards are now supported for users who deploy more than one networking card in their Windows PC.
nInteractive Help System, including dynamically linked pages and a keyword search file.
Auto Start. You can set up sessions to auto-start on booting the program.
Single Source: A single installation for X-Win32 covers all Windows OS platforms and connects to all UNIX and Linux operating systems.
Color Depth Support: X-Win32 supports 1, 8 and 24 color debts with 8 and 24 planes of root window depth.
System Tray: X-Win32 places itself in the system tray to avoid cluttering up the user¡¯s task bar.
Concurrent Licensing: X-Win32 offers an innovative concurrent (floating) licensing system. This self-monitoring system is completely transparent to the user and does not require any dedicated license server.
Back To Top
Other Features:
Panning
Support for IE4 on Unix Server
Hide Windows keeps the desktop and taskbar uncluttered by putting X application windows "on hold."
Last Session Terminate automatically closes X-Win32 when the user is finished using it.
Mouse Wheel support now provides for easier scrolling.
Import/Export of RGB files to the color database.
RGB database editing
Use/Send Xauth is a security feature that offers users the option of sending X authorization data through an rsh or rexec connection.
Auto Restart automatically restarts the last XDMCP session after closure of the X connection.
X11R6 server code
KeySym mapping dialog
Font Server support
Font compiler
Font Aliasing dialog
Color name editing
Shape Extension
Access Control
BackingStore support
Single Window Mode larger than MS resolution
Printer support -
Éú²¡³£ÓÃÓ¢ÎÄ
2008-5-09
Éú²¡³£ÓÃÓ¢ÎÄ(1)Ò»°ã²¡Çé:
¡¡¡¡He feels headache, nausea and vomiting. (Ëû¾õµÃÍ·Í´¡¢¶ñÐĺÍÏëÍ¡£)
¡¡¡¡He is under the weather. (Ëû²»Êæ·þ£¬Éú²¡ÁË¡£)
¡¡¡¡He began to feel unusually tired. (Ëû¸Ðµ½·´³£µÄÆ£¾ë¡£)
¡¡¡¡He feels light-headed. (Ëû¾õµÃÍ·ÔΡ£)
¡¡¡¡She has been shut-in for a few days. (ËýÉú²¡ÔÚ¼Ò¼¸ÌìÁË¡£)
¡¡¡¡Her head is pounding. (ËýÍ·Í´¡£)
¡¡¡¡His symptoms include loss of appetite, weight loss, excessive fatigue, fever
¡¡¡¡and chills. (ËûµÄÖ¢×´°üÀ¨Ã»ÓÐʳÓû¡¢ÌåÖØ¼õÇá¡¢·Ç³£Æ£¾ë¡¢·¢Éպͷ¢Àä¡£)
¡¡¡¡He feels exhausted or fatigued most of the time. (Ëû´ó²¿·Ýʱ¼ä¶¼¾õµÃ·Ç³£Æ£¾ë¡£)
¡¡¡¡He has been lacking in energy for some time. (Ëû¸Ðµ½ÐéÈõÓжÎʱ¼äÁË¡£)
¡¡¡¡He feels drowsy, dizzy and nauseated. (Ëû¾õµÃ»è»èÓû˯£¬Í·ÔÎĿѣºÍÏëÍ¡£)
¡¡¡¡He feels as though everything around him is spinning. (Ëû¸Ðµ½ÖÜΧµÄ¶«Î÷¶¼ÔÚ´òת¡£)
¡¡¡¡He has noticed some loss of hearing. (Ëû·¢¾õÌýÁ¦²îЩ¡£)
¡¡¡¡She has some pains and itching around her eyes. (ËýÑÛ¾¦ËÄÖÜÓÖÍ´ÓÖÑ÷¡£)
¡¡¡¡(2) ÉË·ç¸Ðð£º
¡¡¡¡He has been coughing up rusty or greenish-yellow phlegm. (Ëû¿ÈËÔ´øÓÐÂÌ»ÆÉ«µÄ̵¡£)
¡¡¡¡His eyes feel itchy and he has been sneezing. (ËûÑÛ¾¦·¢Ñ÷£¬¶øÇÒÒ»Ö±ÔÚ´òÅçÌç¡£)
¡¡¡¡He has a fever, aching muscles and hacking cough. (ËûÓз¢ÉÕ£¬½î¹ÇËáÍ´ºÍ³£³£¿ÈËÔ¡£) (hacking = constant)
¡¡¡¡He coughed with sputum and feeling of malaise. (Ëû¿ÈËÔÓÐŨ̵£¬¶øÇÒ¾õµÃºÜÐéÈõ¡£) (malaise = debility)
¡¡¡¡He gets a cold with a deep hacking cough. (ËûÉË·ç¿ÈËÔ¡£)
¡¡¡¡He has a headache, aching bones and joints. (ËûÍ·Í´£¬¹ÇÍ·¡¢¹Ø½ÚҲʹ¡£)
¡¡¡¡He has a persistent cough. (Ëû²»Í£µØÔÚ¿È¡£) »ò
¡¡¡¡He has bouts of uncontrollable coughing. (ËûÒ»ÕóÕóµÄ¿ÈËÔ£¬ÄÑÒÔ¿ØÖÆ¡£)
¡¡¡¡He has hoarse and has lost his voice sometimes. (ËûÉùÒôË»ÑÆ£¬ÓÐʱʧÉù¡£)
¡¡¡¡He has a sore throat and a stuffy nose. (Ëûɤ×ÓÌÛÍ´¶øÇÒ±Ç×Ó²»Í¨¡£)
¡¡¡¡His breathing is harsh and wheezy. (ËûºôÎüʱ£¬ÓÐÆø´ËƵĺôßêºôßê×÷Ïì¡£)
¡¡¡¡He has a stabbing pain that comes on suddenly in one or both temples. (ÓÐʱͻȻ¼äÌ«ÑôѨ´ÌÍ´¡£)
¡¡¡¡He has a runny nose, sneezing or a scratchy throat. (ËûÁ÷±ÇË®£¬´òÅçÌçºÍºíÁüÉ³ÑÆ¡£)
¡¡¡¡(3)ÊÖ½Å벡£º
¡¡¡¡His both hands and feet ache all over. (ËûÁ½ÊÖÁ½½Å¶¼ºÜËáÍ´¡£)
¡¡¡¡He has pain on the sole of his feet. (Ëû½Åµ×ºÜÍ´¡£)
¡¡¡¡There is a wart-like lump on the sole of right foot. (ÎÒÓҽŵ×ÓиöÏñÈâðà°ãµÄÓ²¿é¡£)
¡¡¡¡His ankles look puffy and they pit when he presses them with his finger. (ËûµÄ×ãõ׺ÃÏñÖ×ÁË£¬ÓÃÊÖ°´£¬¾ÍÓÐС¿ÓºÛ¡£) (pit = small dent form)
¡¡¡¡(¾äÀïµÄ they ºÍ them ¶¼ÊÇÖ¸ ankles)
¡¡¡¡The pain in his left foot is accompanied by redness and swelling. (×ó½ÅËáÍ´£¬²¢ÓкìÖס£)
¡¡¡¡The joints near his fingernails and knuckles look swollen. (ָͷºÍÖ¸½ÚÅԱߵĹؽڣ¬ËƺõÓÐÖ×´ó¡£)
¡¡¡¡He has numbness and tingling in his hands and fingers. (ËûµÄÊÖºÍָͷ¸Ðµ½ÂéľºÍ´ÌÍ´¡£)
¡¡¡¡His legs become painful following strenuous exercise. (¼¤ÁÒÔË\¶¯ºó£¬ËûµÄÍȾÍÍ´¡£)
¡¡¡¡His knee is misshapen or unable to move. (ËûµÄÏ¥¸ÇÓеã»ûÐΣ¬Ò²²»Äܶ¯¡£)
¡¡¡¡There are some swellings in his armpit. (ËûµÄÒ¸ÎÑÖ×´ó¡£)
¡¡¡¡He is troubled with painful muscles and joints. (ËûµÄ½î¹ÇºÍ¹Ø½Ú¶¼Í´¡£)
¡¡¡¡She is troubled by the pains in the back and shoulders. (ËýµÄºó±³ºÍ¼ç°ò¶¼Í´¡£)
¡¡¡¡His knee has been bothering him for some time. (ËûµÄÏ¥¸Ç²»Êæ·þ£¬ÒÑÓÐÒ»¶Îʱ¼äÁË¡£)
¡¡¡¡(4) ˯Ãß²»ºÃ£º
¡¡¡¡He is sleeping poorly.£¨Ëû˯²»ºÃ£©
¡¡¡¡He has difficulty in sleeping, inability to concentrate.£¨Ëû²»Ò×Èë˯£¬Ò²ÄѼ¯Öо«Éñ¡££©
¡¡¡¡It is usually hard for her to fall asleep when she goes to bed at night.£¨ËýÍíÉϾÍÇÞ£¬ºÜÄÑÈë˯¡££©
¡¡¡¡He wakes during the night or early morning and finds it difficult to fall asleep again.£¨ËûÍí¼ä»òÇåÔçÐÑÀ´ºó£¬ÔÙÒ²²»ÄÜÈë˯¡££©
¡¡¡¡He has nightmares occasionally.£¨ËûÓÐʱ×öجÃΡ££©
¡¡¡¡(5) ºôÎü·½Ã棺
¡¡¡¡His breathing has become increasingly difficult.£¨ËûºôÎüÔ½À´Ô½À§ÄÑ¡££©
¡¡¡¡He has to breathe through his mouth.£¨ËûÒªÓÿںôÎü¡££©
¡¡¡¡He is short of breath, even when he has not been exercising, he is
¡¡¡¡breathless.£¨Ëû´Æø£»¼´Ê¹²»ÔË\¶¯£¬ËûÒ²ÊÇÉÏÆø²»½ÓÏÂÆø¡££©
¡¡¡¡His cough is more like wheezing.£¨ËûµÄ¿ÈËÔÓкôßêºôßêµÄÏìÉù¡££©
¡¡¡¡His cough is dry, producing no phlegm.£¨ËûÊǸɿȣ¬Ã»ÓÐ̵¡££©
¡¡¡¡He has coughed up blood.£¨Ëû¿ÈËÔÓÐѪ¡££©
¡¡¡¡His nose stuffed up when he had a cold.£¨Ëû¸Ððʱ±Ç×ӾͲ»Í¨¡££©
¡¡¡¡He coughs up a lot of phlegm (thick spit) on most days.£¨Ëû¶à°ëʱ¼ä¿È³öŨŨµÄ̵¡££©
¡¡¡¡He has a feeling of tightness in the chest or a feeling that he is
¡¡¡¡suffocating.£¨ËûÐØ²¿¾õµÃÃÆÃÆµÄ£¬ºÃÏñ͸²»¹ýÆøÀ´¡££©
¡¡¡¡(6)¿Úǻ벡£º
¡¡¡¡He has pain in his teeth or jaw. (ËûµÄÑÀ³ÝºÍϰÍÌÛÍ´¡£)
¡¡¡¡He has some problems with his teeth. (ËûÑÀ³ÝÓÐÎÊÌâ¡£)
¡¡¡¡The tooth hurts only when he bites down on it. (ËûÒ§¶«Î÷ʱ£¬ÑÀ³Ý¾ÍÍ´¡£)
¡¡¡¡His gums are red and swollen. (ËûµÄÑÀ´²ºìÖס£)
¡¡¡¡His tongue is red and sore all over. (ËûµÄÉàÍ·µ½´¦ºìºÍÍ´¡£)
¡¡¡¡His breath smells bad and he has a foul taste in his mouth. (Ëû¿ÚÀïÓйÖζ¡£)
¡¡¡¡His gums do bleed. (ËûÑÀ´²ÓгöѪ¡£)
¡¡¡¡He has some sore swellings on his gum or jaw. (ËûµÄÑÀ´²ºÍϰÍÖ×Í´¡£)
¡¡¡¡He has sore places on or around the lip. (ËûµÄ×ì´½ºÍÖÜΧ¶¼ºÜÍ´¡£)
¡¡¡¡There are cracks at the corners of his mouth. (ËûµÄ×ì°Í½ÇÂ䯯ÁË¡£)
¡¡¡¡There are some discolored areas inside on his tongue. (ËûÉàÍ·Àï±ßÓÐЩµØ·½ÑÕÉ«¹Ö¹ÖµÄ¡£)
¡¡¡¡(7) ³¦Î¸Ã«²¡£º
¡¡¡¡He has a bloated, uncomfortable feeling after meal. (Ëû·¹ºó¶Ç×Ó¾õµÃÕÍÕ͵ģ¬ºÜ²»Êæ·þ¡£) »ò
¡¡¡¡He feels bloated after eating.
¡¡¡¡He has bouts of abdominal pain. (ËûÓÐÒ»ÕóÕóµÄ¶ÇÍ´¡£)
¡¡¡¡He feels bloated in his abdominal area. (Ëû¸Ðµ½¶Ç×ÓÕÍÕ͵ġ£)
¡¡¡¡The pain is mainly in the lower (upper) right part of the abdomen. (Í´ÊÇÔÚ¶Ç×Óϰ벿¡£)
¡¡¡¡He has nausea and vomiting. (ËûÓжñÐĺÍŻ͡£)
¡¡¡¡It is difficult or painful for him to swallow. (ËûÍÌÏÂʳÎïʱ»áÍ´¡£)
¡¡¡¡He has passed more gas than usual. (Ëû·Å¡±Èƽ³£¶à¡£)
¡¡¡¡He has been constipated for a few days. (Ëû±ãÃØÁ˺ü¸Ìì¡£)
¡¡¡¡He suffers pains when he moves his bowels. (Ëû´ó±ãʱºÜÍ´¡£)
¡¡¡¡He has some bleeding from his rectum. (ËûµÄ¸ØÃųöѪ¡£)
¡¡¡¡He has noticed some blood in his bowel movements. (Ëû·¢¾õ´ó±ãʱÓÐЩѪ¡£)
¡¡¡¡His bowel movements are pale, greasy and foul smelling.
¡¡¡¡or
¡¡¡¡His bowel movements are grey (or black) in color. (ËûµÄ´ó±ã³Ê»Ò°×É«¡£)
¡¡¡¡He has trouble with diarrhea. (ËûÀ¶Ç×Ó¡£)
¡¡¡¡(8) ѪѹµÈµÈ£º
¡¡¡¡His blood pressure is really up. (ËûµÄѪѹºÜ¸ß¡£)
¡¡¡¡High blood pressure is creeping up on him.
¡¡¡¡He has noticed frequent urination, increased thirst and unexpected
¡¡¡¡tireness. (Ëû·¢¾õ³£³£Ð¡±ã£¬·Ç³£¿Ú¿ÊºÍ¸ü¼ÓÆ£¾ë¡£)
¡¡¡¡It is a chest pain that gets worse when he bends over or lies down. (ËûÍäÑü»òÌÉÏÂʱ£¬Ðز¿¸üÍ´¡£)
¡¡¡¡He has noticed excessive sweating and unexplained tireness. (ËûÌå»áµ½¹ý¶ÈµÄ³öº¹ºÍÄÑÒÔ½âÊÍµÄÆ£¾ë¡£)
¡¡¡¡He has a sharp pain in one area of his spine. (ËûµÄ¼¹×µÄ³²¿Î»´ÌÍ´¡£)
¡¡¡¡He has pain in other joints including hip, knee and ankle. (ÆäËü¹Ø½ÚÌÛÍ´°üÀ¨Íβ¿¡¢Ï¥¸ÇºÍ½Åõס£)
¡¡¡¡His eyes seem to be bulging. (ËûµÄÑÛ¾¦¾õµÃÓеãÖ×ÕÍ¡£)
¡¡¡¡He has double vision. (ËûµÄÊÓÏßÓÐË«ÖØÓ°×Ó¡£)
¡¡¡¡He feels there is a film over his eyes. (Ëû¾õµÃÑÛÀïÓÐÖÖ±¡Ä¤ËƵĶ«Î÷£¬µ²×¡ÊÓÏß¡£)
¡¡¡¡His vision in the right eye blurred. (ËûÓÒÑÛÊÓÏßÄ£ºý²»Çå¡£)
¡¡¡¡He has had some earaches lately. (Ëû½üÀ´¶ú¶äÓеãÍ´¡£)
¡¡¡¡He has a repeated buzzing or other noises in his ears. (Ëû¶ú¶ä³£ÓÐÎËÎ˵ÄÉùÒô£© -
GroovyºÍGrails¼ò½é
2008-5-07
ÕªÒª
¡¡¡¡Java WebÓ¦ÓóÌÐò¿ò¼ÜÊÇÆóÒµJavaµÃÒԳɹ¦µÄÖØÒªÔÒòÖ®Ò»¡£ÈËÃÇ»³ÒÉÈç¹ûûÓÐApache Struts¿ò¼ÜJava EEÊÇ·ñÄܹ»Èç´Ë³É¹¦¡£ËäÈ»µ×²ã±à³ÌÓïÑÔºÜÖØÒª£¬µ«Í¨³£ÊÇ¿ò¼Üʹ±à³ÌÓïÑÔ³ÉΪÒýÈËעĿµÄÖÐÐĵġ£Èç¹ûÄú¾³£·ÃÎÊÌÖÂÛÂÛ̳£¬¾Í»á×¢Òâµ½RubyÓïÑÔºÍRuby On Rails¿ò¼ÜÖ®¼äÒ²ÊÇÕâÖÖÇé¿ö¡£RubyÒѾ³öÏÖÊ®¶àÄêÁË£¬È»¶øÖ»ÊÇÔÚRuby On Rails¿ò¼ÜÁ÷ÐÐÖ®ºó£¬¿ª·¢ÈËÔ±²Å¿ªÊ¼×¢Òâµ½RubyÓïÑÔ¡£
¡¡¡¡ÖîÈçRuby¡¢PHPºÍPythonÖ®ÀàµÄ½Å±¾ÓïÑÔ×î½ü¼¸ÄêÔ½À´Ô½Á÷ÐУ¬Òò´Ë£¬ÐèÒª¿ª·¢Ò»¸öJava½Å±¾±¸Ñ¡ÓïÑÔºÍÀàËÆRailsµÄÕë¶ÔJava»·¾³µÄ¿ò¼Ü¡£Groovy¾ÍÊÇÕâ¸ö½Å±¾ÓïÑÔ£¬¶øGrails¾ÍÊÇÕâ¸ö¿ò¼Ü¡£
¡¡¡¡ÔÚ±¾ÎÄÖÐÎÒ½«ÌÖÂÛGroovyµÄWeb¿ª·¢¹¦ÄÜ£¬È»ºó¼ÌÐøÌÖÂÛGrails¿ò¼Ü¡£ÎÒ½«¿ª·¢Ò»¸öʾÀýGrails WebÓ¦ÓóÌÐò£¬²¢ÌÖÂÛ´Ë¿ò¼ÜµÄ¸÷ÖÖÌØÐÔ¡£
GroovyÊÇʲô£¿
¡¡¡¡GroovyÊÇÒ»ÖÖÓïÑÔ£¬ÆäÓï·¨ÀàËÆÓÚJava£¬µ«±ÈJava¸ü¼òµ¥¡£Ëüͨ³£±»ÊÓΪ½Å±¾/Áé»î/¶¯Ì¬µÄÓïÑÔ£¬µ«ÊÇÎÒ²»Ï²»¶ÕâÀàÐÎÈÝ´Ê£¬ÒòΪÎÒÈÏΪËüÃÇÖ»»áÁîÈËÀ§»ó¡£Èç¹û˵JavaÊÇһλÃ÷ÖǵÄÖÐÄêÄÐ×Ó£¬ÄÇôGroovy¾ÍÊÇËûÊ®¼¸ËêµÄ¶ù×Ó¡£Groovy¾ßÓи¸Ç×µÄÐí¶àÌØµã£¬µ«ÊǸüΪ¿ñÒ°ÇÒ¸üΪÓÐȤ¡£ËûÃÇÒ²¿ÉÒԺܺõغÏ×÷¡£
¡¡¡¡GroovyµÄ¹æÔò±ÈJavaÉٵöࡣÀýÈ磬ҪÔÚJavaÖлñµÃ±ê×¼µÄ"Hello World"Êä³ö£¬ÄúÐèÒª±àдһ¸öÀà¡¢Ò»¸ö¾ßÓкÏÊʲÎÊýµÄÖ÷·½·¨£¬µÈµÈ¡£µ«ÊÇÔÚGroovyÖУ¬Èç¹û²»Ïë±àдËùÓÐÑù°å´úÂ룬Äú¿ÉÒÔÅ׿ªÀඨÒåºÍÖ÷·½·¨£¬½ö±àдһÐдúÂë¼´¿É´òÓ¡³ö"Hello World"¡£
¡¡¡¡ÒÔÏÂÊÇ´òÓ¡Hello WorldµÄÎļþ Hello.groovy µÄÄÚÈÝ£º
println "Hello World"
¡¡¡¡Javaƽ̨½ö¹ØÐÄʹ×Ö½ÚÂëµÃµ½Ö´ÐС£Í¬Ñù£¬´Ëƽ̨²»Ç¿ÆÈÄúʹÓÃJavaÓïÑÔ¡£Ö»ÒªÌṩÁË×Ö½ÚÂ룬¹¤×÷¾Í»á½øÐС£Groovy´úÂë»á±»±àÒëΪ×Ö½ÚÂ룬¶ø¶ÔÓÚJavaƽ̨À´Ëµ£¬×Ö½ÚÂëÊÇ´ÓJava´úÂ뻹ÊÇGroovy´úÂëÉú³ÉµÄ²¢Ã»ÓÐÈκÎÇø±ð¡£
¡¡¡¡ÒÔÏÂÊÇÒ»¸öGroovyÀý×Ó£¬ËüÏÔʾÁËGroovy¶ÔÇåµ¥¡¢Ó³ÉäºÍ·¶Î§µÄÄÚÖÃÖ§³Ö£¬²¢Ö¤Ã÷ÁËGroovyµÄ¼òµ¥ÐÔ¼°ÆäÀûÓÃJavaµÄÇ¿´ó¹¦ÄܵÄÄÜÁ¦£º
// Print Date def mydate = new java.util.Date() println mydate //Iterate through a map def numbersMAP = ['1':'ONE', '2':'TWO'] for (entry in numbersMAP) { println "${entry.key} = ${entry.value}" } //Introducing the range def range = 'a'..'d' //Lists def numberlist = [1, 2, 3, 4, 5, 6, 7, 8] println numberlist; println "Maximum value: ${numberlist.max()}"¡¡¡¡Çë×¢ÒâÒÔÉÏ´úÂëÖ±½ÓʹÓÃjava.util.Date £¬¶ÔÊÕ¼¯µÄÄÚÖÃÖ§³Ö¼õÉÙÁËʹÓÃÇåµ¥¡¢Ó³ÉäºÍ·¶Î§ËùÐèµÄ´úÂë¡£»¹ÓÐÐí¶àÆäËûÓÐȤµÄGroovyÌØÐÔ£¬ÀýÈç±Õ°üºÍ¼ò»¯µÄXML´¦Àí¡£Äú¿ÉÒÔÔÚgroovy.codehaus.orgÉÏÕÒµ½ÏêϸÇåµ¥¡£
¡¡¡¡ÏÖÔÚÈÃÎÒÃÇÀ´ÌÖÂÛÈçºÎ½«GroovyÓÃÓÚWeb¿ª·¢¡£
ʹÓÃGroovy½øÐÐWeb¿ª·¢
¡¡¡¡´ó¶àÊýJava EE½Ì³Ì¶¼´ÓÒ»¸ö»ù±¾servletÀý×Ó¿ªÊ¼¡£¶ÔÓÚGroovy Web¿ª·¢À´Ëµ£¬Äú½«´Ógroovlet£¨ÔÚgroovyÖÐservletµÄ¶ÔÓ¦¸ÅÄ¿ªÊ¼¡£Èç¹ûÄúÔÚservletÖаÚÍÑÁËÀàºÍdoXX() ·½·¨ÉùÃ÷£¬ÄÇôʣϵÄÄÚÈݾÍÓëgroovletºÜÏñÁË¡£ÒÔÏÂÊÇÒ»¸öÃûΪ Login.groovy µÄgroovletÀý×Ó£¬ÄúÐèÒª½«ËüÖÃÓÚWebÓ¦ÓóÌÐòµÄ×î¸ß¼¶Ä¿Â¼£º
def username= request.getParameter("username") def password= request.getParameter("password") if (username == "java" && password == "developer") { response.sendRedirect("home.jsp") session = request.getSession(true); session.setAttribute("name", username) } else { println """ <h1>Login Invalid</h1> <p>Your IP has been logged > ${request.remoteHost}</p> """ paramMap = request.getParameterMap() println "<p>You Submitted:</p>" for (entry in paramMap) { println "${entry.key} = ${entry.value}<br/>" } }¡¡¡¡Äú¿ÉÒÔ½ö´´½¨Ò»¸ö¼òµ¥µÄHTML±íµ¥£¬È»ºó½«´Ë±íµ¥µÄÐÐΪÊôÐÔ·¢Ë͵½ action="Login.groovy"¡£È»ºó½«ÒÔϱêÇ©Ìí¼Óµ½web.xml£º
<servlet> <servlet-name>Groovy</servlet-name> <servlet-class>groovy.servlet.GroovyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Groovy</servlet-name> <url-pattern>*.groovy</url-pattern> </servlet-mapping>¡¡¡¡ÏÖÔÚÖ»Ð轫ҪÇóµÄGroovy jar ÎļþÌí¼Óµ½WEB-INF/lib Ŀ¼£¬ÄúµÄGroovy WebÓ¦ÓóÌÐò¾Í×¼±¸ºÃÔÚÈÎÒâJava EEÓ¦Ó÷þÎñÆ÷ÉÏÔËÐÐÁË¡£
¡¡¡¡ÄúÓ¦¸ÃÒѾעÒâµ½´úÂëÖÐûÓзֺţ¬¶øÇÒʹÓÃÁËÒþʽ±äÁ¿ÈçrequestºÍresponse¡£ÆäËûÒþʽ±äÁ¿ÓÐcontext¡¢application¡¢session¡¢out¡¢soutºÍ html¡£
¡¡¡¡GSPÊÇJSPÔÚgroovyÖеĶÔÓ¦¸ÅÄî¡£ÄúÎÞÐèʹÓÃprintlnÉú³ÉHTML£»Ö»Ð轫Groovy´úÂëǶÈëHTMLÒ³Ãæ¡£±¾ÎÄÖеÄÀý×Ó½«ÔÚÌáµ½GrailsʱʹÓÃGSP¡£
¡¡¡¡Çë×¢Ò⣬ÒòΪËùÓдúÂë×îÖÕ¶¼Òª×ª»»Îª×Ö½ÚÂ룬ËùÒÔgroovletºÍGSPÄܹ»ÓëservletºÍJSPÇáËÉÐ×÷¡£Òò´ËÄúÎÞÐèÇø·ÖgroovletºÍGSP»òÕßservletºÍJSP¡£
¡¡¡¡ÏÖÔÚÈÃÎÒÃÇÌÖÂÛǰ;ÎÞÁ¿µÄGrails¿ò¼Ü¡£Èç¹û³É¹¦µÄ»°£¬GrailsÄܹ»¼«´óµØ¸Ä±ä¿ª·¢Java WebÓ¦ÓóÌÐòµÄ·½Ê½¡£Ruby on Rails¶ÔRubyµÄÓ°Ï죬GrailsÒ²Äܹ»¶ÔGroovyʵÏÖ¡£
GrailsÌØÐԺͼܹ¹
¡¡¡¡GrailsÊÔͼʹÓÃRuby On RailsµÄ¡°¹æÔ¼±à³Ì¡±£¨coding by convention£©·¶ÀýÀ´½µµÍ¶ÔÅäÖÃÎļþºÍÆäËûÑù°å´úÂëµÄÐèÇó¡£Ê¹Óá°¹æÔ¼±à³Ì¡± £¬Èç¹ûÎļþµÄÃû³Æ±¾Éí¾ÍÄÜ˵Ã÷´ËÎļþµÄÓÃ;£¬ÄÇôÄú¾Í²»ÐèÒªÔÚÅäÖÃÎļþÖÐÔÙ´ÎÉùÃ÷ÕâЩÄÚÈÝÁË¡£´Ë¿ò¼Ü»á²é¿´ÎļþÃû£¬²¢×Ô¼ºÅªÇåÎļþÓÃ;¡£Í¨¹ýʹÓá°¹æÔ¼±à³Ì¡± £¬Grails»¹½«×Ô¶¯Éú³ÉWebÓ¦ÓóÌÐòÖÐÐèÒªµÄÐí¶àÄÚÈÝ¡£Í¨¹ýʹÓÃGrails£¬Äú½«Äܹ»Ôں̵ܶÄʱ¼äÄÚ¡¢ÒÔ×îСµÄ¸´ÔÓÐÔʹWebÓ¦ÓóÌÐò¾ÍÐ÷¡£Çë¿´ÒÔÏÂÀý×Ó¡£
¡¡¡¡Grails»ùÓÚ¿ªÔ´¼¼Êõ£¬ÀýÈçSpring¡¢HibernateºÍSiteMesh¡£Èç¹ûÄúÒѾÉó¤ÕâЩ¼¼Êõ£¬ÄÇôÕâÊǼþºÃÊ£»µ«ÊÇÈç¹ûÄúÓÉÓÚijÖÖÔÒò²»Ï²»¶ÕâЩ¼¼Êõ£¬»òÕßÄúÈÏΪ²»½öÐèҪѧϰGrails£¬»¹ÐèҪѧϰÆäËûÈýÖÖ¿ò¼Ü£¬ÄÇôÕâ¾Í²»ÊǼþºÃÊÂÁË¡£ËäÈ»ÕâЩ¼¼ÊõÄܹ»°ïÖúGrailsÖ´ÐеøüºÃ£¬µ«ÊÇѧϰËÄÖÖ¿ò¼Ü¶ÔÓÚ´ó¶àÊýÈËÀ´ËµÊÇÒ»¸öºÜ¸ßµÄÃż÷¡£GrailsÎĵµÄ¿Ç°Ö÷Òª¹Ø×¢ËüÓëSpring¡¢HibernateºÍÆäËû³ÌÐòµÄ¼¯³É£¬È»¶øÎÒÈÏΪËüÐèÒª²ÉÓÃÏà·´µÄ·½·¨£¬½«GrailsÍÆÐÐΪһ¸ö¼òµ¥¿ìËÙµÄWebÓ¦ÓóÌÐò¿ª·¢¿ò¼Ü¡£¿ª·¢ÈËÔ±ÎÞÐèµ£ÐÄ»ò¿¼Âǵײ㷢ÉúÁËʲô¡£
¡¡¡¡ÐÒÔ˵ÄÊÇ£¬Ò»µ©Äú¿ªÊ¼Ê¹ÓÃGrails£¬Äú½«·¢ÏÖGrailsÒþ²ØÁËÕâЩ¿ò¼ÜµÄ´ó¶àÊýµ×²ã¸´ÔÓÐÔ¡£Èç¹ûÄúÍüµôÔڵײãÔËÐеÄÊÇSpring¡¢HibernateºÍÆäËû³ÌÐò£¬ÄÇôÊÂÇé¾Í»á±äµÃ¼òµ¥¡£
¡¡¡¡GrailsÓ¦ÓóÌÐòµÄÈý¸ö²ãÊÇ£º
- ÓÉÊÓͼºÍ¿ØÖÆÆ÷×é³ÉµÄWeb²ã
- ÓÉÓòÀàºÍ·þÎñ×é³ÉµÄÒµÎñÂß¼²ã
- ÓÉÓòÀàºÍÊý¾ÝÔ´×é³ÉµÄ³Ö¾Ã²ã
¡¡¡¡´ó¶àÊý¿ò¼Ü¶¼ÓÐÊýÊ®ÖÖÌØÐÔ£¬ÆäÖÐÖ»ÓкÜÉÙ¼¸Öֵõ½Á˹㷺ʹÓ᣶ÔÓÚGrailsÀ´Ëµ£¬ÕâÖֹؼüÌØÐÔÊÇÖ¸¡°¹æÔò±à³Ì¡±£¨coding by convention£©·¶ÀýºÍ¹¹¼þµÄ×Ô¶¯Éú³É¡£
¡¡¡¡GrailsµÄÆäËûÌØÐÔ°üÀ¨¶ÔAjax¡¢ÑéÖ¤¡¢µ¥Ôª²âÊԺ͹¦ÄܲâÊÔµÄÄÚÖÃÖ§³Ö¡£ËüʹÓÃÃâ·ÑµÄ¿ªÔ´Canoo WebTestÏîÄ¿À´ÊµÏÖWebÓ¦ÓóÌÐòµÄ¹¦ÄܲâÊÔ¡£Grails»¹ÌṩÓëQuartz SchedulerµÄ¼¯³É¡£
¡¡¡¡ÏÖÔÚÊÇʱºò°²×°Grails¿ò¼Ü²¢ÇÒ±àдÄúµÄµÚÒ»¸öÓ¦ÓóÌÐòÁË¡£
Grails°²×°
¡¡¡¡°²×°¹ý³Ì·Ç³£¼òµ¥¡£ÒÔÏÂÊÇGrailsÏÂÔØÒ³Ãæ£ºhttp://grails.org/Download¡£Äú¿ÉÒÔ´Óhttp://dist.codehaus.org/grails/grails-bin-0.2.1.zipÏÂÔØversion 0.2.1¡£Çë×¢ÒâGrailsÔ´´úÂëºÍÎĵµ×÷Ϊµ¥¶ÀµÄÏÂÔØÌṩ¡£ÏÂÔØzipÎļþÖ®ºó£¬Ö»Ð轫ÆäÄÚÈݽâѹËõµ½Ò»¸öĿ¼¼´¿É£¬ÔÚÎҵݸÀýÖдËĿ¼ÊÇ C:\groovy\grails-0.2.1\¡£
¡¡¡¡´´½¨Ò»¸öÃûΪGRAILS_HOME µÄл·¾³±äÁ¿£¬²¢½«ÆäÖµÉèΪ C:\groovy\grails-0.2.1\¡£½ÓÏÂÀ´½«GRAILS_HOME\bin Ìí¼Óµ½PATH »·¾³±äÁ¿¡£ÕâÑù°²×°¾ÍÍê³ÉÁË¡£Í¨¹ýÔÚÃüÁîÌáʾ·û½çÃæÖÐÔËÐÐgrails ÃüÁîÄú¿ÉÒÔ¼ì²é°²×°ÊÇ·ñ³É¹¦¡£ÄúÓ¦¸Ã»ñµÃ´ËÃüÁîµÄʹÓÃÐÅÏ¢¡£
¡¡¡¡¼ÈÈ»ÄúÓÐÁËÒ»¸öÔËÐÐÖеÄGrails°²×°£¬ÄÇôÄúÒѾΪ´´½¨Grails WebÓ¦ÓóÌÐò×öºÃÁË×¼±¸¡£
¿ª·¢GrailsÓ¦ÓóÌÐò£ºÓ¦ÓóÌÐò½á¹¹
¡¡¡¡¶àÄêÀ´ÎÒÒ»Ö±¼Æ»®¿ª·¢Ò»¸ö¿ÉÒÔ°ïÖúÎÒ¹ÜÀíÒ·þµÄÓ¦ÓóÌÐò¡ª¡ªÕâ¸öÓ¦ÓóÌÐòÓ¦¸ÃÄܹ»¸æËßÎÒÎÒ×îϲ»¶µÄTÐôÉÀ·ÅÔÚÄÄÀï¡¢ÊÇ·ñÏ´¹ý¡¢ÊÇ·ñìÙ¹ý£¬µÈµÈ¡£×ÜÓÐÒ»ÌìÎһ῿ÏúÊÛÕâ¸öÓ¦ÓóÌÐòÕõÉϼ¸°ÙÍò£¬µ«ÊÇÏÖÔÚÎÒ½«°ÑËüÓÃ×÷GrailsÀý×Ó¡£
¡¡¡¡µÚÒ»²½ÊÇ´´½¨Ò»¸öGrailsÏîĿĿ¼½á¹¹¡£ÔÚÕâÒ»²½ÎÒ½«ÔÚC:\groovy\grailsapps ´´½¨Ò»¸öÐÂĿ¼£¬²¢Ôڴ˼¶±ð´ò¿ªÒ»¸öÃüÁîÌáʾ·û´°¿Ú¡£ÔÚ´Ë´°¿ÚÖУ¬Ö´ÐÐÃüÁîgrails create-app¡£ÒªÇóÄúÊäÈëÓ¦ÓóÌÐòÃû³Æ¡£ÊäÈë ClothesMgt¡£Grails½«ÏÔʾËüΪÄú´´½¨µÄÈ«²¿Ä¿Â¼ºÍÎļþ¡£Í¼1ÏÔʾÁË×îºóµÃµ½µÄÃüÁî½á¹¹¡£

¡¡¡¡Í¼1£ºGrailsÏîĿĿ¼½á¹¹
¡¡¡¡´ËÃüÁ´´½¨Ô¼800 KB´óСµÄÎļþºÍĿ¼¡£ÕâÀïµÄÏë·¨ÊÇ´Ë¿ò¼Ü×ñÑÒѾ½¨Á¢µÄWebÓ¦ÓóÌÐò¿ª·¢¹ßÀý£¬Òò´ËËü´´½¨µÄÎļþºÍĿ¼ÔÚ´ó¶àÊýWebÓ¦ÓóÌÐòÖÐÊÇÓÐÓõġ£ËäÈ»ÓÐЩÈË¿ÉÄܲ»Ï²»¶ÕâÖÖÇ¿ÖÆÊ¹ÓÃijÖֽṹµÄÏë·¨£¬µ«ÊÇÕâÖÖ»ùÓÚ¹ßÀýµÄ×Ô¶¯Éú³ÉÕýÊÇGrailsµÄRADÌØÐԵĻù´¡¡£
¡¡¡¡Èç¹û¸ü×ÐϸµØ¿´Ò»ÏÂÕâЩĿ¼£¬Äú¾Í»á·¢ÏÖ´æÔÚÓÃÓÚÖîÈç¿ØÖÆÆ÷¡¢ÊÓͼ¡¢²âÊÔ¡¢ÅäÖÃÎļþºÍ±êÇ©¿âÖ®Àà¶«Î÷µÄĿ¼¡£Äú»¹»á·¢ÏÖ´æÔÚһЩ»ù±¾Javascr¨©ptºÍCSSÎļþ¡£ÄÇôÏÖÔÚÓ¦ÓóÌÐòµÄ»ù±¾½á¹¹ÒѾÓÐÁË¡£ÄúÖ»Ðè×öЩÌî¿Õ£¬Ó¦ÓóÌÐò¼´¿É¾ÍÐ÷¡£
¡¡¡¡Çë×¢Òâ×Ô¶¯Éú³ÉĿ¼ºÍÎļþµÄÃüÁîÊÇ¿ÉÑ¡µÄ¡£Äú¿ÉÒÔÊÖ¶¯´´½¨È«²¿ÎļþºÍĿ¼¡£Èç¹ûÊìϤApache Ant£¬ÄÇôÄúÉõÖÁ¿ÉÒÔ´ò¿ªGRAILS_HOME Ŀ¼ÖеÄ\src\grails\build.xml Îļþ£¬À´×Ðϸ²é¿´Ã¿¸öGrailsÃüÁîµÄÓÃ;¡£
Êý¾Ý¿â
¡¡¡¡ÔÚ´ËÀýÖÐÎÒ½«Ê¹ÓÃÒ»¸ö ÔËÐÐÓÚlocalhostµÄÃûΪClothes_GrailsµÄMySQLÊý¾Ý¿â¡£GrailsÄÚÖÃÒ»¸öHSQLÊý¾Ý¿â£¬Õâ¶Ô²âÊÔ¼òµ¥µÄÓ¦ÓóÌÐò»ò½öÊÔÓÃGrails·Ç³£ÓÐÓá£Èç¹ûÄúʹÓÃHSQL DB£¬ÄÇôÎÞÐèÖ´ÐÐÒÔϼ¸²½¡£ÎÒ½«Ê¹ÓÃMySQLÀ´Ö¤Ã÷ÄúÄܹ»·Ç³£ÇáËɵØÊ¹ÓÃHSQLÖ®ÍâµÄÊý¾Ý¿â¡£
¡¡¡¡´Óhttp://www.mysql.com/products/connector/j/ ÏÂÔØMySQLÇý¶¯Æ÷£¬²¢½«mysql-connector-java-<version number>-stable-bin.jar Îļþ·ÅÖÃÔÚClothesMgt\lib Ŀ¼ÖС£½ÓÏÂÀ´ÄúÐèÒª±à¼ ClothesMgt\grails-app\conf\ApplicationDataSource.groovyÎļþ¡£
¡¡¡¡ÏÖÔÚ´ËÎļþµÄÄÚÈÝÓ¦¸ÃÀàËÆÒÔÏÂÄÚÈÝ£º
class ApplicationDataSource { boolean pooling = true String dbCreate = "create-drop" String url = "jdbc:mysql://localhost/Clothes_Grails" String driverClassName = "com.mysql.jdbc.Driver" String username = "grails" String password = "groovy" }¡¡¡¡ÏÖÔÚÈÃÎÒÃÇ¿´Ò»ÏÂÈçºÎʹÓôËÊý¾Ý¿âºÍ¶ÔÏó¹ØÏµÓ³Éä¡£
ÓòÀà
¡¡¡¡GrailsµÄ¶ÔÏó¹ØÏµÓ³Éä(GORM)¹¦ÄÜÔÚÄÚ²¿Ê¹ÓÃHibernate 3£¬µ«ÊÇÄúÎÞÐèÁ˽â»ò¸ü¸ÄÈκÎHibernateÉèÖá£Grails¾ßÓгÆÎª¡°ÓòÀࡱµÄ¶«Î÷£¬ÕâЩÓòÀàµÄ¶ÔÏó±»Ó³Éäµ½Êý¾Ý¿â¡£Äú¿ÉÒÔʹÓùØÏµÀ´Á´½ÓÓòÀ࣬ËüÃÇÒ²ÌṩÓÃÓÚCRUD£¨´´½¨/¶ÁÈ¡/¸üÐÂ/ɾ³ý£©²Ù×÷µÄ¹¦Äܷdz£Ç¿´óµÄ¶¯Ì¬·½·¨¡£
¡¡¡¡ÔÚ´ËÀýÖУ¬ÎÒÃǽ«´´½¨Èý¸öÓòÀ࣬ÆäÃû³Æ·Ö±ðÊÇShirt¡¢TrouserºÍCabinet¡£Òª´´½¨ÓòÀֻ࣬ÐèÔËÐÐÃüÁî grails create-domain-class¡£Çë¼ÇסÔÚÄúµÄÏîĿĿ¼£¨¶ø²»ÊÇËüµÄÉϼ¶Ä¿Â¼£©ÄÚÔËÐдËÃüÁî¡£ÕâÊÇÒ»¸ö³£¼û´íÎó£¬ËäÈ»ÎÒÒѾÌáÐÑÁËÄú£¬Äú»¹Êǻ᷸ÖÁÉÙÒ»´ÎÕâÑùµÄ´íÎó¡£
¡¡¡¡Äú±ØÐëÌṩ¸øcreate-domain-class ÃüÁîµÄΨһÊäÈëÊÇÀàµÄÃû³Æ¡£ÔËÐдËÃüÁîÈý´Î£¬½«Shirt¡¢TrouserºÍCabinet×÷ΪÈý¸öÓòÀàµÄÃû³Æ¡£GrailsÏÖÔÚ½«ÔÚĿ¼ grails-app/domain/Öд´½¨ÕâЩÓòÀà¡£ËüÃǽ«½ö¾ßÓÐÁ½¸öÊôÐÔid ºÍ version¡£ÎÒ½«ÎªÕâЩÀàÌí¼ÓÊôÐÔ£¬ÒÔ±ãʹËüÃǸüÄÜ´ú±í³ÄÉÀ¡¢¿ã×ÓºÍÒ³÷¡£
¡¡¡¡Çåµ¥1£ºCabinet.groovy
class Cabinet { Long id Long version String name String location def relatesToMany = [ shirts : Shirt, trousers : Trouser ] Set shirts = new HashSet() Set trousers = new HashSet() String toString() { "${this.class.name} : $id" } boolean equals(other) { if(other?.is(this))return true if(!(other instanceof Cabinet)) return false if(!id || !other?.id || id!=other?.id) return false return true } int hashCode() { int hashCode = 0 hashCode = 29 * (hashCode + ( !id ? 0 : id ^ (id >>> 32)) ) } }¡¡¡¡Çåµ¥2£º Trouser.groovy
class Trouser { Long id Long version String name String color Cabinet cabinet def belongsTo = Cabinet String toString() { "${this.class.name} : $id" } boolean equals(other) { if(other?.is(this))return true if(!(other instanceof Trouser)) return false if(!id || !other?.id || id!=other?.id) return false return true } int hashCode() { int hashCode = 0 hashCode = 29 * (hashCode + ( !id ? 0 : id ^ (id >>> 32) ) ) } }¡¡¡¡Çåµ¥3£º Shirt.groovy
class Shirt { Long id Long version String name String color Cabinet cabinet def belongsTo = Cabinet String toString() { "${this.class.name} : $id" } boolean equals(other) { if(other?.is(this))return true if(!(other instanceof Shirt)) return false if(!id || !other?.id || id!=other?.id) return false return true } int hashCode() { int hashCode = 0 hashCode = 29 * (hashCode + ( !id ? 0 : id ^ (id >>> 32))) } }¡¡¡¡ÎÒÌí¼ÓµÄ½öÓеļ¸ÐÐÉùÃ÷ÁË×Ö¶ÎÃû³ÆºÍÑÕÉ«£¬È»ºóÉùÃ÷ÁËCabinet¡¢ShirtºÍTrouserÖ®¼äµÄ¹ØÏµ¡£Ã¿¸öShirtºÍTrouser¶¼ÊôÓÚCabinet£¬¶øCabinet¾ßÓÐshirtºÍtrouserµÄ¼¯ºÏ¡£belongsTo ÊôÐÔÔڴ˰¸ÀýÖÐÊÇ¿ÉÑ¡µÄ£¬ÒòΪÔÚÒ»¶Ô¶à¹ØÏµÖУ¬Grails»á½«¡°Ò»¡±ÕâÒ»·½ÊÓΪËùÓÐÕß¡£Òò´ËÄú¾ÍÎÞÐèÏÔʽÉùÃ÷ÁË¡£ÔÚÕâÀïÎÒ½øÐÐÏÔʽÉùÃ÷Ö»ÊÇΪÁËʹÕâÖÖ¹ØÏµ¸üÃ÷ÏÔ¡£
¡¡¡¡½ÓÏÂÀ´ÎÒÃǽ«ÌÖÂÛGrailsÓ¦ÓóÌÐòµÄ¿ØÖÆÆ÷ºÍÊÓͼ²¿·Ö¡£
¿ØÖÆÆ÷ºÍÊÓͼ
¡¡¡¡¼ÈÈ»ÓòÀàÒѾ¾ÍÐ÷£¬ÈÃÎÒÃÇʹÓÃgenerate-allÃüÁî×Ô¶¯Éú³É»ù±¾CRUD WebÓ¦ÓóÌÐò¡£ÔËÐÐgrails generate-all ÃüÁîÈý´Î£¬µ±±»Ñ¯ÎÊʱÌṩÓòÀàÃû³Æ¡£generate-all ÃüÁîµÄÄ¿µÄÊÇÉú³Éÿ¸öÓòÀàµÄ¿ØÖÆÆ÷ºÍÊÓͼ£¬µ«ÊÇÓÉÓÚbug-245£¬Grails 0.2.1²»ÄÜÉú³É¿ØÖÆÆ÷¡£Äú±ØÐëÊÖ¶¯Éú³É¿ØÖÆÆ÷£¬Æä·½·¨ÊǶÔÿ¸öÓòÀàʹÓÃgenerate-controller ÃüÁî¡£
¡¡¡¡ÏÖÔÚÄúÓ¦¸ÃÔÚgrails-app\controllers Ŀ¼Öп´µ½Èý¸ö¿ØÖÆÆ÷¡£ÕâЩ¿ØÖÆÆ÷¸ºÔð´¦ÀíWebÓ¦ÓóÌÐòÖÐÕë¶ÔÌØ¶¨ÓòÀàµÄÇëÇó¡£Òò´ËShirtController.groovy ½«´¦ÀíWebÓ¦ÓóÌÐòÖÐÓëShirtÓòÀàÏà¹ØµÄCRUDÇëÇ󣬵ȵȡ£ÏÖÔÚ¿ØÖÆÆ÷¾ßÓжà¸ö±Õ°ü£¬Ã¿¸ö±Õ°üÓ³Éäµ½Ò»¸öURI¡£±Õ°üÊÇGroovyÓïÑԺܺõÄÒ»¸öÌØÐÔ£¬È»¶øÒªÏ°¹ßËü»¹ÊÇÐèҪһЩʱ¼äµÄ¡£Çåµ¥4ÏÔʾÁËShirtcontroller.groovyµÄÒ»¶Îժ¼¡£
¡¡¡¡Çåµ¥4£ºShirtController.groovy ժ¼
class ShirtController { def index = { redirect(action:list,params:params) } def list = { [ shirtList: Shirt.list( params ) ] } def show = { [ shirt : Shirt.get( params.id ) ] } def delete = { def shirt = Shirt.get( params.id ) if(shirt) { shirt.delete() flash.message = "Shirt ${params.id} deleted." redirect(action:list) } else { flash.message = "Shirt not found with id ${params.id}" redirect(action:list) } } // ... }¡¡¡¡ÔÚ´ËÀýÖУ¬ShirtController ÖеÄlist±Õ°ü½«´¦ÀíURIÊÇ/shirt/listµÄÇëÇ󣬵ȵȡ£Äú¿ÉÔÚ¿ØÖÆÆ÷ÖÐʹÓÃÄúϰ¹ßÔÚJava WebÓ¦ÓóÌÐòÖÐʹÓõĶ«Î÷£¬ÀýÈçÇëÇ󡢻ỰºÍservletContext¡£
¡¡¡¡Çë×¢Ò⣺±Õ°üÒ²½«Öµ×÷ΪÏÔʽ·µ»ØÓï¾ä·µ»Ø£¬»òÕß×÷Ϊ±Õ°üÌåÖеÄ×îºóÒ»¸öÓï¾äµÄÖµ·µ»Ø¡£²»ÒªÒòΪGrailsÉú³ÉµÄ´úÂëÖÐûÓÐreturn ¶øÀ§»ó¡£
¡¡¡¡Ò»µ©¿ØÖÆÆ÷Íê³ÉÁ˶ÔÇëÇóµÄ´¦Àí£¬Ëü±ØÐëίÍиøºÏÊʵÄÊÓͼ¡£GrailsʹÓùßÀý»úÖÆÊµÏִ˲Ù×÷¡£Òò´ËShirtController ÖеÄlist±Õ°ü½«Î¯ÍиøÊÓͼ /grails-app/views/shirt/list.gsp »ò /grails-app/views/shirt/list.jsp¡£ ¾¡¹ÜÄúÔÚʹÓÃGrails£¬È«²¿ÊÓͼ¿ÉÒÔÊÇJSPÎļþ¶ø²»ÊÇGSP¡£ÎÒ¼¸ºõûÓбàдÈκδúÂ룬µ«ÊÇÎÒÒѾ׼±¸ºÃÁËÒ»¸öWebÓ¦ÓóÌÐò¡£
¡¡¡¡ÈÃÎÒÃdz¢ÊÔ²¿ÊðºÍÔËÐÐÎÒÃǵÄÓ¦ÓóÌÐò¡£
ÔÚJava EE ServerÉϲ¿ÊðºÍÔËÐÐGrails
¡¡¡¡Grails¾ßÓÐÒ»¸öÄÚÖÃResin·þÎñÆ÷£¬Äú¿ÉʹÓÃgrails run-app ÃüÁîÔËÐÐÓ¦ÓóÌÐò¡£´ËÃüÁî»á½«Ó¦ÓóÌÐò²¿Êðµ½Resin·þÎñÆ÷²¢Æô¶¯·þÎñÆ÷¡£Òò´ËÄúÏÖÔÚ¿ÉÒÔÔÚhttp://localhost:8080/ClothesMgt ·ÃÎÊ´ËÓ¦ÓóÌÐò¡£Äú»¹¿ÉÒÔͬÑùÇáËɵؽ«Ó¦ÓóÌÐò²¿Êðµ½ÈÎÒâJavaEE·þÎñÆ÷¡£ÎÒ³¢ÊÔ½«Ëü²¿Êðµ½Tomcat¡£ÒªÊµÏִ˲Ù×÷£¬ÎÒËùÐèÒª×öµÄÊÇÔËÐÐgrails war ÃüÁ½«Éú³ÉµÄwarÎļþ¸´ÖƵ½TomcatÖеÄwebappsĿ¼£¡
¡¡¡¡Ôڴ˰¸ÀýÖÐÉú³ÉµÄwarÎļþµÄÃû³ÆÎª ClothesMgt.war¡£Ò»µ©²¿Êðµ½Tomcat£¬Äú¾ÍÓ¦¸ÃÄܹ»ÔÚhttp://localhost:8080/ClothesMgt/ ÉÏ·ÃÎÊËü£¬²¢¿´µ½Èçͼ2ËùʾµÄÆÁÄ»¡£

¡¡¡¡Í¼2£ºGrails Ó¦ÓóÌÐò
¡¡¡¡Í¨¹ý´ËÓ¦ÓóÌÐò£¬Äܹ»»ñµÃShirt¡¢TrouserºÍCabinetµÄÈ«²¿CRUD¹¦ÄÜ¡£¿ÉÒÔÏÔʾÒ³÷µÄÈ«²¿Êý¾Ý¡¢ÏòÒ³÷Ìí¼ÓгÄÉÀºÍ¿ã×Ó¡¢±à¼ËüÃǵÄÖµºÍɾ³ý¼Ç¼¡ª¡ªÊµÏÖÕâЩ²Ù×÷¶¼ÎÞÐè±àдÈκÎÒµÎñÂß¼¡¢ÊÓͼ»òÊý¾Ý·ÃÎÊ´úÂë¡£½öÔÚ¼¸·ÖÖÓÄÚÄú¾ÍÔÚJavaEE·þÎñÆ÷Éϲ¿ÊðºÃÁËÒ»¸öºÏÊʵÄWebÓ¦ÓóÌÐò¡£ºÜ¿á°É£¿£¡
¡¡¡¡ÈÃÎÒÃǸü½øÒ»²½À´¶¨ÖÆGrails¡£
´´½¨×Ô¶¨Òå¿ØÖÆÆ÷
¡¡¡¡ÎÒÏÖÔÚ½«°Ñй¦ÄܺÍÒ³ÃæÌí¼Óµ½WebÓ¦ÓóÌÐò£¬Í¬Ê±ÖØÓÃÒѾ´æÔÚµÄÓòÀà¡£shirt/list ºÍ trouser/list »á·Ö±ðÏÔʾ³ÄÉÀºÍ¿ã×ÓµÄÇåµ¥£¬ÏÖÔÚÈÃÎÒÃÇÌí¼ÓÒ»¸öеÄÏÔʾ£¬À´Í¬Ê±ÏÔʾ³ÄÉÀºÍ¿ã×ÓµÄÇåµ¥¡£Òª´´½¨Ò»¸öеÄÏÔʾ£¬ÄúÐèÒªÒ»¸öеĿØÖÆÆ÷ºÍÊÓͼ¡£
¡¡¡¡Ê¹Óà generate-controller ºÍ generate-views ÃüÁ¿ÉÒÔÇáËÉʵÏÖʹÓÃÓòÀà×Ô¶¯Éú³ÉÊÓͼºÍ¿ØÖÆÆ÷¡£È»¶ø£¬Ôڴ˰¸ÀýÖÐÎÒÏ£Íû´´½¨Ò»¸öÓëÓòÀ಻ֱ½Ó¹ØÁªµÄ¿ØÖÆÆ÷¡£Òò´ËÎÒ½«Ê¹ÓÃgrails create-controllerÃüÁî¡£µ±±»ÌáʾÊäÈë¿ØÖÆÆ÷Ãû³ÆÊ±£¬ÉùÃ÷Display¡£Grails½«ÔÚgrails-app/controllers/ Ŀ¼´´½¨Ò»¸öÃûΪDisplayController.groovy µÄ¿ØÖÆÆ÷£¬ÔÚgrails-tests Ŀ¼´´½¨Ò»¸ö²âÊÔÌ×¼þ¡£ÈçÇåµ¥5Ëùʾ±à¼¿ØÖÆÆ÷¡£
¡¡¡¡Çåµ¥5£ºDisplayController.groovy
class DisplayController { def index = {redirect(action:list,params:params)} def list = { params['max'] = 10 return [ shirtList: Shirt.list( params ), trouserList: Trouser.list( params )] } }¡¡¡¡index ±Õ°ü½«ÇëÇóÖØ¶¨Ïòµ½Çåµ¥¡£ÔÚlist ±Õ°üÖÐÎÒ½«×î´ó²ÎÊýÉèΪ10£¬È»ºóʹÓö¯Ì¬·½·¨Shirt.list ºÍ Trouser.list¡£È»ºó·µ»ØGroovy Map£¬ËüÓÐÁ½¸öÇåµ¥¡ª¡ª³ÄÉÀÇåµ¥ºÍ¿ã×ÓÇåµ¥¡£
¡¡¡¡×÷ΪJava¿ª·¢ÈËÔ±£¬µ±¿´µ½Shirt.list()ʱ»á×ÔÈ»ÈÏΪÊÇÔÚShirtÓòÀàÖеÄlist ·½·¨¡£È»¶ø£¬Èç¹û´ò¿ªShirt.groovy£¬»á·¢ÏÖ²¢Ã»Óд˷½·¨¡£¶ÔÓÚJava¿ª·¢ÈËÔ±À´Ëµ£¬²»Á˽âGroovyµÄÌØÐÔ¾ÍʹÓÃGrails²»½öÊÇÁîÈËÀ§»óµÄ£¬¶øÇÒÊÇËÀºúͬ¡£¶¯Ì¬·½·¨ÊÇGrailsµÄÌØÊâÌØÐÔ£¬ËüÊǹ¹½¨ÓÚGroovyÓïÑÔµÄÒ»¸ö·Ç³£ÌØÊâµÄÌØÐÔÔª¶ÔÏóÐÒé (MOP)Ö®Éϵġ£Èç´ËÖ¤Ã÷¿ÉÒÔʹÓö¯Ì¬·½·¨²éѯÓòÀà¡£Òò´Ë£¬ÔÚ¿ØÖÆÆ÷ÖУ¬Äú½«×¢Òâµ½ÔÚÓòÀàÉϵ÷Óõķ½·¨ËƺõÔÚÓòÀàÖв»´æÔÚ¡£Äú¿ÉÒÔÔÚÕâÀïÔĶÁ¹ØÓÚʹÓö¯Ì¬·½·¨²éѯµÄ¸ü¶àÐÅÏ¢¡£¿ÉÒÔÔÚÕâÀïÕÒµ½¶ÔGrails¿ØÖÆÆ÷ºÍÓòÀàÖпÉÓõĶ¯Ì¬·½·¨µÄ²Î¿¼×ÊÁÏ¡£
¡¡¡¡¼ÈÈ»¿ØÖÆÆ÷Äܹ»´¦ÀíÇëÇó¡¢»ñÈ¡Çåµ¥²¢×ª·¢µ½ÊÓͼ£¬ÎÒÐèÒª´´½¨ÏàÓ¦ÊÓͼ¡£
´´½¨×Ô¶¨ÒåÊÓͼ
¡¡¡¡µ±´´½¨¿ØÖÆÆ÷ʱ£¬Grails»¹ÔÚgrails-app\views Ŀ¼´´½¨ÁËÒ»¸öеÄÏÔʾĿ¼£¬²¢½«ÒÔÏÂÓ³ÉäÌí¼Óµ½web.xml ÎļþÖС£
<servlet-mapping> <servlet-name>grails</servlet-name> <url-pattern>/display/*</url-pattern> </servlet-mapping>
¡¡¡¡Ä¿Ç°GrailsÓÐÒ»¸ögenerate-views ÃüÁ´ËÃüÁîÄܹ»Éú³É»ùÓÚÓòÀàµÄÊÓͼ£¬È»¶øÃ»ÓÐÄܹ»×Ô¶¯Éú³ÉÊÓͼµÄcreate-view ÃüÁî¡£Ç뿴ͼ3ÖеÄÀý×Ó¡£

¡¡¡¡Í¼3£ºÒ»¸öÏÔʾTrousersµÄĬÈÏÊÓͼ
¡¡¡¡ÒòΪÎÒÏ£Íû´´½¨Ò»¸ö¶ÀÁ¢ÓÚÓòÀàµÄÊÓͼ£¬ËùÒÔÈÃÎÒÃÇÊÖ¶¯´´½¨ÊÓͼÎļþ¡£ÔÚĿ¼grails-app\views\display\ÖУ¬´´½¨Ò»¸öÃûΪ list.gspµÄÎļþ£¬ÈçÇåµ¥6Ëùʾ¡£
¡¡¡¡Çåµ¥6£ºlist.gsp
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>Display Shirt And Trouser List</title> <link rel="stylesheet" href="${createLinkTo(dir:'css',file:'main.css')}"></link> </head> <body> <div class="nav"> <span class="menuButton"><a href="${createLinkTo(dir:'')}">Home</a></span> </div> <div class="body"> <h1>Shirt List</h1> <table> <tr> <th>Id</th><th>Cabinet</th> <th>Color</th><th>Name</th> </tr> <g:each in="${shirtList}"> <tr> <td>${it.id}</td> <td>${it.cabinet.name}</td> <td>${it.color}</td> <td>${it.name}</td> </tr> </g:each> </table> <h1>Trouser List</h1> <table> <tr> <th>Id</th> <th>Cabinet</th> <th>Color</th> <th>Name</th> </tr> <g:each in="${trouserList}"> <tr> <td>${it.id}</td> <td>${it.cabinet.name}</td> <td>${it.color}</td> <td>${it.name}</td> </tr> </g:each> </table> </div> </body> </html>¡¡¡¡ÓëÎÒ֮ǰʹÓõķ½Ê½ÀàËÆ£¬ÄúÏÖÔÚÒ²¿ÉÒÔʹÓÃrun-app ÃüÁîÔËÐÐÓ¦ÓóÌÐò£¬»òÕß´´½¨Ò»¸öwarÎļþ²¢½«Æä²¿Êðµ½Tomcat¡£ÄúÓ¦¸ÃÔÚhttp://localhost:8080/ClothesMgt/display/Ï¿´µ½ÐµÄÊÓͼ£¬Èçͼ4Ëùʾ¡£

¡¡¡¡Í¼4£ºÐ´´½¨µÄÁгö³ÄÉÀºÍ¿ã×ÓÇåµ¥µÄÊÓͼ
¡¡¡¡ÏÖÔÚÈÃÎÒÃÇ¿ìËÙÌÖÂÛÒ»ÏÂGrails·þÎñ¡£
·þÎñ
¡¡¡¡Èç¹ûÄúÏëÖªµÀÈçºÎ·Ö¿ªÒµÎñÂß¼ÒÔ¼°·ÅÖÃÒµÎñÂß¼µÄλÖ㬴ð°¸ÔÚGrails ·þÎñÖС£·þÎñÒÔSomeNameService.groovy ¸ñʽÃüÃû£¬ÇÒ±»ÖÃÓÚ /grails-app/services/Ŀ¼¡£·þÎñ¿ÉÀûÓÃÒÀÀµ×¢ÈëÌØÐÔ£¬ÄúÄܹ»ÇáËɵشӿØÖÆÆ÷ÄÚ²¿µ÷ÓÃÕâЩ·þÎñ¡£
¡¡¡¡ÈÃÎÒÃÇÀ´¿´Ò»¸öʹÓ÷þÎñµÄÀý×Ó¡£Ê×ÏÈ£¬Ê¹ÓÃcreate-service ÃüÁî´´½¨Ð·þÎñ¡£ÔËÐдËÃüÁî²¢ÃüÃû·þÎñOrder¡£Grails½«´´½¨Á½¸öÎļþ¡ª¡ªgrails-app/services/OrderService.groovy ºÍ grails-tests/OrderTests.groovy¡£
¡¡¡¡ÏÖÔÚ±à¼OrderService.groovy£¬ÈçÇåµ¥7Ëùʾ¡£µ±ÒýÈëеÄorderGoods() ·½·¨Ê±»á×Ô¶¯Éú³ÉserviceMethod() ¡£
¡¡¡¡Çåµ¥7£ºOrderService.groovy
class OrderService { boolean transactional = true def serviceMethod() { // TODO } def orderGoods() { return "Order Placed - New shirts and trousers \ will be sent shortly." } }¡¡¡¡ÏÖÔÚ±à¼DisplayController£¬ÈçÇåµ¥8Ëùʾ¡£ÒýÈëʹÓÃOrderServiceµÄÖØÅűհü¡£Çë×¢Òâ·þÎñ½«ÓÉGroovy×¢Èë¡£
¡¡¡¡Çåµ¥8£ºDisplayController.groovy
class DisplayController { OrderService orderService def index = {redirect(action:list,params:params)} def list = { params['max'] = 10 return [ shirtList: Shirt.list( params ) , trouserList: Trouser.list( params )] } def reorder = { render(orderService.orderGoods()) } }¡¡¡¡ÏÖÔÚµ±Äú·ÃÎÊURL http://localhost:8080/ClothesMgt/display/reorderʱ£¬ÖØÅűհü½«µ÷Óà OrderService£¬ÏìÓ¦»á±»·¢»Øµ½ä¯ÀÀÆ÷¡£ÄúÄܹ»ÒÔÀàËÆ·½Ê½½«È«²¿ÒµÎñÂß¼ÒÆÈë·þÎñ£¬È»ºóʹÓÃGrailsµÄ×¢È빦Äܷdz£ÇáËɵØÊ¹ÓÃËüÃÇ¡£
¶¯Ì¬·½·¨ºÍÊôÐÔ
¡¡¡¡ÕýÈç֮ǰÌáµ½µÄ£¬ÓòÀàûÓÐÄܹ»´ÓÊý¾Ý¿â»ñÈ¡Êý¾Ý»ò¸üÐÂ/ɾ³ýÏÖÓÐÊý¾ÝµÄÈκη½·¨£¬ÀýÈçfind()¡¢ findAll() »ò save() ¡£ÔÚ¿ØÖÆÆ÷ÖÐÄúҲûÓбàдÖîÈç redirect() »ò render() Ö®ÀàµÄ·½·¨¡£µ«ÊÇÓòÀàºÍ¿ØÖÆÆ÷ÓÐËüÃǵļƻ®Ä¿µÄ£¬ÇÒÔÊÐíËùÓÐÒªÇóµÄ²Ù×÷¡£ÔÒòÊÇGrailsÖж¯Ì¬·½·¨ºÍÊôÐԵĴæÔÚ¡£¶¯Ì¬·½·¨±»¶¯Ì¬Ìí¼Óµ½À࣬¾ÍºÃÏñ¹¦ÄÜÊÇÔÚ³ÌÐòÖбàÒëµÄÒ»Ñù¡£
¡¡¡¡ÕâЩÊÇ¿ÉÓõķ½·¨ºÍÊôÐÔ£¬ÎÞÐè±àд¡£ÕâЩ¶¯Ì¬·½·¨º¸ÇÁË´ó¶àÊýWebÓ¦ÓóÌÐò¿ª·¢ÖлáÅöµ½µÄ³£¼ûÇé¿ö¡£¶ÔÓÚÓòÀàÀ´Ëµ£¬´æÔÚÖîÈçfind()¡¢findAll()¡¢list()¡¢executeQuery()¡¢save()ºÍ delete()Ö®ÀàµÄ¶¯Ì¬·½·¨¡£¿ØÖÆÆ÷¾ßÓÐÖîÈçsession¡¢requestºÍresponseÖ®ÀàµÄ¶¯Ì¬ÊôÐÔ£¬ÒÔ¼°ÖîÈçchain()¡¢render()ºÍ redirect()Ö®ÀàµÄ·½·¨¡£ÒªÕæÕýÀûÓÃGrailsµÄÇ¿´ó¹¦ÄÜ£¬ÄúÐèÒªÁ˽âËùÓÐÕâЩ¶¯Ì¬·½·¨ºÍÊôÐԵŦÄÜ¡£
˳±ã½éÉÜһϣº×Ô¶¯ÖØÔغÍ@Property
¡¡¡¡GrailsµÄÒ»¸öÖØÒªÌØÐÔÊÇÄܹ»ÔÚ¿ª·¢¹ý³ÌÖнøÐÐÁ˸ü¸Äʱ×Ô¶¯ÖØÔØÎļþ¡£Òò´ËÖ»Ðè±à¼ºÍ±£´ægspÎļþ£¬¾Í»á×Ô¶¯ÖØÔØÐÂÎļþ¡£È»¶øÕâÀï´´½¨µÄÀàËÆOrderService µÄÊÂÎñ·þÎñ²»»á±»ÖØÔØ¡£Äú»áÔÚ·þÎñÆ÷¿ØÖÆÌ¨¿´µ½ÒÔÏÂÏûÏ¢"[groovy] Cannot reload class [class OrderService] reloading of transactional service classes is not currently possible. Set class to non-transactional first. "¡£
¡¡¡¡GrailsµÄ×Ô¶¯ÖØÔع¦ÄÜ»áΪÄú½ÚÊ¡Ðí¶àʱ¼ä£¬Äú¾ÍÎÞÐèÀË·Ñʱ¼äÀ´ÖØÆô·þÎñÆ÷ÁË¡£ÎÒÅöµ½¹ýһЩGrails²»ÄÜ×Ô¶¯ÖØÔصݸÀý£¬ÀýÈ罫һ¸öjspÎļþÖØÃüÃûµ½gsp¡£È»¶ø£¬GrailsµÄÕâÏÄÜÓÐÍûÔÚδÀ´°æ±¾Öеõ½½øÒ»²½¸Ä½ø¡£
¡¡¡¡ÔÚGroovy JSR 06 µÄ֮ǰ°æ±¾ÖУ¬Äú±ØÐëʹÓÃ@Property À´¶¨ÒåGroovyÖеÄÐÂÊôÐÔ¡£Òò´ËÄú»áÔÚÏß¿´µ½Ðí¶àʹÓÃ@PropertyµÄ¾ÉµÄGroovyÀý×Ó¡£È»¶øÇë×¢Ò⣬@PropertyÒѾ´ÓGroovy JSR 06ÖÐÒÆ³ý£¬ÔÚGrails 0.2ºÍÖ®ºóµÄ°æ±¾ÖÐÒ²²»»áÔÙÐèÒªËü¡£Çë²ÎÔÄ@Property ½¨ÒéÀ´»ñµÃ¸ü¶àϸ½Ú¡£
½áÊøÓï
¡¡¡¡ÔÚ±¾ÎÄÖУ¬ÎÒ½éÉÜÁËGrails¿ò¼ÜµÄ»ù±¾ÌØÐÔ£¬²¢Ê¹ÓÃGrails´´½¨ÁËÒ»¸öÓ¦ÓóÌÐò¡£GroovyºÍGrails×î´óµÄºÃ´¦ÊÇÒ»Çж¼ÔËÐÐÔÚÓÅÐãµÄ¾ÉJavaºÍJava EEÉÏ¡ª¡ªÒò´ËÄúÄܹ»Ê¹ÓÃGroovyºÍGrailsµÄRADÌØÐÔ¿ìËÙ¿ª·¢Ó¦ÓóÌÐò£¬È»ºó½«Ó¦ÓóÌÐò²¿Ê𵽿ɿ¿µÄJava EE·þÎñÆ÷ÉÏ¡£¿¼Âǵ½¹ØÓÚRubyºÍRailsµÄÐû´«ÔëÒô£¬ÏÔÈ»ÐèÒªÒ»¸öJava±¸Ñ¡·½°¸¡£GroovyºÍGrails¿´ÆðÀ´·Ç³£ÊʺÏÕâ¸ö½ÇÉ«¡£
-
ʲôÊÇJMX
2008-5-07
JMX£¨Java Management Extensions£¬¼´Java¹ÜÀíÀ©Õ¹£©ÊÇÒ»¸öΪӦÓóÌÐò¡¢É豸¡¢ÏµÍ³µÈÖ²Èë¹ÜÀí¹¦ÄܵĿò¼Ü¡£JMX¿ÉÒÔ¿çԽһϵÁÐÒì¹¹²Ù×÷ϵͳƽ̨¡¢ÏµÍ³Ìåϵ½á¹¹ºÍÍøÂç´«ÊäÐÒ飬Áé»îµÄ¿ª·¢Î޷켯³ÉµÄϵͳ¡¢ÍøÂçºÍ·þÎñ¹ÜÀíÓ¦Óá£Java¹ÜÀíÀ©Õ¹JMX(Java Management Extensions)ÊÇÒ»¸öΪӦÓóÌÐòÖ²Èë¹ÜÀí¹¦ÄܵĿò¼Ü¡£JMXÊÇÒ»Ì×±ê×¼µÄ´úÀíºÍ·þÎñ£¬Êµ¼ÊÉÏ£¬Óû§¿ÉÒÔÔÚÈκÎJavaÓ¦ÓóÌÐòÖÐʹÓÃÕâЩ´úÀíºÍ·þÎñʵÏÖ¹ÜÀí¡£
Java¹ÜÀíÀ©Õ¹JMXµÄǰÉíÊÇJMAPI¡£
Java¹ÜÀíÀ©Õ¹JMXÖÂÁ¦ÓÚ½â¾ö·Ö²¼Ê½ÏµÍ³¹ÜÀíµÄÎÊÌ⣬Òò´Ë£¬Äܹ»ÊʺÏÓÚ¸÷ÖÖ²»Í¬µÄ»·¾³ÊǷdz£ÖØÒªµÄ¡£ÎªÁËÄܹ»ÀûÓù¦ÄÜÇ¿´óµÄJava¼ÆËã»·¾³½â¾öÕâÒ»µÄÎÊÌ⣬Sun¹«Ë¾À©³äÁËJava»ù´¡Àà¿â£¬¿ª·¢ÁËרÓõĹÜÀíÀà¿â¡£
JMXÊÇÒ»ÖÖÓ¦Óñà³Ì½Ó¿Ú£¬¿ÉÀ©³ä¶ÔÏóºÍ·½·¨µÄ¼¯ºÏÌ壬¿ÉÒÔÓÃÓÚ¿çԽһϵÁв»Í¬µÄÒì¹¹²Ù×÷ϵͳƽ̨¡¢ÏµÍ³Ìåϵ½á¹¹ºÍÍøÂç´«ÊäÐÒ飬Áé»îµÄ¿ª·¢Î޷켯³ÉµÄϵͳ¡¢ÍøÂçºÍ·þÎñ¹ÜÀíÓ¦ÓÃËüÌṩÁËÓû§½çÃæÖ¸µ¼¡¢JavaÀàºÍ¿ª·¢¼¯³Éϵͳ¡¢ÍøÂç¼°ÍøÂç¹ÜÀíÓ¦ÓõĹ淶¡£
¹ÜÀí¶ÔÏóÊÇJMXÓ¦ÓóÌÐòµÄºËÐÄ¡£JMX½á¹¹°üÀ¨£ºÖ§³ÖJavaµÄWebä¯ÀÀÆ÷Óû§½Ó¿Ú£¬¹ÜÀíÔËÐÐÄ£¿éARM(Admin Runtime Module)ºÍÓ¦Óá£ÕâÈý¸ö²¿¼þÖ®¼äͨ¹ýRMI£¨Remote Method Invocation£©½øÐÐͨÐÅ¡£ÕâÀïÐèҪ˵Ã÷µÄÊÇ£¬RMIÊÇʹµÃÒ»¸öJavaÐéÄâ»ú£¨JVM£©ÉÏÔËÐеijÌÐò¿ÉÒÔµ÷ÓÃÔ¶³Ì·þÎñÆ÷ÉÏÁíÒ»¸öJVM×ܵĶÔÏó¡£
Óû§½Ó¿ÚÓÃÀ´·¢²¼¹ÜÀí²Ù×÷£¬ÕâЩ²Ù×÷¿ÉÒÔ¼ä½ÓµÄͨ¹ýä¯ÀÀÆ÷»òͨ¹ýµ¥¶ÀµÄÓ¦ÓóÌÐòÀ´¼¤·¢¡£¹ÜÀíÔËÐÐÄ£¿éÓÃÀ´¸øÓ¦ÓÃÌṩʵÀý»¯µÄ¹ÜÀí¶ÔÏó¡£Ëü°üÀ¨Agent¶ÔÏó½Ó¿Ú£¬Í¨Öª½Ó¿ÚºÍ±»¹ÜÊý¾Ý½Ó¿Ú¡£Ó¦ÓÃÖ¸µÄÊÇÄÇЩ±»¹ÜÉ豸µ¥Ôª¡£
JMXÊÇÒ»¸öÍêÕûµÄÍøÂç¹ÜÀíÓ¦ÓóÌÐò¿ª·¢»·¾³£¬ËüͬʱÌṩÁË£º³§ÉÌÐèÒªÊÕ¼¯µÄÍêÕûµÄÌØÐÔÇåµ¥£¬¿ÉÉú³É×ÊÔ´Çåµ¥±í¸ñ£¬Í¼Ðλ¯µÄÓû§½Ó¿Ú£»·ÃÎÊSNMPµÄÍøÂçAPI£»Ö÷»ú¼äÔ¶³Ì¹ý³Ìµ÷Óã»Êý¾Ý¿â·ÃÎÊ·½·¨¡£
JMXÕâÒ»ÇáÐ͵ĹÜÀí»ù´¡½á¹¹£¬¼ÛÖµÔÚÓÚ¶Ô±»¹ÜÀí×ÊÔ´µÄ·þÎñʵÏÖÁ˳éÏó£¬ÌṩÁ˵ͲãµÄ»ù±¾À༯ºÏ£¬¿ª·¢ÈËÔ±ÔÚ±£Ö¤´ó¶àÊýµÄ¹«¹²¹ÜÀíÀàµÄÍêÕûÐÔºÍÒ»ÖÂÐÔµÄǰÌáÏ£¬½øÐÐÀ©Õ¹ÒÔÂú×ãÌØ¶¨ÍøÂç¹ÜÀíÓ¦ÓõÄÐèÒª¡£
JMX×¢ÖØÓÚ¹¹Ôì¹ÜÀí¹¤¾ßµÄÈí¼þ¿ò¼Ü£¬²¢¾¡Á¿²ÉÓÃÒѳÉÊìµÄ¼¼Êõ¡£
JMX¿ÉÒÔÓÃÀ´¹ÜÀíÍøÂ磬É豸£¬Ó¦ÓóÌÐòµÈ×ÊÔ´£¬µ±Ç°¹æ·¶Îª1.2°æ¡£
Ò»¡¢Java¹ÜÀíÀ©Õ¹JMXµÄÓŵã
1£º¿ÉÒԷdz£ÈÝÒ×µÄʹӦÓóÌÐò¾ßÓб»¹ÜÀíµÄ¹¦ÄÜ
2£ºÌṩ¾ßÓи߶ÈÉìËõÐԵļܹ¹
ÿ¸öJMX Agent·þÎñ¿ÉÒÔºÜÈÝÒ׵ķÅÈëµ½AgentÖУ¬Ã¿¸öJMXµÄʵÏÖ¶¼Ìṩ¼¸¸öºËÐĵÄAgent·þÎñ£¬ÄãÒ²¿ÉÒÔ×Ô¼º±àд·þÎñ£¬·þÎñ¿ÉÒÔºÜÈÝÒ׵IJ¿Êð£¬È¡Ïû²¿Êð¡£
3£ºÖ÷ÒªÌṩ½Ó¿Ú£¬ÔÊÐíÓв»Í¬µÄʵÏÖ
¶þ¡¢Java¹ÜÀíÀ©Õ¹JMXµÄÌåϵ½á¹¹
JMX¿ò¼Ü
1)É豸²ã£¨Instrumentation Level£©£ºÖ÷Òª¶¨ÒåÁËÐÅϢģÐÍ¡£ÔÚJMXÖУ¬¸÷ÖÖ¹ÜÀí¶ÔÏóÒÔ¹ÜÀí¹¹¼þµÄÐÎʽ´æÔÚ£¬ÐèÒª¹ÜÀíʱ£¬ÏòMBean·þÎñÆ÷½øÐÐ×¢²á¡£¸Ã²ã»¹¶¨ÒåÁË֪ͨ»úÖÆÒÔ¼°Ò»Ð©¸¨ÖúÔªÊý¾ÝÀà¡£
2)´úÀí²ã£¨Agent Level£©£ºÖ÷Òª¶¨ÒåÁ˸÷ÖÖ·þÎñÒÔ¼°Í¨ÐÅÄ£ÐÍ¡£¸Ã²ãµÄºËÐÄÊÇÒ»¸öMBean·þÎñÆ÷£¬ËùÓеĹÜÀí¹¹¼þ¶¼ÐèÒªÏòËü×¢²á£¬²ÅÄܱ»¹ÜÀí¡£×¢²áÔÚMBean·þÎñÆ÷ÉϹÜÀí¹¹¼þ²¢²»Ö±½ÓºÍÔ¶³ÌÓ¦ÓóÌÐò½øÐÐͨÐÅ£¬ËüÃÇͨ¹ýÐÒéÊÊÅäÆ÷ºÍÁ¬½ÓÆ÷½øÐÐͨÐÅ¡£¶øÐÒéÊÊÅäÆ÷ºÍÁ¬½ÓÆ÷Ò²ÒÔ¹ÜÀí¹¹¼þµÄÐÎʽÏòMBean·þÎñÆ÷×¢²á²ÅÄÜÌṩÏàÓ¦µÄ·þÎñ¡£
3)·Ö²¼·þÎñ²ã£¨Distributed Service Level£©£ºÖ÷Òª¶¨ÒåÁËÄܶԴúÀí²ã½øÐвÙ×÷µÄ¹ÜÀí½Ó¿ÚºÍ¹¹¼þ£¬ÕâÑù¹ÜÀíÕ߾ͿÉÒÔ²Ù×÷´úÀí¡£È»¶ø£¬µ±Ç°µÄJMX¹æ·¶²¢Ã»Óиø³öÕâÒ»²ãµÄ¾ßÌ广·¶¡£
4)¸½¼Ó¹ÜÀíÐÒéAPI£º¶¨ÒåµÄAPIÖ÷ÒªÓÃÀ´Ö§³Öµ±Ç°ÒѾ´æÔÚµÄÍøÂç¹ÜÀíÐÒ飬ÈçSNMP¡¢TMN¡¢CIM/WBEMµÈ¡£
1£®2 É豸²ã£¨Instrumentation Level£©
¸Ã²ã¶¨ÒåÁËÈçºÎʵÏÖJMX¹ÜÀí×ÊÔ´µÄ¹æ·¶¡£Ò»¸öJMX¹ÜÀí×ÊÔ´¿ÉÒÔÊÇÒ»¸öJavaÓ¦Óá¢Ò»¸ö·þÎñ»òÒ»¸öÉ豸£¬ËüÃÇ¿ÉÒÔÓÃJava¿ª·¢£¬»òÕßÖÁÉÙÄÜÓÃJava½øÐаü×°£¬²¢ÇÒÄܱ»ÖÃÈëJMX¿ò¼ÜÖУ¬´Ó¶ø³ÉΪJMXµÄÒ»¸ö¹ÜÀí¹¹¼þ(Managed Bean)£¬¼ò³ÆMBean¡£¹ÜÀí¹¹¼þ¿ÉÒÔÊDZê×¼µÄ£¬Ò²¿ÉÒÔÊǶ¯Ì¬µÄ£¬±ê×¼µÄ¹ÜÀí¹¹¼þ×ñ´ÓJavaBeans¹¹¼þµÄÉè¼ÆÄ£Ê½£»¶¯Ì¬µÄ¹ÜÀí¹¹¼þ×ñ´ÓÌØ¶¨µÄ½Ó¿Ú£¬ÌṩÁ˸ü´óµÄÁé»îÐÔ¡£¸Ã²ã»¹¶¨ÒåÁË֪ͨ»úÖÆÒÔ¼°ÊµÏÖ¹ÜÀí¹¹¼þµÄ¸¨ÖúÔªÊý¾ÝÀà¡£
1£®2£®1 ¹ÜÀí¹¹¼þ£¨MBean£©
ÔÚJMX¹æ·¶ÖУ¬¹ÜÀí¹¹¼þ¶¨ÒåÈçÏ£ºËüÊÇÒ»¸öÄÜ´ú±í¹ÜÀí×ÊÔ´µÄJava¶ÔÏó£¬×ñ´ÓÒ»¶¨µÄÉè¼ÆÄ£Ê½£¬»¹ÐèʵÏָù淶¶¨ÒåµÄÌØ¶¨µÄ½Ó¿Ú¡£¸Ã¶¨ÒåÁ˱£Ö¤ÁËËùÓеĹÜÀí¹¹¼þÒÔÒ»ÖÖ±ê×¼µÄ·½Ê½À´±íʾ±»¹ÜÀí×ÊÔ´¡£¹ÜÀí½Ó¿Ú¾ÍÊDZ»¹ÜÀí×ÊÔ´±©Â¶³öµÄһЩÐÅÏ¢£¬Í¨¹ý¶ÔÕâЩÐÅÏ¢µÄÐ޸ľÍÄÜ¿ØÖƱ»¹ÜÀí×ÊÔ´¡£Ò»¸ö¹ÜÀí¹¹¼þµÄ¹ÜÀí½Ó¿Ú°üÀ¨£º
1)Äܱ»½Ó´¥µÄÊôÐÔÖµ£»
2)Äܹ»Ö´ÐеIJÙ×÷£»
3)ÄÜ·¢³öµÄ֪ͨʼþ£»
4)¹ÜÀí¹¹¼þµÄ¹¹½¨Æ÷¡£¹ÜÀí¹¹¼þͨ¹ý¹«¹²µÄ·½·¨ÒÔ¼°×ñ´ÓÌØ¶¨µÄÉè¼ÆÄ£Ê½·â×°ÁËÊôÐԺͲÙ×÷£¬ÒԱ㱩¶¸ø¹ÜÀíÓ¦ÓóÌÐò¡£ÀýÈ磬һ¸öÖ»¶ÁÊôÐÔÔÚ¹ÜÀí¹¹¼þÖÐÖ»ÓÐGet·½·¨£¬¼ÈÓÐGetÓÖÓÐSet·½·¨±íʾÊÇÒ»¸ö¿É¶ÁдµÄÊôÐÔ¡£
ÆäÓàµÄJMXµÄ¹¹¼þ£¬ÀýÈçJMX´úÀíÌṩµÄ¸÷ÖÖ·þÎñ£¬Ò²ÊÇ×÷Ϊһ¸ö¹ÜÀí¹¹¼þ×¢²áµ½´úÀíÖвÅÄÜÌṩÏàÓ¦µÄ·þÎñ¡£
JMX¶Ô¹ÜÀí¹¹¼þµÄ´æ´¢Î»ÖÃûÓÐÈκÎÏÞÖÆ£¬¹ÜÀí¹¹¼þ¿ÉÒÔ´æ´¢ÔÚÔËÐÐJMX´úÀíµÄJavaÐéÄâ»úµÄÀà·¾¶µÄÈκÎλÖã¬Ò²¿ÉÒÔ´ÓÍøÂçÉϵÄÈκÎλÖõ¼Èë¡£
JMX¶¨ÒåÁËËÄÖÖ¹ÜÀí¹¹¼þ£º±ê×¼¡¢¶¯Ì¬¡¢¿ª·ÅºÍÄ£Ð͹ÜÀí¹¹¼þ¡£Ã¿Ò»ÖÖ¹ÜÀí¹¹¼þ¿ÉÒÔ¸ù¾Ý²»Í¬µÄ»·¾³ÐèÒª½øÐÐÖÆ¶¨¡£
1.±ê×¼¹ÜÀí¹¹¼þ
±ê×¼¹ÜÀí¹¹¼þµÄÉè¼ÆºÍʵÏÖÊÇ×î¼òµ¥µÄ£¬ËüÃǵĹÜÀí½Ó¿Úͨ¹ý·½·¨ÃûÀ´ÃèÊö¡£±ê×¼¹ÜÀí¹¹¼þµÄʵÏÖÒÀ¿¿Ò»×éÃüÃû¹æÔò£¬³ÆÖ®ÎªÉè¼ÆÄ£Ê½¡£ÕâЩÃüÃû¹æÔò¶¨ÒåÁËÊôÐԺͲÙ×÷¡£¼ì²é±ê×¼¹ÜÀí¹¹¼þ½Ó¿ÚºÍÓ¦ÓÃÉè¼ÆÄ£Ê½µÄ¹ý³Ì±»³ÆÎªÄÚÊ¡£¨Introspection£©[22]¡£JMX´úÀíͨ¹ýÄÚÊ¡À´²é¿´Ã¿Ò»¸ö×¢²áÔÚMBean ·þÎñÆ÷ÉϵĹÜÀí¹¹¼þµÄ·½·¨ºÍ³¬À࣬¿´ËüÊÇ·ñ×ñ´ÓÒ»¶¨Éè¼ÆÄ£Ê½£¬¾ö¶¨ËüÊÇ·ñ´ú±íÁËÒ»¸ö¹ÜÀí¹¹¼þ£¬²¢±æÈϳöËüµÄÊôÐԺͲÙ×÷¡£
2.¶¯Ì¬¹ÜÀí¹¹¼þ
¶¯Ì¬¹ÜÀí¹¹¼þÌṩÁ˸ü´óµÄÁé»îÐÔ£¬Ëü¿ÉÒÔÔÚÔËÐÐÆÚ±©Â¶×Ô¼ºµÄ¹ÜÀí½Ó¿Ú¡£ËüµÄʵÏÖÊÇͨ¹ýʵÏÖÒ»¸öÌØ¶¨µÄ½Ó¿ÚDynamicMBean£¨ÈçÏÂͼ£©¡£

JMX´úÀíͨ¹ýgetMBeanInfo·½·¨À´»ñÈ¡¸Ã¶¯Ì¬¹ÜÀí¹¹¼þ±©Â¶µÄ¹ÜÀí½Ó¿Ú£¬¸Ã·½·¨·µ»ØµÄ¶ÔÏóÊÇMbeanInfoÀàµÄʵÀý£¬°üº¬ÁËÊôÐԺͲÙ×÷µÄÇ©Ãû¡£ÓÉÓڸ÷½·¨µÄµ÷ÓÃÊÇ·¢ÉúÔÚ¶¯Ì¬¹ÜÀí¹¹¼þÏòMBean·þÎñÆ÷×¢²áÒÔºó£¬Òò´Ë¹ÜÀí½Ó¿ÚÊÇÔÚÔËÐÐÆÚ»ñÈ¡µÄ¡£²»Í¬ÓÚ±ê×¼¹ÜÀí¹¹¼þ£¬JMX´úÀí²»ÐèҪͨ¹ýÄÚÊ¡»úÖÆÀ´È·¶¨¶¯Ì¬¹ÜÀí¹¹¼þµÄ¹ÜÀí½Ó¿Ú¡£ÓÉÓÚDynamicMBeanµÄ½Ó¿ÚÊDz»±äµÄ£¬Òò´Ë¿ÉÒÔÆÁ±ÎʵÏÖϸ½Ú¡£ÓÉÓÚÕâÖÖÔÚÔËÐÐÆÚ»ñÈ¡¹ÜÀí½Ó¿ÚµÄÌØÐÔ£¬¶¯Ì¬¹ÜÀí¹¹¼þÌṩÁ˸ü´óµÄÁé»îÐÔ¡£3.¿ª·Å¹ÜÀí¹¹¼þ
¿ª·Å¹ÜÀí¹¹¼þÊÇÒ»ÖÖרÃÅ»¯µÄ¶¯Ì¬¹ÜÀí¹¹¼þ£¬ÆäÖÐËùÓеÄÓë¸Ã¹ÜÀí¹¹¼þÏà¹ØµÄ²ÎÊý¡¢·µ»ØÀàÐͺÍÊôÐÔ¶¼Î§ÈÆÒ»×éÔ¤¶¨ÒåµÄÊý¾ÝÀàÐÍ£¨String¡¢Integer¡¢Float µÈ£©À´½¨Á¢£¬²¢ÇÒͨ¹ýÒ»×éÌØ¶¨µÄ½Ó¿ÚÀ´½øÐÐ×ÔÎÒÃèÊö¡£JMX´úÀíͨ¹ý»ñµÃÒ»¸öOpenMBeanInfo¶ÔÏóÀ´»ñÈ¡¿ª·Å¹ÜÀí¹¹¼þµÄ¹ÜÀí½Ó¿Ú£¬OpenMBeanInfoÊÇMbeanInfoµÄ×ÓÀà¡£
4.Ä£Ð͹ÜÀí¹¹¼þ
Ä£Ð͹ÜÀí¹¹¼þÒ²ÊÇÒ»ÖÖרÃÅ»¯µÄ¶¯Ì¬¹ÜÀí¹¹¼þ¡£ËüÊÇÔ¤ÖÆµÄ¡¢Í¨ÓõĺͶ¯Ì¬µÄ MBean À࣬ÒѾ°üº¬ÁËËùÓбØÒªÈ±Ê¡ÐÐΪµÄʵÏÖ£¬²¢ÔÊÐíÔÚÔËÐÐʱÌí¼Ó»ò¸²¸ÇÐèÒª¶¨ÖƵÄÄÇЩʵÏÖ¡£JMX¹æ·¶¹æ¶¨¸ÃÀà±ØÐëʵÏÖΪjavax.management.modelmbean.RequiredModelMBean£¬¹ÜÀíÕßÒª×öµÄ¾ÍÊÇʵÀý»¯¸ÃÀ࣬²¢ÅäÖøù¹¼þµÄĬÈÏÐÐΪ²¢×¢²áµ½JMX´úÀíÖУ¬¼´¿ÉʵÏÖ¶Ô×ÊÔ´µÄ¹ÜÀí¡£JMX´úÀíͨ¹ý»ñµÃÒ»¸öModelMBeanInfo¶ÔÏóÀ´»ñÈ¡¹ÜÀí½Ó¿Ú¡£
Ä£Ð͹ÜÀí¹¹¼þ¾ßÓÐÒÔÏÂеÄÌØµã[23]£º
1)³Ö¾ÃÐÔ
¶¨ÒåÁ˳־ûúÖÆ£¬¿ÉÒÔÀûÓÃJavaµÄÐòÁл¯»òJDBCÀ´´æ´¢Ä£ÐÍMBeanµÄ״̬¡£
2)֪ͨºÍÈÕÖ¾¹¦ÄÜ
ÄܼǼÿһ¸ö·¢³öµÄ֪ͨ£¬²¢ÄÜ×Ô¶¯·¢³öÊôÐԱ仯֪ͨ¡£
3)ÊôÐÔÖµ»º´æ
¾ßÓлº´æÊôÐÔÖµµÄÄÜÁ¦¡£
1£®2£®2 ֪ͨģÐÍ
Ò»¸ö¹ÜÀí¹¹¼þÌṩµÄ¹ÜÀí½Ó¿ÚÔÊÐí´úÀí¶ÔÆä¹ÜÀí×ÊÔ´½øÐпØÖƺÍÅäÖá£È»¶ø£¬¶Ô¹ÜÀí¸´Ôӵķֲ¼Ê½ÏµÍ³À´Ëµ£¬ÕâЩ½Ó¿ÚÖ»ÊÇÌṩÁËÒ»²¿·Ö¹¦ÄÜ¡£Í¨³££¬¹ÜÀíÓ¦ÓóÌÐòÐèÒª¶Ô״̬±ä»¯»òÕßµ±ÌرðÇé¿ö·¢Éú±ä»¯Ê±×÷³ö·´Ó³¡£Îª´Ë£¬JMX¶¨ÒåÁË֪ͨģÐÍ¡£Í¨ÖªÄ£Ðͽö½öÉæ¼°ÁËÔÚͬһ¸öJMX´úÀíÖеĹÜÀí¹¹¼þÖ®¼äµÄʼþ´«²¥¡£JMX֪ͨģÐÍÒÀ¿¿ÒÔϼ¸¸ö²¿·Ö£º
1)Notification£¬Ò»¸öͨÓõÄʼþÀàÐÍ£¬¸ÃÀà±êʶʼþµÄÀàÐÍ£¬¿ÉÒÔ±»Ö±½ÓʹÓã¬Ò²¿ÉÒÔ¸ù¾Ý´«µÝµÄʼþµÄÐèÒª¶ø±»À©Õ¹¡£
2)NotificationListener½Ó¿Ú£¬½ÓÊÜ֪ͨµÄ¶ÔÏóÐèʵÏִ˽ӿڡ£
3)NotificationFilter½Ó¿Ú£¬×÷Ϊ֪ͨ¹ýÂËÆ÷µÄ¶ÔÏóÐèʵÏִ˽ӿڣ¬ÎªÍ¨Öª¼àÌýÕßÌṩÁËÒ»¸ö¹ýÂË֪ͨµÄ¹ýÂËÆ÷¡£
4)NotificationBroadcaster½Ó¿Ú£¬Í¨Öª·¢ËÍÕßÐèʵÏִ˽ӿڣ¬¸Ã½Ó¿ÚÔÊÐíÏ£ÍûµÃµ½Í¨ÖªµÄ¼àÌýÕß×¢²á¡£·¢ËÍÒ»¸öͨÓÃÀàÐ͵Ä֪ͨ£¬ÈκÎÒ»¸ö¼àÌýÕß¶¼»áµÃµ½¸Ã֪ͨ¡£Òò´Ë£¬¼àÌýÕßÐèÌṩ¹ýÂËÆ÷À´Ñ¡ÔñËùÐèÒª½ÓÊܵÄ֪ͨ¡£
ÈκÎÀàÐ͵ĹÜÀí¹¹¼þ£¬±ê×¼µÄ»ò¶¯Ì¬µÄ£¬¶¼¿ÉÒÔ×÷Ϊһ¸ö֪ͨ·¢ËÍÕߣ¬Ò²¿ÉÒÔ×÷Ϊһ¸ö֪ͨ¼àÌýÕߣ¬»òÁ½Õß¶¼ÊÇ¡£
1£®2£®3 ¸¨ÖúÔªÊý¾ÝÀà
¸¨ÖúÔªÊý¾ÝÀàÓÃÀ´ÃèÊö¹ÜÀí¹¹¼þ¡£¸¨ÖúÔªÊý¾ÝÀ಻½ö±»ÓÃÀ´ÄÚÊ¡±ê×¼¹ÜÀí¹¹¼þ£¬Ò²±»¶¯Ì¬¹ÜÀí¹¹¼þÓÃÀ´½øÐÐ×ÔÎÒÃèÊö¡£ÕâЩÀà¸ù¾ÝÊôÐÔ¡¢²Ù×÷¡¢¹¹½¨Æ÷ºÍͨ¸æÃèÊöÁ˹ÜÀí½Ó¿Ú¡£JMX´úÀíͨ¹ýÕâЩԪÊý¾ÝÀà¹ÜÀíËùÓйÜÀí¹¹¼þ£¬¶ø²»¹ÜÕâЩ¹ÜÀí¹¹¼þµÄÀàÐÍ¡£²¿·Ö¸¨ÖúÔªÀàÈçÏ£º
1)MBeanInfo--°üº¬ÁËÊôÐÔ¡¢²Ù×÷¡¢¹¹½¨Æ÷ºÍ֪ͨµÄÐÅÏ¢¡£
2)MBeanFeatureInfo--ΪÏÂÃæÀàµÄ³¬Àà¡£
3)MBeanAttributeInfo--ÓÃÀ´ÃèÊö¹ÜÀí¹¹¼þÖеÄÊôÐÔ¡£
4)MBeanConstructorInfo--ÓÃÀ´ÃèÊö¹ÜÀí¹¹¼þÖеĹ¹½¨Æ÷¡£
5)MBeanOperationInfo--ÓÃÀ´ÃèÊö¹ÜÀí¹¹¼þÖеIJÙ×÷¡£
6)MBeanParameterInfo--ÓÃÀ´ÃèÊö¹ÜÀí¹¹¼þ²Ù×÷»ò¹¹½¨Æ÷µÄ²ÎÊý¡£
7)MBeanNotificationInfo--ÓÃÀ´ÃèÊö¹ÜÀí¹¹¼þ·¢³öµÄ֪ͨ¡£
1£®3 ´úÀí²ã
´úÀí²ãÊÇÒ»¸öÔËÐÐÔÚJavaÐéÄâ»úÉϵĹÜÀíʵÌ壬Ëü»îÔ¾ÔÚ¹ÜÀí×ÊÔ´ºÍ¹ÜÀíÕßÖ®¼ä£¬ÓÃÀ´Ö±½Ó¹ÜÀí×ÊÔ´£¬²¢Ê¹ÕâЩ×ÊÔ´¿ÉÒÔ±»Ô¶³ÌµÄ¹ÜÀí³ÌÐòËù¿ØÖÆ¡£´úÀí²ãÓÉÒ»¸öMBean·þÎñÆ÷ºÍһϵÁд¦Àí±»¹ÜÀí×ÊÔ´µÄ·þÎñËù×é³É¡£ÏÂͼ±íʾÁË´úÀí²ãµÄ×é³É£º
1£®3£®1 MBean·þÎñÆ÷
Mbean·þÎñÆ÷Ϊ´úÀí²ãµÄºËÐÄ£¬É豸²ãµÄËùÓйÜÀí¹¹¼þ¶¼ÔÚÆä×¢²á£¬¹ÜÀíÕßÖ»ÓÃͨ¹ýËü²ÅÄÜ·ÃÎʹÜÀí¹¹¼þ¡£
¹ÜÀí¹¹¼þ¿ÉÒÔͨ¹ýÒÔÏÂÈýÖÖ·½·¨ÊµÀý»¯ºÍ×¢²á£º
1)ͨ¹ýÁíÒ»¸ö¹ÜÀí¹¹¼þ
2)¹ÜÀí´úÀí±¾Éí
3)Ô¶³ÌÓ¦ÓóÌÐò
×¢²áÒ»¸ö¹ÜÀí¹¹¼þʱ£¬±ØÐëÌṩһ¸öΨһµÄ¶ÔÏóÃû¡£¹ÜÀíÓ¦ÓóÌÐòÓÃÕâ¸ö¶ÔÏóÃû½øÐбêʶ¹ÜÀí¹¹¼þ²¢¶ÔÆä²Ù×÷¡£ÕâЩ²Ù×÷°üÀ¨£º
1)·¢ÏÖ¹ÜÀí¹¹¼þµÄ¹ÜÀí½Ó¿Ú
2)¶ÁдÊôÐÔÖµ
3)Ö´ÐйÜÀí¹¹¼þÖж¨ÒåµÄ²Ù×÷
4)»ñµÃ¹ÜÀí¹¹¼þ·¢³öµÄͨ¸æ
5)»ùÓÚ¶ÔÏóÃûºÍÊôÐÔÖµÀ´²éѯ¹ÜÀí¹¹¼þ
1£®3£®2 ÐÒéÊÊÅäÆ÷ºÍÁ¬½ÓÆ÷
MBean·þÎñÆ÷ÒÀÀµÓÚÐÒéÊÊÅäÆ÷ºÍÁ¬½ÓÆ÷À´ºÍÔËÐиôúÀíµÄJavaÐéÄâ»úÖ®ÍâµÄ¹ÜÀíÓ¦ÓóÌÐò½øÐÐͨÐÅ¡£ÐÒéÊÊÅäÆ÷ͨ¹ýÌØ¶¨µÄÐÒéÌṩÁËÒ»ÕÅ×¢²áÔÚMBean·þÎñÆ÷µÄ¹ÜÀí¹¹¼þµÄÊÓͼ¡£ÀýÈ磬һ¸öHTMLÊÊÅäÆ÷¿ÉÒÔ½«ËùÓÐ×¢²á¹ýµÄ¹ÜÀí¹¹¼þÏÔʾÔÚWeb Ò³ÃæÉÏ¡£²»Í¬µÄÐÒ飬Ìṩ²»Í¬µÄÊÓͼ¡£Á¬½ÓÆ÷»¹±ØÐëÌṩ¹ÜÀíÓ¦ÓÃÒ»·½µÄ½Ó¿ÚÒÔʹ´úÀíºÍ¹ÜÀíÓ¦ÓóÌÐò½øÐÐͨÐÅ£¬¼´Õë¶Ô²»Í¬µÄÐÒ飬Á¬½ÓÆ÷±ØÐëÌṩͬÑùµÄÔ¶³Ì½Ó¿ÚÀ´·âװͨÐŹý³Ì¡£µ±Ô¶³ÌÓ¦ÓóÌÐòʹÓÃÕâ¸ö½Ó¿Úʱ£¬¾Í¿ÉÒÔͨ¹ýÍøÂç͸Ã÷µÄºÍ´úÀí½øÐн»»¥£¬¶øºöÂÔÐÒé±¾Éí¡£
ÊÊÅäÆ÷ºÍÁ¬½ÓÆ÷ʹMBean·þÎñÆ÷Óë¹ÜÀíÓ¦ÓóÌÐòÄܽøÐÐͨÐÅ¡£Òò´Ë£¬Ò»¸ö´úÀíÒª±»¹ÜÀí£¬Ëü±ØÐëÌṩÖÁÉÙÒ»¸öÐÒéÊÊÅäÆ÷»òÕßÁ¬½ÓÆ÷¡£ÃæÁÙ¶àÖÖ¹ÜÀíÓ¦ÓÃʱ£¬´úÀí¿ÉÒÔ°üº¬¸÷ÖÖ²»Í¬µÄÐÒéÊÊÅäÆ÷ºÍÁ¬½ÓÆ÷¡£
µ±Ç°ÒѾʵÏֺͽ«ÒªÊµÏÖµÄÐÒéÊÊÅäÆ÷ºÍÁ¬½ÓÆ÷°üÀ¨£º
1)RMIÁ¬½ÓÆ÷
2)SNMPÐÒéÊÊÅäÆ÷
3)IIOPÐÒéÊÊÅäÆ÷
4)HTMLÐÒéÊÊÅäÆ÷
5)HTTPÁ¬½ÓÆ÷
1£®3£®3 ´úÀí·þÎñ
´úÀí·þÎñ¿ÉÒÔ¶Ô×¢²áµÄ¹ÜÀí¹¹¼þÖ´ÐйÜÀí¹¦ÄÜ¡£Í¨¹ýÒýÈëÖÇÄܹÜÀí£¬JMX¿ÉÒÔ°ïÖúÎÒÃǽ¨Á¢Ç¿ÓÐÁ¦µÄ¹ÜÀí½â¾ö·½°¸¡£´úÀí·þÎñ±¾ÉíÒ²ÊÇ×÷Ϊ¹ÜÀí¹¹¼þ¶ø´æÔÚ£¬Ò²¿ÉÒÔ±»MBean·þÎñÆ÷¿ØÖÆ¡£JMX¹æ·¶¶¨ÒåÁË´úÀí·þÎñÓУº
1)¶¯Ì¬Àà×°ÔØ--ͨ¹ý¹ÜÀíС³ÌÐò·þÎñ¿ÉÒÔ»ñµÃ²¢ÊµÀý»¯ÐµÄÀ࣬»¹¿ÉÒÔʹλÓÚÍøÂçÉϵÄÀà¿â±¾µØ»¯¡£
2)¼àÊÓ·þÎñ--¼àÊÓ¹ÜÀí¹¹¼þµÄÊôÐÔÖµ±ä»¯£¬²¢½«ÕâЩ±ä»¯Í¨Öª¸øËùÓеļàÌýÕß¡£
3)ʱ¼ä·þÎñ--¶¨Ê±·¢ËÍÒ»¸öÏûÏ¢»ò×÷Ϊһ¸öµ÷¶ÈÆ÷ʹÓá£
4)¹ØÏµ·þÎñ--¶¨Ò岢ά³Ö¹ÜÀí¹¹¼þÖ®¼äµÄÏ໥¹ØÏµ¡£1.¶¯Ì¬Àà×°ÔØ
¶¯Ì¬Àà×°ÔØÊÇͨ¹ým-let£¨management applet£©·þÎñÀ´ÊµÏֵģ¬Ëü¿ÉÒÔ´ÓÍøÂçÉϵÄÈκÎURL´¦ÏÂÔØ²¢ÊµÀý»¯¹ÜÀí¹¹¼þ£¬È»ºóÏòMBean·þÎñÆ÷×¢²á¡£ÔÚÒ»¸öM-let·þÎñ¹ýÌÖУ¬Ê×ÏÈÊÇÏÂÔØÒ»¸öm-letÎı¾Îļþ£¬¸ÃÎļþÊÇXML¸ñʽµÄÎļþ£¬ÎļþµÄÄÚÈݱêʶÁ˹ÜÀí¹¹¼þµÄËùÓÐÐÅÏ¢£¬±ÈÈç¹¹¼þÃû³Æ¡¢ÔÚMBean·þÎñÆ÷ÖÐΨһ±êʶ¸Ã¹¹¼þµÄ¶ÔÏóÃûµÈ¡£È»ºó¸ù¾ÝÕâ¸öÎļþµÄÄÚÈÝ£¬m-let·þÎñÍê³ÉÊ£ÓàµÄÈÎÎñ¡£ÏÂͼÀýʾÕâÒ»¹ý³Ì£º

2.¼àÊÓ·þÎñͨ¹ýʹÓüàÊÓ·þÎñ£¬¹ÜÀí¹¹¼þµÄÊôÐÔÖµ¾Í»á±»¶¨ÆÚ¼àÊÓ£¬´Ó¶ø±£Ö¤Ê¼ÖÕ´¦ÓÚÒ»¸öÌØ¶¨µÄ·¶Î§¡£µ±¼àÊÓµÄÊôÐÔÖµµÄ±ä»¯³¬³öÁËÔ¤ÆÚ¶¨ÒåµÄ·¶Î§£¬Ò»¸öÌØ¶¨µÄͨ¸æ¾Í»á·¢³ö¡£JMX¹æ·¶µ±Ç°¹æ¶¨ÁËÈýÖÖ¼àÊÓÆ÷£º
1)¼ÆÊýÆ÷¼àÊÓÆ÷£¬¼àÊÓ¼ÆÊýÆ÷ÀàÐ͵ÄÊôÐÔÖµ£¬Í¨³£ÎªÕûÐÍ£¬ÇÒÖ»Äܰ´Ò»¶¨¹æÂɵÝÔö¡£
2)¶ÈÁ¿¼àÊÓÆ÷£¬¼àÊÓ¶ÈÁ¿ÀàÐ͵ÄÊôÐÔÖµ£¬Í¨³£ÎªÊµÊý£¬ÖµÄÜÔöÄܼõ¡£
3)×Ö·û´®¼àÊÓÆ÷£¬¼àÊÓ×Ö·û´®ÀàÐ͵ÄÊôÐÔÖµ¡£Ã¿Ò»¸ö¼àÊÓÆ÷¶¼ÊÇ×÷Ϊһ¸ö±ê×¼¹ÜÀí¹¹¼þ´æÔڵģ¬ÐèÒªÌṩ·þÎñʱ£¬¿ÉÒÔÓÉÏàÓ¦µÄ¹ÜÀí¹¹¼þ»òÔ¶³Ì¹ÜÀíÓ¦ÓóÌÐò¶¯Ì¬´´½¨²¢ÅäÖÃ×¢²áʹÓá£
ÏÂͼÀýʾÁ˼ÆÊýÆ÷¼àÊÓÆ÷µÄʹÓÃÇé¿ö£º

3.ʱ¼ä·þÎñʱ¼ä·þÎñ¿ÉÒÔÔÚÖÆ¶¨µÄʱ¼äºÍÈÕÆÚ·¢³öͨ¸æ£¬Ò²¿ÉÒÔ¶¨ÆÚµÄÖÜÆÚÐԵķ¢³öͨ¸æ£¬ÒÀÀµÓÚ¹ÜÀíÓ¦ÓóÌÐòµÄÅäÖá£Ê±¼ä·þÎñÒ²ÊÇÒ»¸ö¹ÜÀí¹¹¼þ£¬ËüÄܰïÖú¹ÜÀíÓ¦ÓóÌÐò½¨Á¢Ò»¸ö¿ÉÅäÖõı¸Íü¼£¬´Ó¶øÊµÏÖÖÇÄܹÜÀí·þÎñ¡£
4.¹ØÏµ·þÎñ
JMX¹æ·¶¶¨ÒåÁ˹ÜÀí¹¹¼þÖ®¼äµÄ¹ØÏµÄ£ÐÍ¡£Ò»¸ö¹ØÏµÊÇÓû§¶¨ÒåµÄ¹ÜÀí¹¹¼þÖ®¼äµÄNάÁªÏµ¡£
¹ØÏµÄ£ÐͶ¨ÒåÈçÏÂһЩÊõÓ
1)½ÇÉ«£º¾ÍÊÇÊÇÒ»¸ö¹ØÏµÖеÄÒ»Àà³ÉÔ±Éí·Ý£¬Ëüº¬ÓÐÒ»¸ö½Çɫֵ¡£
2)½ÇÉ«ÐÅÏ¢£ºÃèÊöÒ»¸ö¹ØÏµÖеÄÒ»¸ö½ÇÉ«¡£
3)¹ØÏµÀàÐÍ£ºÓɽÇÉ«ÐÅÏ¢×é³É£¬×÷Ϊ´´½¨ºÍά³Ö¹ØÏµµÄÄ£°å¡£
4)¹ØÏµ£º¹ÜÀí¹¹¼þÖ®¼äµÄµ±Ç°ÁªÏµ£¬ÇÒ±ØÐëÂú×ãÒ»¸ö¹ØÏµÀàÐ͵ÄÒªÇó¡£
5)½Çɫֵ£ºÔÚÒ»¸ö¹ØÏµÖе±Ç°ÄÜÂú×ã¸ø¶¨½ÇÉ«µÄ¹ÜÀí¹¹¼þµÄÁÐ±í¡£
6)¹ØÏµ·þÎñ£ºÊÇÒ»¸ö¹ÜÀí¹¹¼þ£¬ÄܽӴ¥ºÍά³ÖËùÓйØÏµÀàÐͺ͹ØÏµÊµÀýÖ®¼äµÄÒ»ÖÂÐÔ¡£ÔÚ¹ØÏµ·þÎñÖУ¬¹ÜÀí¹¹¼þÖ®¼äµÄ¹ØÏµÓÉͨ¹ý¹ØÏµÀàÐÍÈ·¶¨µÄ¹ØÏµÊµÀýÀ´Î¬»¤¡£½ö½öÖ»ÓÐ×¢²áµ½MBean·þÎñÆ÷Éϲ¢ÇÒÄܱ»¶ÔÏóÃû±êʶµÄ¹ÜÀí¹¹¼þ²ÅÄܳÉΪһ¸ö¹ØÏµµÄ³ÉÔ±¡£¹ØÏµ·þÎñ´ÓÀ´¾Í²»Ö±½Ó²Ù×÷ËüµÄ³ÉÔ±--¹ÜÀí¹¹¼þ£¬ÎªÁË·½±ã²éÕÒËü½ö½öÌṩÁ˶ÔÏóÃû¡£
¹ØÏµ·þÎñÄÜËø¶¨²»ºÏÀí¹ØÏµÀàÐ͵Ĵ´½¨£¬Í¬Ñù£¬²»ºÏÀíµÄ¹ØÏµµÄ´´½¨Ò²»á±»Ëø¶¨¡£½ÇɫֵµÄÐÞÕýÒ²Òª×ñÊØÒ»ÖÂÐÔ¼ì²é¡£
ÓÉÓÚ¹ØÏµÊǶ¨ÒåÔÚ×¢²áµÄ¹ÜÀí¹¹¼þÖ®¼äµÄÁªÏµ£¬ËùÒÔµ±ÆäÖеĹÜÀí¹¹¼þÐ¶ÔØÊ±£¬¾Í»á¸ü¸Ä¹ØÏµ¡£¹ØÏµ·þÎñ»á×Ô¶¯¸ü¸Ä½Çɫֵ¡£ËùÓжԹØÏµÊµÀýµÄ²Ù×÷±ÈÈç´´½¨¡¢¸üС¢É¾³ýµÈ¶¼»áʹ¹ØÏµ·þÎñ·¢³öͨ¸æ£¬Í¨¸æ»áÌṩÓйØÕâ´Î²Ù×÷µÄÐÅÏ¢¡£
JMX¹ØÏµÄ£ÐÍÖ»Äܱ£Ö¤ËùÓеĹÜÀí¹¹¼þÂú×ãËüµÄÉè¼Æ½ÇÉ«£¬Ò²¾ÍÊÇ˵£¬²»ÔÊÐíÒ»¸ö¹ÜÀí¹¹¼þͬʱ³öÏÖÔÚÐí¶à¹ØÏµÖС£
1£®4 ·Ö²¼·þÎñ²ã
µ±Ç°£¬SUN²¢Ã»Óиø³öÕâÒ»²ãµÄ¾ßÌ广·¶£¬ÏÂÃæ¸ø³öµÄÖ»ÊÇÒ»¸ö¼òÒªÃèÊö¡£¸Ã²ã¹æ¶¨ÁËʵÏÖJMXÓ¦ÓùÜÀíÆ½Ì¨µÄ½Ó¿Ú¡£ÕâÒ»²ã¶¨ÒåÁËÄܶԴúÀí²ã½øÐвÙ×÷µÄ¹ÜÀí½Ó¿ÚºÍ×é¼þ¡£ÕâЩ×é¼þÄÜ£º
1)Ϊ¹ÜÀíÓ¦ÓóÌÐòÌṩһ¸ö½Ó¿Ú£¬ÒÔ±ãËüͨ¹ýÒ»¸öÁ¬½ÓÆ÷ÄÜ͸Ã÷ºÍ´úÀí²ã»òÕßJMX¹ÜÀí×ÊÔ´½øÐн»»¥¡£
2)ͨ¹ý¸÷ÖÖÐÒéµÄÓ³É䣨ÈçSNMP¡¢HTMLµÈ£©£¬ÌṩÁËÒ»¸öJMX´úÀíºÍËùÓпɹÜÀí×é¼þµÄÊÓͼ¡£
3)·Ö²¼¹ÜÀíÐÅÏ¢£¬ÒԱ㹹ÔìÒ»¸ö·Ö²¼Ê½ÏµÍ³£¬Ò²¾ÍÊǽ«¸ß²ã¹ÜÀíÆ½Ì¨µÄ¹ÜÀíÐÅÏ¢ÏòÆäÏÂÖÚ¶àµÄJMX´úÀí·¢²¼¡£
4)ÊÕ¼¯¶à¸öJMX ´úÀí¶ËµÄ¹ÜÀíÐÅÏ¢²¢¸ù¾Ý¹ÜÀíÖÕ¶ËÓû§µÄÐèҪɸѡÓû§¸ÐÐËȤµÄÐÅÏ¢²¢ÐγÉÂß¼ÊÓͼË͸øÏàÓ¦µÄÖÕ¶ËÓû§¡£
5)ÌṩÁ˰²È«±£Ö¤¡£Í¨¹ý¹ÜÀíÓ¦ÓòãºÍÁíÒ»¹ÜÀí´úÀíºÍÒÔ¼°ËûµÄÉ豸²ãµÄÁªºÏ£¬¾Í¿ÉÒÔΪÎÒÃÇÌṩһ¸öÍêÕûµÄÍøÂç¹ÜÀíµÄ½â¾ö·½°¸¡£Õâ¸ö½â¾ö·½°¸ÎªÎÒÃÇ´øÀ´Á˶ÀÒ»ÎÞ¶þµÄһЩÓŵ㣺Çá±ã¡¢¸ù¾ÝÐèÒª²¿Êð¡¢¶¯Ì¬·þÎñ¡¢»¹Óа²È«ÐÔ¡£
1£®5 ¸½¼Ó¹ÜÀíÐÒéAPI
¸Ã²ãÌṩÁËһЩAPIÀ´Ö§³Öµ±Ç°ÒѾ´æÔÚµÄһЩ¹ÜÀíÐÒé¡£ÕâЩ¸½¼ÓµÄÐÒéAPI²¢Ã»Óж¨Òå¹ÜÀíÓ¦ÓõŦÄÜ£¬»òÕß¹ÜÀíÆ½Ì¨µÄÌåϵ½á¹¹£¬ËûÃǽö½ö¶¨ÒåÁ˱ê×¼µÄJava APIºÍÏÖ´æµÄÍøÂç¹ÜÀí¼¼ÊõͨÐÅ£¬ÀýÈçSNMP¡£
ÍøÂç¹ÜÀíÆ½Ì¨ºÍÓ¦ÓõĿª·¢Õß¿ÉÒÔÓÃÕâЩAPIÀ´ºÍËûÃǵĹÜÀí»·¾³½øÐн»»¥£¬²¢½«Õâ¸ö½»»¥¹ý³Ì·â×°ÔÚÒ»¸öJMX¹ÜÀí×ÊÔ´ÖС£ÀýÈ磬ͨ¹ýSNMP¿ÉÒÔ¶ÔÒ»¸öÔËÐÐÓÐSNMP´úÀíµÄ½»»»»ú½øÐйÜÀí£¬²¢½«ÕâЩ¹ÜÀí½Ó¿Ú·â×°³ÉΪһ¸ö¹ÜÀí¹¹¼þ¡£ÔÚ¶¯Ì¬ÍøÂç¹ÜÀíÖУ¬¿ÉÒÔËæÊ±¸ü»»ÕâЩ¹ÜÀí¹¹¼þÒÔÊÊÓ¦ÐèÇó¡£
ÕâЩAPI¿ÉÒÔ°ï×鿪·¢Õ߸ù¾Ý×îͨ³£µÄ¹¤Òµ±ê×¼À´²¿ÊðËûÃǵĹÜÀíÆ½Ì¨ºÍÓ¦Óá£ÐµÄÍøÂ·¹ÜÀíµÄ½â¾ö·½°¸¿ÉÒÔºÍÏÖ´æµÄ»ù´¡½á¹¹ºÏΪһÌ壬ÕâÑù£¬ÏÖ´æµÄÍøÂç¹ÜÀíÒ²ÄܺܺõÄÀûÓûùÓÚJava¼¼ÊõµÄÍøÂç¹ÜÀíÓ¦Óá£
ÕâЩAPIĿǰÔÚJCP£¨Java Community Process£©ÄÚ×÷Ϊ¶ÀÁ¢µÄJSR£¨Java Specification Request£©¿ª·¢¡£
ËûÃǰüÀ¨£º
1)SNMP Manager API
2)CIM/WBEM manager and protocol API
1£®6 JMXµÄµ±Ç°ÊµÏÖ¼°Ó¦ÓÃ
×Ô´ÓSUN·¢²¼ÁËJMX¹æ·¶£¬Ðí¶à´ó¹«Ë¾·×·×Ðж¯ÆðÀ´£¬ÊµÏֹ淶»òÕßʵÏÖÏàÓ¦µÄ»ùÓÚJMXµÄÍøÂç¹ÜÀíϵͳ£¬ÏÂÃæÁгöÁ˵±Ç°µÄÖ÷ҪʵÏÖ¼°Ó¦ÓÃÇé¿ö£º1)SUNΪJMX¹æ·¶ÁË×÷³öÁËÏàÓ¦µÄ²Î¿¼ÊµÏÖ£¬²¢ÔÚ´Ë»ù´¡ÉÏ¿ª·¢ÁËÒ»¸öȫеÄÓÃÓÚÍøÂç¹ÜÀíµÄ²úÆ·JDMK£¨Java¶¯Ì¬¹ÜÀí¹¤¾ß¼¯£©£¬ÆäÖж¨ÒåÁË×ÊÔ´µÄ¿ª·¢¹ý³ÌºÍ·½·¨¡¢¶¯Ì¬JMX´úÀíµÄʵÏÖ¡¢Ô¶³Ì¹ÜÀíÓ¦ÓõÄʵÏÖ¡£Í¬Ê±£¬JDMKÒ²ÌṩÁËÒ»¸öÍêÕûµÄÌåϵ½á¹¹ÓÃÀ´¹¹Ôì·Ö²¼Ê½µÄÍøÂç¹ÜÀíϵͳ£¬²¢ÌṩÁ˶àÖÖÐÒéÊÊÅäÆ÷ºÍÁ¬½ÓÆ÷£¬ÈçSNMPÐÒéÊÊÅäÆ÷¡¢HTMLÐÒéÊÊÅäÆ÷¡¢HTTPÁ¬½ÓÆ÷¡¢RMIÁ¬½ÓÆ÷¡£
2)IBM TivoliʵÏÖÁËJMX¹æ·¶µÄ²úƷΪTivoliJMX£¬ËüΪJAVA¹ÜÀíÓ¦ÓóÌÐòºÍÍøÂçÌṩÁ˼ܹ¹¡¢Éè¼ÆÄ£Ê½¡¢Ò»Ð©API¼¯ºÍһЩ·þÎñ¡£
3)Adventnet¿ª·¢µÄ¹ØÓÚJMXµÄ²úƷΪAdventNet Agent Toolkit£¬ËüʹµÃ¶¨ÒåеÄSNMP MIB¡¢¿ª·¢JMXºÍJava SNMP AgentµÄ¹ý³Ì×Ô¶¯»¯¡£
4)JBossʵÏÖµÄJ2EEÓ¦Ó÷þÎñÆ÷ÒÔJMXΪ΢Äںˣ¬¸÷¸öÄ£¿éÒÔ¹ÜÀí¹¹¼þµÄÐÎʽÌṩÏàÓ¦µÄ·þÎñ¡£
5)BEAµÄWeblogicÓ¦Ó÷þÎñÆ÷Ò²½«JMX¼¼Êõ×÷Ϊ×Ô¼ºµÄ¹ÜÀí»ù´¡¡£
6)½ðµûµÄApusicÒ²ÊÇÒ»¸öÒÔJMXΪÄں˿ª·¢³öµÄJ2EEÓ¦Ó÷þÎñÆ÷¡£
Èý¡¢JMXµÄºÃ´¦¡£¿É¼õÉÙ¶ÔJAVAÓ¦ÓÃʵʩ¹ÜÀíµÄͶ×Ê
¡£ÌṩÁËÒ»¸ö¿ÉÉìËõµÄ¹ÜÀí¿ò¼Ü
¡£¼¯³ÉÏÖÓеĹÜÀí·½°¸£ºÈ磺WBEM£¬SNMP£¬TMN
¡£Ê¹ÓÃÏÖÓеıê×¼JAVA¼¼Êõ
¡£ÄÜʹÓÃδÀ´µÄһЩ¹ÜÀí¸ÅÄÈçJiniÁ¬½Ó¼¼Êõ¡¢Í¨Óü´²å¼´ÓᢷþÎñ¶¨Î»ÐÒé(Service Location Protocol)
¡£Ö»¶¨ÒåÁËһЩ¿ÉÒÔ·ÃÎʵĽӿÚËÄ¡¢JMX¼Ü¹¹µÄÁ˽â
JMXÓ¦¸Ã˵ÊǹØÓÚÍøÂçÓ¦ÓùÜÀíµÄµÄ¿ò¼Ü£¬Èç¹ûÄ㿪·¢ÁËÒ»¸ö±È½Ï¸´ÔÓµÄϵͳ£¬ÎÞÒÉÄãÒªÌṩÕâ¸öϵͳµÄ×ÔÉí¹ÜÀí ϵͳ£¬JMX¸ü¶àÓ¦ÓÃÊÇÌåÏÖÔÚServerÉÏ£¬Èç¹ûÄãҪʹÓÃjava¿ª·¢Ò»¸ö×Ô¼ºServer»ò¸´ÔÓµÄÓ¦ÓÃϵͳ£¬ÄÇÃ´ÍÆ¼öÄã»ùÓÚJMX¼Ü¹¹À´¿ª·¢£¬ JBoss 3.0 weblogicµÈ¾ÍÊÇ»ùÓÚJMX¿ª·¢µÄ·ûºÏJ2EE¹æ·¶µÄ·þÎñÆ÷Èí¼þ¡£
Á˽âJMX¿ÉÒÔʹÄãÉîÈëÁ˽âJ2EE·þÎñÆ÷£¬ ΪʲôÎÒÃÇÆ½Ê±Ëµ "EJB"ÊǸö±È½Ï"Weight"µÄ·½°¸Ñ¡Ôñ£¬ÆäÖÐÒ»¸öÔÒòÊÇJ2EE·þÎñÆ÷Èí¼þ±¾Éí Ò²ÊÇÄãµÄϵͳÖÐÒ»²¿·Ö£¬Ëü×÷ΪÄãϵͳµÄÈÝÆ÷£¬¶ÔÄãµÄϵͳÓÐÖÁ¹ØÖØÒªµÄ×÷Óã¬Èç¹ûÎÞ·¨Ö±½Ó½éÈë ¹ÜÀí»ò¡°µ÷½Ì¡±Ëü£¬ÄÇôÎÞÒÉÄãµÄϵͳ±¾Éí´æÔÚ×ÅÒþº¬µÄΣÏÕ£¬ ÏÖÔÚ£¬Í¨¹ýJMX£¬ÄãÏÖÔÚ¿ÉÒÔÉîÈëµ½ÄãJ2EEÈÝÆ÷ÄÚ²¿µÄ¹ÜÀíÁË¡£ (ºÃÏñ¹úÄÚ³öÏÖÁ˵ÚÒ»¸ö×Ô¼ºJ2ee·þÎñÆ÷£¬²»ÖªµÀÄÇÊDz»ÊÇ»ùÓÚJMX¿ª·¢µÄ?)
J2EE²¢²»ÄܸÅÀ¨ËùÓеÄÓ¦ÓÃÁìÓò£¬±ÈÈç¶ÔËٶȺÍÐÔÄÜÒªÇ󼫸ߵÄÓÎÏ·»ò¹ÉƱÐÐÇéµÈϵͳ¾ÍÐèÒª×Ô¼ºÖ±½ÓÀ´¿ª·¢Server£¬ Èç¹ûÊÇÄܹ»»ùÓÚJMX¿ª·¢£¬ÄÇô¿ÉÒÔ˵¾Í´ó´óÌá¸ß±àд¹ÜÀí³ÌÐòµÄЧÂÊ£¬¿ÉÒÔ½«ÄãµÄÄ£¿é±ä³ÉJMXµÄMBean£¬¿ÉÒÔͨ¹ýAgentÔÚ³ÌÐòÄÚ²¿»òÕßͨ¹ý WEB¹ÜÀíÒ³Ãæ¶ÔÄãµÄMBeanÄ£¿é½øÐгõʼ»¯ ÖØÆô ÒÔ¼°²ÎÊýÉèÖá£
JMXµÄºÃ´¦»¹ÓУº¿ÉÒÔ·½±ãÕûºÏÁ¬½ÓÏÖÓеÄJava¼¼Êõ£¬ÈçJNDI JDBC JTS¼°ÆäËü¡£ÌرðÊÇÄܹ»Ê¹ÓÃJiniµÄ²éѯ ·¢ÏÖ»úÖÆÒÔ¼°ÐÒ飬ÎÒÃÇÖªµÀ,JiniÌṩÁËÒ»ÖÖ·þÎñµÄ²éѯºÍ·¢ÏÖ»úÖÆ£¬ÕâЩservices¶¼¿ÉÒÔͨ¹ýJMX À´ÊµÏÖ¹ÜÀí¡£
ÏÖÔÚÎÒÃÇ¿ªÊ¼JMXµÄÁ˽⣺
1.µ½java.sun.comÊ×Ò³µÄJMXÒ³Ãæ£¬ÏÂÔØJMXµÄ¹æ¶¨ËµÃ÷ºÍSamples³ÌÐò¡£
2.°´ÕÕJMXµÄ˵Ã÷½øÐÐÒ»´ÎTutorial£¬Á˽âÈçºÎ¼ÓÈë ɾ³ý ÅäÖÃÒ»¸öMBean£¬TutorialÖÐÊÇÒÔSimpleMBeanΪÀý£¬ÄÇôÎÒÃÇÄÜ·ñ½¨Á¢Ò»¸ö×Ô¼ºµÄMBean?ÎÒÃÇÀ´×öÒ»¸öHello µÄMBean£¬ÕâÀïÓÐÒ»¸öС¹Ø¼üµã£¬ÄãµÄclassÈ¡ÃûÓиö¹æÔò£¬ ÐèÒªÒÔMBeanΪ½á⣬ÈçÕâÀïÎÒÃÇÈ¡ÃûΪHelloMbean:
public interface HelloMBean {¡¡¡¡// management attributes
¡¡¡¡public String getName();
¡¡¡¡public void setName(String name);¡¡¡¡// management operations
¡¡¡¡public void print();}
ÔÚÕâ¸öClassÀÓÐÒ»¸öÒþº¬attributes: name, ÌṩÁËsetºÍgetµÄ·½·¨£¬Í¬Ê±ÓÐÒ»¸ö²Ù×÷·½·¨print()£º
ÔÙ¶¨ÒåÒ»¸öconcreteÀà:
public class Hello implements HelloMBean {
¡¡¡¡private String name = "";
¡¡¡¡public String getName() {
¡¡¡¡return name;
¡¡¡¡}¡¡¡¡public void setName(String name) {
¡¡¡¡this.name = name;
¡¡¡¡}¡¡¡¡public void print() {
¡¡¡¡System.out.println("Hello, " + name + "!!" );
¡¡¡¡}
}
ÕâÑùÒ»¸ö¼òµ¥µÄMBean¾Í×öºÃÁË£¬ÎÒÃÇ¿ÉÒÔͨ¹ýadmin½çÃæ¼ÓÈëÕâ¸öHello£¬ÔÙ°´ TutorialÆô¶¯BaseAgent£¬ÔÚAgent AdministrationÖвο¼SimpleÌîÈ룺
Domain: Standard_Hello_MBeansKeys : name=Hello,number=1
Java Class: Hello
½«³öÏÖCreate SuccessfulÐÅÏ¢¡£½øÈëMBean View ¸øName¸³Öµ£¬µã°´Apply £¬È»ºóÔÙ°´print£¬ÕâÊÇÄãµÄHelloÖеķ½·¨£¬ÔÚ¿ØÖÆÌ¨Äã»á¿´µ½Êä³ö¡£
ÊDz»ÊǺܾªÆæHelloÖÐµÄ attributes ºÍoperationsÄܱ»¶¯Ì¬µÄ·ÃÎʺͿØÖÆ£¿ ÒѾÒþÔ¼¸Ðµ½JMXµÄ¼Ü¹¹ÔÀíÁ˰ɣ¿
ÏÂÃæÔÙÉîÈëÃ÷ȷһЩ¸ÅÄ
ÉÏÃæHelloMBean×ÊÔ´ÊÇͨ¹ýadminÕâÑùµÄHTTP WEB½çÃæ¹ÜÀí£¬ÕâÖÖ¹ÜÀí×ÊÔ´·½Ê½ÊÇÊôÓÚJMXµÄDistributed·þÎñ²ã£¬ JMX ͨ¹ýDistributed²ãÄܹ»²¿ÊðºÍ¹ÜÀíMBean×ÊÔ´¡£¾ÍÏóÉÏÃæµÄÀý×Ó£¬ÊÇͨ¹ýHtmlAdaptorÌṩµÄHTTP WEB½çÃæÀ´·½ÃæµÄά»¤¹ÜÀíHelloMBean.ÄÇôÎÒÃÇÄÜ·ñÔÚ³ÌÐòÖÐ×Ô¶¯¹ÜÀíºÍ²¿ÊðÎÒµÄMBean£¿µ±È»¿ÉÒÔ£¬ÕâÊÇͨ¹ýAgent²ãÀ´Íê³É£¬ÏÖÔÚÎÒÃÇÒѾÓÐÁËÕâ¸ö²ã´Î£¬MBeanËùÔÚµÄ×ÊÔ´²ã£¬
×îÍâÃæµÄDistributed·þÎñ²ã£¬Distributed·þÎñ²ãÊÇͨ¹ýAgent²ãÀ´·ÃÎÊMBean×ÊÔ´µÄ£¬¿´¿´ÏÂÃæÀ´×ÔSun¹«Ë¾JMX¹æ¶¨µÄ¼Ü¹¹Í¼£º
´ÓͼÖп´³ö£¬Agent Level(Agent²ã)°üÀ¨MBean ServerºÍAgent Services,ÄÇôÎÒÃÇÀ´×öÒ»¸öÉÏÃæÀý×ÓHelloMBeanµÄAgent£º
// CREATE the MBeanServer
//
System.out.println("\n\tCREATE the MBeanServer.");
MBeanServer server = MBeanServerFactory.createMBeanServer();// CREATE Registe HelloMBean
//
System.out.println("\n\tCREATE, REGISTER a new Hello Standard_MBean:");
HelloMBean helloMBean = new Hello();ObjectName hello_name = null;
try {
hello_name = new ObjectName("Standard_Hello_MBeans:name=Hello,number=1");
System.out.println("\tOBJECT NAME = " + hello_name);//½«HelloMBean×¢²áµ½MBeanServerÖÐÈ¥
server.registerMBean(helloMBean, hello_name);
}
catch (Exception e) {
e.printStackTrace();
return;
}ÏòMBeanServer×¢²áºó£¬ÒÔºóJMX¾ÍÖªµÀÓÐÁËÕâ¸öHelloMBean×ÊÔ´¡£
¹ÜÀíÒ»¸öagentµÄMBean×ÊÔ´»òʹÓÃËüÌṩµÄ·þÎñ±ØÐëͨ¹ýÒ»¸öprotocol adaptor »òÕßconnector,adaptor »òÕßconnectorÊôÓÚDistributed layer level(Distributed·þÎñ²ã)£¬ÎÒÃÇÉÏÃæÀý×ÓÖÐͨ¹ýHTTP WEB½çÃæ¹ÜÀíHelloMBean¾ÍÊÇä¯ÀÀÆ÷ͨ¹ýHtmlAdaptorÕâ¸öadaptorÀ´ÊµÏֵġ£
ͨ¹ý±¾ÆªÎÄÕ£¬ÄãÓ¦¸Ã´óÌåÁ˽âÁËJMXµÄ¼Ü¹¹ºÍһЩÔÀíºÍÓ¦Óã¬ÔÙÉîÈë¿ÉÒÔÑо¿SUNµÄJMX Specification.
-
Ò»±¾ºÃÊ飺 ¿ª·¢ÕßÍ»»÷£ºJava WebÖ÷Á÷¿ò¼ÜÕûºÏ¿ª·¢
2008-5-07
ºÜÉÙ¿´¼ûÕâôºÃµÄÊéÁË£¬ÏÖÔںܶ༼ÊõÊ飬¶¼ÊǶ«Æ´Î÷´Õ£¬Ã»ÓÐÕÅ·¨£¬ÕâÒ»±¾£¬ÎÒ¾õµÃÕæµÄºÜºÃ£¬ºÜºÏÊʲÅÈëÃŵÄÅóÓÑ¿´¡£×÷¡¡¡¡Õߣº ÁõÖбø¡¡³ö °æ É磺 µç×Ó¹¤Òµ³ö°æÉç ³ö°æÊ±¼ä£º 2008-1-1¶¨¼Û£º£¤89.80¡¡
±à¼ÍƼöÿһ¸ö¿ª·¢Õߣ¬¶¼ÊÇÈí¼þÊÀ½çÀïµÄÁбø£¡Ã¿Ò»¸ö¼¼Êõ£¬¶¼ÊÇǰ½øµÀ·Éϵı¤½¸¡£
¡¡¡¡´ÓÁãÆð²½£¬ÑÐò½¥½ø£¬×¢ÖØÊµÕ½£¬±¾Êé´Ó²»Í¬½Ç¶ÈÆÊÎöÁËJava WebÕûºÏ¿ª·¢ÖеģºÈý´ó»ù´¡¼¼ÊõJSP/JavaBean/Servlet£¬Èý´óºËÐÄ¿ò¼ÜStruts/Hibernate/Spring£¬ËÄÖÖ¸¨Öú¼¼ÊõJDBC/Log4j/Sitemesh/JUnit£¬MTEC¿ª·¢»·¾³MySQL/Tomcat/Eclipse/CVS¡£
¡¡¡¡ÒÔJ2EE£¨JSP¡¢JavaBean¡¢Servlet£©¡¢SSH£¨Struts¡¢Spring¡¢Hibernate£©ÎªºËÐļ¼Êõ£¬Öð²½¹¹½¨Ê®´óÈí¼þ¼Ü¹¹ÔÐÍ£¬¹¹½¨µÄÿ¡ª¸öϵͳÔÐͶ¼¿ÉÒÔÖ±½Ó×÷Ϊϵͳ¿ª·¢µÄ»ù´¡
¡¡¡¡ÒÔ¾µä×éºÏMTEC£¬¼´MySQL¡¢Tomcat¡¢Eclipse¡¢CVS´îÅä¾µäµÄ¿ª·¢»·¾³¡£MySQLÊÇÃâ·Ñ¿ªÔ´µÄÊý¾Ý¿â£¬TomcatÊÇÃâ·Ñ¿ªÔ´µÄWeb·þÎñÆ÷£¬EclipseÊÇÃâ·Ñ¿ªÔ´µÄJava¼¯³É¿ª·¢¹¤¾ß£¬CVSÊÇÁ÷Ðеİ汾¿ØÖƹ¤¾ß£¬Í¨¹ýMTEC½«ÕâËÄÕßµÄÓŵ㷢»Óµ½¼«Ö¡£
¡¡¡¡Ê¹ÓÃÁ÷Ðеĸ¨Öú¼¼Êõ£¬°üÀ¨JDBC¡¢Log4j¡¢Sitemesh¡¢JUnit¡£JDBCÓÃÒÔ½øÐÐÊý¾Ý¿â²Ù×÷£¬Log4jÓÃÒԼǼÈÕÖ¾SitemeshÓÃÒÔ½øÐÐÕ¾µã²¼¾Ö£¬JUnitÓÃÒÔ½øÐе¥Ôª²âÊÔ¡£
¡¡¡¡ÒԵǼ¡¢×¢²á¡¢Í˳öΪ»ù´¡ÐèÇó¹¹½¨Ê®´óÈí¼þ¼Ü¹¹ÔÐÍ£¬²¢ÔÚ×îÖÕµÄÔÐÍSSH£¨Struts+Spring+Hibemate£©ºÍSSH2£¨Struts 2+Spring+Hibernate£©»ù´¡ÉϷֱ𿪷¢ÍêÕûµÄ°ì¹«×Ô¶¯»¯ÏµÍ³¡£
ÄÚÈݼò½é±¾ÊéÏêϸ½éÉÜÁËJava WebÈí¼þ¼Ü¹¹Öеĸ÷ÖÖ¿ª·¢¼¼Êõ¡£Ö÷ÒªÄÚÈݰüÀ¨£ºÒÔMySQLΪÊý¾Ý¿â¡¢TomcatΪWeb·þÎñÆ÷¡¢EclipseΪ¿ª·¢¹¤¾ß¡¢CVSΪ°æ±¾¿ØÖƹ¤¾ßµÄ¿ª·¢»·¾³µÄ¹¹½¨¹ý³Ì£»»ùÓÚJSP¡¢JavaBean¡¢Servlet¼¼ÊõʵÏÖ3ÖÖJ2EEµÄ»ù´¡¼Ü¹¹£»·Ö3ÆªÖØµã½²½âStruts¡¢Hibernate¡¢Spring¿ò¼Ü¼¼Êõ¼°ÕâЩ¼¼ÊõµÄÕûºÏÓ¦Óã»»ùÓÚStruts1µÄSSHÕûºÏ¼Ü¹¹£¬²¢¿ª·¢¸öÈËͨѶ¼ºÍÒ»¸öÍêÕûµÄ°ì¹«×Ô¶¯»¯ÏµÍ³£¬ÊµÏֵŦÄܰüÀ¨Èճ̰²ÅÅ¡¢¹¤×÷ÈÕÖ¾¡¢¶ÌÏûÏ¢¹ÜÀí¡¢¹«¸æ¹ÜÀí¡¢»áÒé¹ÜÀí£»»ùÓÚStruts2µÄSSH2ÕûºÏ¼Ü¹¹£¬²¢Ôڴ˼ܹ¹»ù´¡ÉÏʵÏÖÒ»¸öÍêÕûµÄ°ì¹«×Ô¶¯»¯ÏµÍ³¡£ÔÚ±¾Êé¼Ü¹¹½²½âµÄ¹ý³ÌÖУ¬´©²å½éÉÜÁËJDBC¡¢Log4j¡¢Sitemesh¡¢JUnit¼¼Êõ¡£
¡¡¡¡ËæÊ鸽Ôù¹âÅÌÄÚÈݰüÀ¨±¾Êé10Öּܹ¹ÔÐͳÌÐò°ü¡¢¸öÈËͨѶ¼¼°°ì¹«×Ô¶¯»¯ÏµÍ³Ô´³ÌÐò¡£
¡¡¡¡±¾ÊéÄÚÈÝÑÐò½¥½ø£¬Í¨Ë×Ò×¶®£¬¸²¸ÇÁËJava Web¿ª·¢µÄ×îÁ÷Ðм¼Êõ£¬ÎÞÂÛ¶ÔÓÚJava Web¼Ü¹¹Éè¼Æ»¹ÊÇÈí¼þ¿ª·¢£¬±¾Êé¶¼ÊǾ«Í¨¿ª·¢Java WebÓ¦Óõıر¸µÄʵÓÃÊֲᡣ
¡¡¡¡±¾ÊéÃæÏò¶ÁÕß¶ÔÏó£ºJavaºÍJ2EEÈí¼þ¼Ü¹¹Ê¦ÓëÉè¼ÆÊ¦¡¢Èí¼þ¿ª·¢¹¤³Ìʦ¡¢Èí¼þ¿ª·¢ÏîÄ¿¼°¼¼Êõ¾Àí¡£
Ŀ¼Ð÷ÑÔ
¡¡Ò»¡¢Á˽âÈí¼þ¼Ü¹¹
¡¡¡¡£¨Ò»£©»ù±¾¸ÅÄî
¡¡¡¡£¨¶þ£©Èí¼þ¼Ü¹¹µÄÀúÊ·
¡¡¡¡£¨Èý£©Èí¼þ¼Ü¹¹µÄÄ¿±ê
¡¡¶þ¡¢J2EE¿ª·¢Ä£ÐÍ·ÖÎö
¡¡¡¡£¨Ò»£©Ò»²ã¼Ü¹¹Ä£Ê½
¡¡¡¡£¨¶þ£©Á½²ã¼Ü¹¹Ä£Ê½Model 1
¡¡¡¡£¨Èý£©Èý²ã¼Ü¹¹Ä£Ê½Model 2
¡¡¡¡£¨ËÄ£©¶à²ã¼Ü¹¹Ä£Ê½
¡¡Èý¡¢J2EE¼Ü¹¹¼¼ÊõÑ¡Ôñ
¡¡¡¡£¨Ò»£©JSPÒ³Ãæ¼¼Êõ
¡¡¡¡£¨¶þ£©JavaBean×é¼þ¼¼Êõ
¡¡¡¡£¨Èý£©Servlet¼¼Êõ
¡¡¡¡£¨ËÄ£©Struts 1.2ÓëStruts 2.0
¡¡¡¡£¨Î壩Hibernate 3.0
¡¡¡¡£¨Áù£©Spring 2.0
¡¡ËÄ¡¢¿ª·¢¹¤¾ßÈí¼þ¼°°æ±¾Ñ¡Ôñ
¡¡¡¡£¨Ò»£©JDKÈí¼þ
¡¡¡¡£¨¶þ£©Êý¾Ý¿âÈí¼þMySQL
¡¡¡¡£¨Èý£©Web·þÎñÆ÷Tomcat
¡¡¡¡£¨ËÄ£©¼¯³É¿ª·¢¹¤¾ßEclipse+MyEclipse
¡¡¡¡£¨Î壩°æ±¾¿ØÖÆÈí¼þCVS
¡¡Îå¡¢¶¨Î»¿ª·¢Ä¿±ê
¡¡¡¡£¨Ò»£©demo(JSP).zip
¡¡¡¡£¨¶þ£©demo(JSP+JavaBean).zip
¡¡¡¡£¨Èý£©demo(JSP+JavaBean+Servlet).zip
¡¡¡¡£¨ËÄ£©demo(Struts).zip
¡¡¡¡£¨Î壩demo(Struts+Hibernate).zip
¡¡¡¡£¨Áù£©demo(Spring).zip
¡¡¡¡£¨Æß£©demo(Spring+Hibernate).zip
¡¡¡¡£¨°Ë£©demo(Struts+Spring).zip
¡¡¡¡£¨¾Å£©demo(Struts+Spring+Hibernate).zip
¡¡¡¡£¨Ê®£©demo(Struts2+Hibernate+Spring).zip
¡¡Áù¡¢¼ÌÐøÏÂÒ»Ö÷Ì⣺ÐèÇóÉè¼Æ
µÚ1²¿·Ö Æð²½Æª
¡¡µÚ1Õ ÐèÇóÉè¼Æ
¡¡¡¡1.1 Èí¼þÐèÇó
¡¡¡¡¡¡1.1.1 Èí¼þÐèÇóµÄ¶¨Òå
¡¡¡¡¡¡1.1.2 Èí¼þÐèÇóµÄ²ã´Î
¡¡¡¡¡¡1.1.3 Èí¼þ·ÖÎöµÄ¹ý³Ì
¡¡¡¡1.2 Éè¼ÆÐèÇó¹¦ÄÜ
¡¡¡¡1.3 Éè¼ÆÏµÍ³½çÃæ
¡¡¡¡¡¡1.3.1 µÇ¼½çÃæ
¡¡¡¡¡¡1.3.2 µÇ¼ºóµÄ»¶Ó½çÃæ
¡¡¡¡¡¡1.3.3 ×¢²á½çÃæ
¡¡¡¡1.4 ¼ÌÐøÏÂÒ»Ö÷Ì⣺¹¹½¨Êý¾Ý¿â
¡¡µÚ2Õ ¹¹½¨Êý¾Ý¿â
¡¡¡¡2.1 Éè¼ÆÊý¾Ý¿â±í
¡¡¡¡¡¡2.1.1 Êý¾Ý¿âʵÌå·ÖÎö
¡¡¡¡¡¡2.1.2 Éè¼ÆÓû§±íuser
¡¡¡¡2.2 °²×°MySQL
¡¡¡¡¡¡2.2.1 °²×°MySQL
¡¡¡¡¡¡2.2.2 Æô¶¯MySQL
¡¡¡¡2.3 ´´½¨Êý¾Ý¿â
¡¡¡¡¡¡2.3.1 MySQL¿Í»§¶ËÈí¼þSQL-Front
¡¡¡¡¡¡2.3.2 н¨Êý¾Ý¿âdemo
¡¡¡¡¡¡2.3.3 н¨Óû§±íuser
¡¡¡¡¡¡2.3.4 Ìí¼ÓÒ»ÌõÓû§Êý¾Ý
¡¡¡¡2.4 ¼ÌÐøÏÂÒ»Ö÷Ì⣺¹¹½¨¿ª·¢»·¾³
¡¡µÚ3Õ ¹¹½¨¿ª·¢»·¾³
¡¡¡¡3.1 ¹¹½¨CVS·þÎñÆ÷
¡¡¡¡¡¡3.1.1 °²×°CVS·þÎñÆ÷
¡¡¡¡¡¡3.1.2 ÅäÖÃCVS´úÂë×ÊÔ´¿â
¡¡¡¡¡¡3.1.3 Ìí¼ÓCVSÕË»§
¡¡¡¡3.2 ¹¹½¨¿Í»§¶Ë¿ª·¢»·¾³
¡¡¡¡¡¡3.2.1 °²×°JDK
¡¡¡¡¡¡3.2.2 °²×°Tomcat
¡¡¡¡¡¡3.2.3 °²×°Eclipse
¡¡¡¡¡¡3.2.4 ÖÐÎÄ»¯Eclipse
¡¡¡¡¡¡3.2.5 °²×°MyEclipse
¡¡¡¡3.3 ÅäÖÃEclipse¼¯³É¿ª·¢»·¾³
¡¡¡¡¡¡3.3.1 ¼¯³ÉÅäÖÃJDK
¡¡¡¡¡¡3.3.2 ¼¯³ÉÅäÖÃTomcat
¡¡¡¡¡¡3.3.3 Á¬½ÓCVS·þÎñÆ÷
¡¡¡¡3.4 ¼ÌÐøÏÂÒ»Ö÷Ì⣺¿ªÊ¼Öð²½¹¹½¨JSP¡¢JavaBean¡¢Servlet¼Ü¹¹
µÚ2²¿·Ö J2EE»ù´¡¼Ü¹¹Æª
¡¡µÚ4Õ ¿ªÊ¼¹¹½¨ÏîÄ¿
¡¡¡¡4.1 ¹¹½¨ÐµÄÏîÄ¿
¡¡¡¡¡¡4.1.1 ÔÚEclipseÏÂн¨ÏîÄ¿
¡¡¡¡¡¡4.1.2 ¹²ÏíÏîÄ¿µ½CVS·þÎñÆ÷
¡¡¡¡¡¡4.1.3 ´ÓCVS·þÎñÆ÷È¡µÃÏîÄ¿µ½±¾µØ
¡¡¡¡4.2 ÈçºÎʹÓÃCVS½øÐÐÐ×÷¿ª·¢
¡¡¡¡¡¡4.2.1 ʹ±¾µØÎļþÓëCVS×ÊÔ´¿âͬ²½
¡¡¡¡¡¡4.2.2 ½«±¾µØÎļþÌá½»µ½×ÊÔ´¿â
¡¡¡¡¡¡4.2.3 ´Ó×ÊÔ´¿â¸üÐÂÎļþ
¡¡¡¡¡¡4.2.4 ¹ÜÀí×ÊÔ´¿â
¡¡¡¡4.3 ÔÚEclipseÖз¢²¼ÏîÄ¿µ½Tomcat²¢ÔËÐÐ
¡¡¡¡¡¡4.3.1 ·¢²¼ÏîÄ¿µ½Tomcat
¡¡¡¡¡¡4.3.2 Æô¶¯Tomcat
¡¡¡¡¡¡4.3.3 ÔËÐÐÏîÄ¿
¡¡¡¡4.4 Java Web²¿ÊðÃèÊö·ûweb.xml
¡¡¡¡¡¡4.4.1 Í·ÔªËØ
¡¡¡¡¡¡4.4.2 ÎĵµÀàÐÍÉêÃ÷
¡¡¡¡¡¡4.4.3 WebÓ¦ÓÃͼ±ê
¡¡¡¡¡¡4.4.4 WebÓ¦ÓÃÃû³Æ
¡¡¡¡¡¡4.4.5 WebÓ¦ÓÃÃèÊö
¡¡¡¡¡¡4.4.6 ·Ö²¼Ê½ÊôÐÔ
¡¡¡¡¡¡4.4.7 ÉÏÏÂÎIJÎÊý
¡¡¡¡¡¡4.4.8 ¹ýÂËÆ÷¶¨Òå
¡¡¡¡¡¡4.4.9 ¹ýÂËÆ÷Ó³Éä
¡¡¡¡¡¡4.4.10 ¼àÌýÆ÷
¡¡¡¡¡¡4.4.11 Servlet¶¨Òå
¡¡¡¡¡¡4.4.12 ServletÓ³Éä
¡¡¡¡¡¡4.4.13 ¿ØÖƻỰ³¬Ê±
¡¡¡¡¡¡4.4.14 MIMEÀàÐÍÓ³Éä
¡¡¡¡¡¡4.4.15 Ö¸¶¨»¶ÓÎļþÒ³
¡¡¡¡¡¡4.4.16 ´íÎó´¦ÀíÒ³
¡¡¡¡¡¡4.4.17 ¶¨Î»TLD
¡¡¡¡¡¡4.4.18 ×ÊÔ´¹ÜÀí¶ÔÏó
¡¡¡¡¡¡4.4.19 ×ÊÔ´¹¤³§Ê¹ÓõÄ×ÊÔ´
¡¡¡¡¡¡4.4.20 °²È«ÏÞÖÆ
¡¡¡¡¡¡4.4.21 µÇ¼ÑéÖ¤
¡¡¡¡¡¡4.4.22 °²È«½ÇÉ«
¡¡¡¡¡¡4.4.23 Web»·¾³²ÎÊý
¡¡¡¡¡¡4.4.24 EJBÉêÃ÷
¡¡¡¡¡¡4.4.25 ±¾µØEJBÉêÃ÷
¡¡¡¡¡¡4.4.26 Servlet 2.4ÐÂÔö±êÇ©
¡¡¡¡4.5 ¼ÌÐøÏÂÒ»Ö÷Ì⣺¿ª·¢JSP¼Ü¹¹
¡¡µÚ5Õ ¿ª·¢JSP¿ò¼Ü
¡¡¡¡5.1 JSP»ù±¾Óï·¨
¡¡¡¡¡¡5.1.1 Ò»¸öµäÐ͵ÄJSPÎļþ
¡¡¡¡¡¡5.1.2 Á½ÖÖ×¢ÊÍÀàÐÍ
¡¡¡¡¡¡5.1.3 3¸ö½Å±¾ÔªËØ
¡¡¡¡¡¡5.1.4 3¸öÖ¸ÁîÔªËØ
¡¡¡¡¡¡5.1.5 8¸ö¶¯×÷Ö¸Áî
¡¡¡¡5.2 JSPÄÚÖöÔÏó
¡¡¡¡¡¡5.2.1 Request£ºÇëÇó¶ÔÏó
¡¡¡¡¡¡5.2.2 Response£ºÏìÓ¦¶ÔÏó
¡¡¡¡¡¡5.2.3 Session£º»á»°¶ÔÏó
¡¡¡¡¡¡5.2.4 Application£ºÓ¦ÓóÌÐò¶ÔÏó
¡¡¡¡¡¡5.2.5 Out£ºÊä³ö¶ÔÏó
¡¡¡¡¡¡5.2.6 Cookie£º¿Í»§¶Ë¶ÔÏó
¡¡¡¡¡¡5.2.7 Config£ºÅäÖöÔÏó
¡¡¡¡¡¡5.2.8 Page£ºÒ³Ãæ¶ÔÏó
¡¡¡¡¡¡5.2.9 PageContext£ºÒ³ÃæÉÏÏÂÎĶÔÏó
¡¡¡¡¡¡5.2.10 Exception£ºÀýÍâ¶ÔÏó
¡¡¡¡5.3 JDBCºËÐļ¼Êõ
¡¡¡¡¡¡5.3.1 ͨ¹ýConnection¶ÔÏó½¨Á¢Êý¾Ý¿âÁ¬½Ó
¡¡¡¡¡¡5.3.2 ͨ¹ýDatabaseMetaData¶ÔÏóÁ˽âÊý¾Ý¿âµÄÐÅÏ¢
¡¡¡¡¡¡5.3.3 ʹÓÃStatement¶ÔÏó
¡¡¡¡¡¡5.3.4 ½á¹û¼¯ResultSet¶ÔÏó
¡¡¡¡¡¡5.3.5 PreparedStatement½Ó¿Ú
¡¡¡¡¡¡5.3.6 CallableStatement¶ÔÏó
¡¡¡¡5.4 ´Ójdbc_blankÅäÖÃÁ¬½ÓMySQL²¢½øÐвâÊÔ
¡¡¡¡¡¡5.4.1 Ìí¼ÓMySQLÇý¶¯mysq1-2.0.4.jar
¡¡¡¡¡¡5.4.2 Êý¾Ý¿â²ÎÊýÎļþinc.jsp
¡¡¡¡¡¡5.4.3 ²âÊÔMySQLÁ¬½Ótestjdbc.jsp
¡¡¡¡5.5 ¿ª·¢JSPÏÔÊ¾Ò³ÃæºÍÏìÓ¦´¦ÀíÒ³Ãæ
¡¡¡¡¡¡5.5.1 µÇÂ¼Ò³Ãælogin.jsp
¡¡¡¡¡¡5.5.2 µÇ¼ÑéÖ¤²Ù×÷login_action.jsp
¡¡¡¡¡¡5.5.3 »¶ÓÒ³Ãæwelcome.jsp
¡¡¡¡¡¡5.5.4 Í˳ö²Ù×÷logout.jsp
¡¡¡¡¡¡5.5.5 ×¢²áÒ³Ãæregister.jsp
¡¡¡¡¡¡5.5.6 ×¢²áÓû§²Ù×÷register_action.jsp
¡¡¡¡5.6 ¼Ü¹¹1£ºdemo(JSP).zip
¡¡¡¡¡¡5.6.1 ³ÌÐò½á¹¹Í¼
¡¡¡¡¡¡5.6.2 ϵͳ¼Ü¹¹Í¼
¡¡¡¡¡¡5.6.3 ÈçºÎÔڸüܹ¹ÉÏ¿ª·¢ÐµĹ¦ÄÜ
¡¡¡¡5.7 ¼ÌÐøÏÂÒ»Ö÷Ì⣺ʹÓÃJavaBean×é¼þ´¦ÀíÒµÎñÂß¼
¡¡µÚ6Õ ¿ª·¢JSP+JavaBean¿ò¼Ü
¡¡¡¡6.1 JavaBean¼¼Êõ»ù´¡
¡¡¡¡¡¡6.1.1 JavaBean¼ò½é
¡¡¡¡¡¡6.1.2 Ò»¸ö¼òµ¥µÄJavaBeanµÄÀý×Ó
¡¡¡¡¡¡6.1.3 JavaBeanÊôÐÔ
¡¡¡¡¡¡6.1.4 JSPÓëJavaBean½áºÏ
¡¡¡¡¡¡6.1.5 JSPÓëJavaBean½áºÏʵÀý
¡¡¡¡6.2 ¿ª·¢Êý¾Ý¿âµ×²ã´¦ÀíJavaBean¡ªDBAccess.java
¡¡¡¡¡¡6.2.1 ¶¨ÒåJavaBean±äÁ¿
¡¡¡¡¡¡6.2.2 ±àдgetter/setterº¯Êý
¡¡¡¡¡¡6.2.3 ´´½¨Êý¾Ý¿âÁ¬½Ó
¡¡¡¡¡¡6.2.4 ¸üÐÂSQLº¯Êý
¡¡¡¡¡¡6.2.5 ²éѯSQLº¯Êý
¡¡¡¡¡¡6.2.6 ¹Ø±ÕÊý¾Ý¿âÁ¬½Ó¶ÔÏó
¡¡ 6.3 ¿ª·¢JavaBeanÒµÎñÂß¼×é¼þ¡ªUserBean.java
¡¡¡¡¡¡6.3.1 µÇ¼ÑéÖ¤º¯Êý
¡¡¡¡¡¡6.3.2 ÐÞ¸Älogin_action.jspµ÷ÓÃJavaBean
¡¡¡¡¡¡6.3.3 Óû§×¢²áʱ¼ì²éÓû§ÃûÊÇ·ñ´æÔÚ
¡¡¡¡¡¡6.3.4 Ôö¼ÓÒ»¸öÓû§
¡¡¡¡¡¡6.3.5 ÐÞ¸Äregister_action.jspµ÷ÓÃJavaBean
¡¡¡¡6.4 ¼Ü¹¹2£ºdemo(JSP+JavaBean).zip
¡¡¡¡¡¡6.4.1 ³ÌÐò½á¹¹Í¼
¡¡¡¡¡¡6.4.2 ϵͳ¼Ü¹¹Í¼
¡¡¡¡¡¡6.4.3 ÈçºÎÔڸüܹ¹ÉÏ¿ª·¢ÐµĹ¦ÄÜ
¡¡¡¡6.5 ¼ÌÐøÏÂÒ»Ö÷Ì⣺ʹÓÃServlet½ÓÊÕÓû§ÇëÇó
¡¡µÚ7Õ ¿ª·¢JSP+JavaBean+Servlet¿ò¼Ü
¡¡¡¡7.1 Servlet¼¼Êõ»ù´¡
¡¡¡¡¡¡7.1.1 Ò»¸ö¼òµ¥µÄServlet
¡¡¡¡¡¡7.1.2 Servlet»ù±¾¸ÅÄî
¡¡¡¡¡¡7.1.3 ServletÉúÃüÖÜÆÚ
¡¡¡¡¡¡7.1.4 ServletµÄÖØÒªº¯Êý
¡¡¡¡7.2 Servlet¾µäʵÀý
¡¡¡¡¡¡7.2.1 ±àÂë¹ýÂËÆ÷
¡¡¡¡¡¡7.2.2 Õ¾µã¼ÆÊý¼àÌýÆ÷
¡¡¡¡7.3 ¿ª·¢Servlet½ÓÊÕÓû§ÇëÇóUserServlet
¡¡¡¡¡¡7.3.1 ÔÚweb.xmlÖÐÌí¼ÓServletÅäÖÃ
¡¡¡¡¡¡7.3.2 н¨com.demo.servlet.UserServlet
¡¡¡¡¡¡7.3.3 ´¦ÀíµÇ¼ÑéÖ¤Servlet
¡¡¡¡¡¡7.3.4 ´¦ÀíÍ˳öServlet
¡¡¡¡¡¡7.3.5 ´¦Àí×¢²áServlet
¡¡¡¡7.4 ¼Ü¹¹3£ºdemo(JSP+JavaBean+Servlet).zip
¡¡¡¡¡¡7.4.1 ³ÌÐò½á¹¹Í¼
¡¡¡¡¡¡7.4.2 ϵͳ¼Ü¹¹Í¼
¡¡¡¡¡¡7.4.3 ÈçºÎÔڸüܹ¹ÉÏ¿ª·¢ÐµĹ¦ÄÜ
¡¡¡¡7.5 ¼ÌÐøÏÂÒ»Ö÷Ì⣺¸Ä½¨Struts¼Ü¹¹
µÚ3²¿·Ö Struts¼Ü¹¹Æª
¡¡µÚ8Õ ¹¹½¨Struts¿ª·¢»·¾³
¡¡¡¡8.1 µÚÒ»ÖÖ·½Ê½£ºÊ¹ÓÃMyEclipseÌí¼ÓStruts¿ª·¢»·¾³
¡¡¡¡8.2 µÚ¶þÖÖ·½Ê½£ºÊÖ¶¯Ìí¼ÓStruts¿ª·¢»·¾³
¡¡¡¡8.3 ÅäÖÃStrutsÈÕÖ¾×é¼þ
¡¡¡¡¡¡8.3.1 Ìí¼ÓÈÕÖ¾×é¼þ°ü
¡¡¡¡¡¡8.3.2 Ìí¼ÓÈÕÖ¾ÅäÖÃÎļþ
¡¡¡¡¡¡8.3.3 ÐÞ¸Äcommons-logging.propertiesµ÷ÓÃLog4j
¡¡¡¡¡¡8.3.4 Log4jÅäÖÃÎļþlog4j.properties
¡¡¡¡8.4 ¼ÌÐøÏÂÒ»Ö÷Ì⣺¿ª·¢StrutsºËÐŦÄÜ
¡¡µÚ9Õ ¿ª·¢StrutsºËÐŦÄÜ
¡¡¡¡9.1 StrutsÄÚ²¿»úÖÆ
¡¡¡¡¡¡9.1.1 MVCģʽ
¡¡¡¡¡¡9.1.3 StrutsºËÐÄ×é¼þÎļþ
¡¡¡¡¡¡9.1.2 StrutsÌåϵ½á¹¹
¡¡¡¡¡¡9.1.4 Struts¹¤×÷Á÷³Ì
¡¡¡¡9.2 Struts¿ª·¢Á÷³Ì
9.2.1 Struts¿ª·¢Á÷³Ìͼ
¡¡¡¡¡¡9.2.2 ±àдÊäÈë±íµ¥Ò³Ãæinput.jsp
¡¡¡¡¡¡9.2.3 ÅäÖÃstruts-config.xml
¡¡¡¡¡¡9.2.4 ±àдActionForm BeanÀà
¡¡¡¡¡¡9.2.5 ±àдAction´¦ÀíÀà
¡¡¡¡¡¡9.2.6 ±àд·µ»ØJSPÒ³Ãæ
¡¡¡¡9.3 StrutsÅäÖÃÎļþÏê½â¡ªstruts-config.xml
¡¡¡¡¡¡9.3.1 ÅäÖÃÊý¾ÝÔ´£ºÔªËØ
¡¡¡¡¡¡9.3.2 ÅäÖÃActionForm£ºÔªËØ
¡¡¡¡¡¡9.3.3 ÅäÖÃÈ«¾ÖÒì³£´¦Àí£ºÔªËØ
¡¡¡¡¡¡9.3.4 ÅäÖÃÈ«¾ÖÌø×ª£ºÔªËØ
¡¡¡¡¡¡9.3.5 ÅäÖÃÓ³Éä¹ØÏµ£ºÔªËØ
¡¡¡¡¡¡9.3.6 ÅäÖÃRequestProcessor£ºÔªËØ
¡¡¡¡¡¡9.3.7 ÅäÖùú¼Ê»¯×ÊÔ´Îļþ£ºÔªËØ
¡¡¡¡¡¡9.3.8 ÅäÖÃPlug-in²å¼þ£ºÔªËØ
¡¡¡¡¡¡9.3.9 ·ÖÀëStrutsÅäÖÃÎļþ
¡¡¡¡9.4 ActionForm Bean¿ª·¢¼¼Êõ
¡¡¡¡¡¡9.4.1 ʹÓÃĬÈÏ±íµ¥ActionForm
¡¡¡¡¡¡9.4.2 ʹÓö¯Ì¬±íµ¥DynaActionForm
¡¡¡¡¡¡9.4.3 ʹÓÃ×Ô¶¯Ð£Ñé±íµ¥DynaValidatorForm
¡¡¡¡9.5 Action×é¼þ¿ª·¢¼¼Êõ
¡¡¡¡¡¡9.5.1 ʹÓÃĬÈϵÄAction
¡¡¡¡¡¡9.5.2 ¿ÉÖ±½Óת·¢µÄForwardAction
¡¡¡¡¡¡9.5.3 ¿É°üº¬ÎļþµÄIncludeAction
¡¡¡¡¡¡9.5.4 ¿É×Ô¶¯·Ö·¢µÄDispatchAction
¡¡¡¡¡¡9.5.5 ¿É½øÐжà¸öÌá½»µÄLookupDispatchAction
¡¡¡¡¡¡9.5.6 ¿ÉʵÏÖ½»»»µÄSwitchAction
¡¡¡¡9.6 ¿ª·¢µÇ¼´¦ÀíÁ÷³Ì
¡¡¡¡¡¡9.6.1 Ìí¼ÓĬÈÏÊ×Ò³index.doÖ¸ÏòµÇÂ¼Ò³Ãælogin.jsp
¡¡¡¡¡¡9.6.2 ÐÞ¸Älogin.jspµÄµÇ¼Ìá½»µØÖ·Îªlogin.do
¡¡¡¡¡¡9.6.3 ÅäÖãºÌí¼ÓµÇ¼±íµ¥loginForm
¡¡¡¡¡¡9.6.4 ÅäÖãºÌí¼ÓµÇ¼×é¼þlogin
¡¡¡¡¡¡9.6.5 ¿ª·¢ActionForm Bean£º´´½¨µÇ¼±íµ¥ÀàLoginForm.java
¡¡¡¡¡¡9.6.6 ¿ª·¢Action£º´´½¨µÇ¼´¦ÀíÀàLoginAction.java
¡¡¡¡¡¡9.6.7 µÇ¼´¦ÀíÁ÷³Ìͼ
9.7 ¿ª·¢Í˳ö´¦ÀíÁ÷³Ì
¡¡¡¡¡¡9.7.1 ÐÞ¸Äwelcome.jspµÄÍ˳öÌá½»µØÖ·Îªlogout.do
¡¡¡¡¡¡9.7.2 ÅäÖãºÌí¼ÓÍ˳ö×é¼þlogout
¡¡¡¡¡¡9.7.3 ¿ª·¢Action£º´´½¨Í˳ö´¦ÀíÀàLogoutAction.java
¡¡¡¡¡¡9.7.4 Í˳ö´¦ÀíÁ÷³Ìͼ
¡¡¡¡9.8 ¿ª·¢×¢²á´¦ÀíÁ÷³Ì
¡¡¡¡¡¡9.8.1 ÐÞ¸Älogin.jspµÄ×¢²áÁ´½ÓµØÖ·Îªregister.do
¡¡¡¡¡¡9.8.2 ÐÞ¸Äregister.jspµÄ×¢²áÌá½»µØÖ·Îªregister.do
¡¡¡¡¡¡9.8.3 ÅäÖãºÌí¼Ó×¢²á±íµ¥registerForm
¡¡¡¡¡¡9.8.4 ÅäÖãºÌí¼ÓµÇ¼×é¼þregister
¡¡¡¡¡¡9.8.5 ¿ª·¢ActionForm Bean£º´´½¨×¢²á±íµ¥ÀàRegisterForm.java
¡¡¡¡¡¡9.8.6 ¿ª·¢Action£º´´½¨×¢²á´¦ÀíÀàRegisterAction.java
¡¡¡¡¡¡9.8.7 ×¢²á´¦ÀíÁ÷³Ìͼ
¡¡¡¡9.9 ¼ÌÐøÏÂÒ»Ö÷Ì⣺ʹÓÃDBCPÁ¬½Ó³Ø²Ù×÷Êý¾Ý¿â
¡¡µÚ10Õ ʹÓÃDBCPÁ¬½Ó³Ø²Ù×÷Êý¾Ý¿â
¡¡¡¡10.1 Êý¾Ý¿âÁ¬½Ó³Ø»ù´¡
¡¡¡¡¡¡10.1.1 Êý¾Ý¿âÁ¬½Ó³ØµÄ»ù±¾¸ÅÄî
¡¡¡¡¡¡10.1.2 Êý¾Ý¿âÁ¬½Ó³ØµÄ¹¤×÷ÔÀí
¡¡¡¡¡¡10.1.3 Java¿ªÔ´µÄÁ¬½Ó³Ø
¡¡¡¡10.2 DBCPÁ¬½Ó³Ø»ù´¡
¡¡¡¡¡¡10.2.1 DBCPÊý¾ÝÔ´µÄ´´½¨¹ý³Ì
¡¡¡¡¡¡10.2.2 ÔÚTomcatÖÐʹÓÃDBCPÁ¬½Ó³ØµÄ¹ý³Ì
¡¡¡¡¡¡10.2.3 ÔÚTomcatÖÐʹÓÃDBCPÁ¬½Ó³ØµÄʵÀý
¡¡¡¡10.3 ÔÚStrutsÖÐÅäÖÃDBCPÁ¬½Ó³Ø
¡¡¡¡¡¡10.3.1 ²¿ÊðDBCP°²×°°üºÍMySQLµÄÇý¶¯°ü
¡¡¡¡¡¡10.3.2 ÔÚstruts-config.xmlÖÐÅäÖÃDBCPÊý¾ÝÔ´
¡¡¡¡¡¡10.3.3 ʹÓÃDBCPÊý¾ÝÔ´µÄ·½·¨
¡¡¡¡10.4 ÔÚStrutsÖÐʹÓÃDBCPÁ¬½Ó³Ø
¡¡¡¡¡¡10.4.1 LoginActionÖÐÑéÖ¤Óû§µÇ¼º¯Êý
¡¡¡¡¡¡10.4.2 RegisterActionÖмì²éÓû§ÊÇ·ñ´æÔÚº¯Êý
¡¡¡¡¡¡10.4.3 RegisterActionÖÐÓû§×¢²áº¯Êý
¡¡¡¡10.5 ¼ÌÐøÏÂÒ»Ö÷Ì⣺ʹÓÃLog4j¼Ç¼ÈÕÖ¾
¡¡µÚ11Õ ʹÓÃLog4j¼Ç¼ÈÕÖ¾
¡¡¡¡11.1 Log4jµÄ»ù±¾¸ÅÄî
¡¡¡¡¡¡11.1.1 ÈÕÖ¾¼Ç¼Æ÷Logger
¡¡¡¡¡¡11.1.2 Êä³öÔ´Appender
¡¡¡¡¡¡11.1.3 ²¼¾ÖÆ÷Layout
¡¡¡¡11.2 Log4jµÄÅäÖÃÓëʹÓÃ
¡¡¡¡¡¡11.2.1 ͨ¹ý³ÌÐòÅäÖÃ
¡¡¡¡¡¡11.2.2 ͨ¹ýPropertyÎļþÅäÖÃ
¡¡¡¡¡¡11.2.3 ͨ¹ýXMLÎļþÅäÖÃ
¡¡¡¡11.3 Log4j ÓëCommonsLoggingÁªºÏʹÓÃ
¡¡¡¡¡¡11.3.1 Commons LoggingͨÓÃÈÕÖ¾×é¼þ
¡¡¡¡¡¡11.3.2 Commons Logging+Log4j
¡¡¡¡11.4 ΪActionÌí¼ÓÈÕÖ¾´úÂë
¡¡¡¡¡¡11.4.1 ÔÚLoginActionÖÐÌí¼ÓÈÕÖ¾¼Ç¼´úÂë
¡¡¡¡¡¡11.4.2 ÔÚLogoutActionÖÐÌí¼ÓÈÕÖ¾¼Ç¼´úÂë
¡¡¡¡¡¡11.4.3 ÔÚRegisterActionÖÐÌí¼ÓÈÕÖ¾¼Ç¼´úÂë
¡¡ 11.5 ¼ÌÐøÏÂÒ»Ö÷Ì⣺ʹÓÃStruts±êÇ©½øÐÐ Ò³Ãæ¹ú¼Ê»¯
¡¡µÚ12Õ ʹÓÃStruts±êÇ©½øÐÐÒ³Ãæ¹ú¼Ê»¯
¡¡¡¡12.1 Èí¼þ¹ú¼Ê»¯Óë±¾µØ»¯
¡¡¡¡¡¡12.1.1 I18NºÍL10NµÄÓÉÀ´
¡¡¡¡¡¡12.1.2 Èí¼þ¹ú¼Ê»¯µÄʵÏÖÄ¿±ê
¡¡¡¡¡¡12.1.3 Èí¼þ±¾µØ»¯µÄÉèÖ÷½·¨
¡¡¡¡¡¡12.1.4 Èí¼þ±àÂëÎÊÌâ
¡¡¡¡12.2 StrutsÓ¦ÓõĹú¼Ê»¯
¡¡¡¡¡¡12.2.1 Java¶Ô¹ú¼Ê»¯µÄÖ§³Ö
¡¡¡¡¡¡12.2.2 Struts¶Ô¹ú¼Ê»¯µÄÖ§³Ö
¡¡¡¡¡¡12.2.3 StrutsÒ³Ãæ¹ú¼Ê»¯µÄ¹ý³Ì
¡¡¡¡12.3 Struts HTML±êÇ©
¡¡¡¡¡¡12.3.1 ÓÃÓÚÉú³É»ù±¾µÄHTMLÔªËØµÄ±êÇ©
¡¡¡¡¡¡12.3.2 ÓÃÓÚÉú³ÉHTML±íµ¥µÄ±êÇ©
¡¡¡¡¡¡12.3.3 ÓÃÓÚÏÔʾ´íÎó»òÕý³£ÏûÏ¢µÄ±êÇ©
¡¡¡¡12.4 Struts Bean±êÇ©
¡¡¡¡¡¡12.4.1 ÓÃÓÚ·ÃÎÊHTTPÇëÇóÐÅÏ¢»òJSPÒþº¬¶ÔÏó
¡¡¡¡¡¡12.4.2 ÓÃÓÚ·ÃÎÊWebÓ¦ÓÃ×ÊÔ´
¡¡¡¡¡¡12.4.3 ÓÃÓÚ¶¨Òå»òÊä³öJavaBeanµÄBean±êÇ©
¡¡¡¡12.5 Struts Logic±êÇ©
¡¡¡¡¡¡12.5.1 ½øÐбȽÏÔËËãµÄLogic±êÇ©
¡¡¡¡¡¡12.5.2 ½øÐÐ×Ö·û´®Æ¥ÅäµÄLogic±êÇ©
¡¡¡¡¡¡12.5.3 ÅжÏÖ¸¶¨ÄÚÈÝÊÇ·ñ´æÔÚµÄLogic±êÇ©
¡¡¡¡¡¡12.5.4 ½øÐÐÑ»·±éÀúµÄLogic±êÇ©
¡¡¡¡¡¡12.5.5 ½øÐÐÇëÇóת·¢»òÖØ¶¨ÏòµÄLogic±êÇ©
¡¡¡¡12.6 ±êÇ©»¯JSPÒ³ÃæÖеÄÎÄ×Ö
¡¡¡¡¡¡12.6.1 µÇÂ¼Ò³Ãælogin.jsp
¡¡¡¡¡¡12.6.2 ×¢²áÒ³Ãæregister.jsp
¡¡¡¡¡¡12.6.3 »¶ÓÒ³Ãæwelcome.jsp
¡¡¡¡12.7 ´´½¨×ÊÔ´Îļþ
¡¡¡¡¡¡12.7.1 н¨ÖÐÎÄ×ÊÔ´ÎļþApplicationResources_temp.properties
¡¡¡¡¡¡12.7.2 ת»»×ÊÔ´Îļþ±àÂëApplicationResources_zh_CN.properties
¡¡¡¡¡¡12.7.3 ½¨Á¢Ó¢ÎÄÓëĬÈÏ×ÊÔ´Îļþ
¡¡¡¡¡¡12.7.4 ÔËÐÐÏîÄ¿½øÐб¾µØ»¯·ÃÎÊ
¡¡¡¡12.8 ¼ÌÐøÏÂÒ»Ö÷Ì⣺Struts±íµ¥ÑéÖ¤
¡¡µÚ13Õ ½øÐÐStrutsÊý¾ÝÑéÖ¤
¡¡¡¡13.1 Á½ÖÖ±íµ¥ÑéÖ¤·½·¨
¡¡¡¡¡¡13.1.1 ʹÓÃValidatorУÑéÆ÷×é¼þ
¡¡¡¡¡¡13.1.2 ÔÚActionFormÖмìÑéºÏ·¨ÐÔ
¡¡¡¡13.2 µÚÒ»²½£ºÎªActionFormÌí¼Ó±íµ¥ÑéÖ¤¹¦ÄÜ
¡¡¡¡¡¡13.2.1 Ìí¼ÓµÇ¼ʱµÄ±íµ¥¼ìÑ鹦ÄÜ¡ªLoginForm
¡¡¡¡¡¡13.2.2 Ìí¼Ó×¢²áʱµÄ±íµ¥¼ìÑ鹦ÄÜ¡ªRegisterForm
¡¡¡¡13.3 µÚ¶þ²½£ºÎªActionÌí¼ÓÂß¼ÑéÖ¤¹¦ÄÜ
¡¡¡¡¡¡13.3.1 µÇ¼ʱ¼ì²éÊÇ·ñµÇ¼³É¹¦¡ªLoginAction
¡¡¡¡¡¡13.3.2 ×¢²áʱ¼ì²éÓû§ÃûÊÇ·ñ´æÔÚ¡ªRegisterAction
¡¡¡¡13.4 µÚÈý²½£ºÑéÖ¤³ö´íʱά³Ö±íµ¥ÊäÈë
¡¡¡¡¡¡13.4.1 ά³ÖµÇÂ¼Ò³ÃæµÄ±íµ¥ÊäÈ롪login.jsp
¡¡¡¡¡¡13.4.2 ά³Ö×¢²áÒ³ÃæµÄ±íµ¥ÊäÈ롪register.jsp
¡¡¡¡13.5 ¼ÌÐøÏÂÒ»Ö÷Ì⣺ʹÓÃSitemesh½øÐпò¼Ü²¼¾Ö
¡¡µÚ14Õ ʹÓÃSitemesh½øÐÐÕ¾µã²¼¾Ö
¡¡¡¡14.1 Sitemesh¿ò¼Ü»ù´¡
¡¡¡¡¡¡14.1.1 Sitemesh¹¦ÄܸÅÊö
¡¡¡¡¡¡14.1.2 Sitemesh±ÈStruts Tiles¸ü¼ÓÓÅÐã
¡¡¡¡¡¡14.1.3 SitemeshµÄ¹¤×÷ÔÀí
¡¡¡¡14.2 ʹÓÃSitemesh¿ò¼Ü
¡¡¡¡¡¡14.2.1 °²×°Sitemesh¿ò¼Ü
¡¡¡¡¡¡14.2.2 ÅäÖÃSitemesh¿ò¼Ü
¡¡¡¡¡¡14.2.3 ½¨Á¢×°ÊÎÆ÷ÃèÊöÎļþdecorators.xml
¡¡¡¡¡¡14.2.4 ½¨Á¢×°ÊÎÆ÷Ò³Ãæ/decorators/frame.jsp
¡¡¡¡14.3 ²é¿´×°ÊκóµÄÕ¾µã
¡¡¡¡¡¡14.3.1 µÇÂ¼Ò³Ãælogin.jsp¡ª²»º¬µÇ¼²Ëµ¥
¡¡¡¡¡¡14.3.2 ×¢²áÒ³Ãæregister.jsp¡ª²»º¬µÇ¼²Ëµ¥
¡¡¡¡¡¡14.3.3 »¶ÓÒ³Ãæwelcome.jsp¡ª°üº¬µÇ¼²Ëµ¥
¡¡¡¡14.4 ¼Ü¹¹4£ºdemo(Struts).zip
¡¡¡¡¡¡14.4.1 ³ÌÐò½á¹¹Í¼
¡¡¡¡¡¡14.4.2 ϵͳ¼Ü¹¹Í¼
¡¡¡¡¡¡14.4.3 ÈçºÎÔڸüܹ¹ÉÏ¿ª·¢ÐµĹ¦ÄÜ
¡¡¡¡14.5 ¼ÌÐøÏÂÒ»Ö÷Ì⣺ÔÚStrutsÖм¯³ÉHibernate 314
µÚ4²¿·Ö Hibernate¼Ü¹¹Æª
¡¡µÚ15Õ HibernateºËÐ




