¡¡¡¡ActionÀàÊÇÁ¬½ÓStruts¼Ü¹¹ºÍÓ¦ÓÃÖÐÒµÎñÂß¼´úÂëµÄÇÅÁº¡£ËùÒÔÄãÓ¦¸Ã¾¡¿ÉÄÜÈÃActionÀàСÇɼòµ¥£¬ÒòΪÕæʵӦÓÃÖеÄÂß¼´¦ÀíÓ¦¸ÃÊÇÓɵ¥¶À·ÖÀë³öÀ´µÄÂß¼²ãÀ´Íê³ÉµÄ¡£Èç¹ûÄãÕýÔÚ´ÓÊÂn²ãÓ¦ÓõĿª·¢£¬Ä㵱ȻϣÍû²ãÓë²ãÖ®¼äµÄ½Ó¿ÚÔ½¼òµ¥Ô½ºÃ¡£¶øÊÂʵÉÏ£¬ActionÀàÖеÄÖ÷Òª·½·¨"perform()"£¨1.1ÖÐΪexecute()£©È´Óе㰵ʾӦ¸ÃÔÚ±¾·½·¨ÖÐ×öµãʲôµÄÒâ˼¡£ÎÒÃÇÖªµÀ£¬Ã¿¸öActionÀ඼ÐèÒª´Ó org.apache.struts.action.Action ¼Ì³Ð¶øÀ´¡£ÔÚСÐÍÓ¦ÓÃÖУ¬ÎÒÃǵÄActionÀàºÜ¿ÉÄܾÍÖ»Òª¼Ì³Ðorg.apache.struts.action.Action¾Í×ã¹»ÁË£»¶øÔÚijЩÌض¨µÄ¸´ÔÓÓ¦ÓÃÖУ¬ÎҾʹÓÎÒÃÇËùʵÏÖµÄActionÀàÖÐ×ܽá³öÀ´ÁËһЩͨÓÃÌØÐÔ¡£Òò´Ë£¬ÔÚÎÒ¿´À´£¬¹¹ÔìÒ»¸ö»ùÀཫÕâЩͨÓÃÌØÐԵĴúÂëʵÏÖ³öÀ´£¬ÈÃÓ¦ÓÃÖÐËùÓõ½µÄËùÓÐActionÀ಻ֱ½Ó¼Ì³Ðorg.apache.struts.action.Action£¬¶ø¼Ì³ÐÕâ¸öÍê³ÉÁËһЩͨÓÃÌØÐԵĻùÀàÒÔʵÏÖ´úÂëÖØÓã¬ÊÇÒ»¸öÏ൱²»´íµÄÉè¼Æ¡£ÎÒÔÚStrutsSampleÖоÍÓ¦ÓÃÁËÕâÖÖ·½·¨£¬¹¹ÔìÁËÕâÑùµÄÒ»¸ö»ùÀ࣬¸Ã»ùÀàµÄ·½·¨ÔÚÍê³É¸´ÔÓÂß¼µÄºÍ¼òµ¥×ª·¢ÇëÇóµÄActionÀàÖж¼¿ÉÒÔʹÓá£
¡¡¡¡
¡¡¡¡package com.oreilly.actions;
¡¡¡¡import java.io.IOException;
¡¡¡¡import java.util.Properties;
¡¡¡¡import java.util.ResourceBundle;
¡¡¡¡import java.util.MissingResourceException;
¡¡¡¡import java.util.Enumeration;
¡¡¡¡import java.util.Properties;
¡¡¡¡import java.rmi.RemoteException;
¡¡¡¡import javax.ejb.EJBHome;
¡¡¡¡import javax.ejb.CreateException;
¡¡¡¡import javax.naming.Context;
¡¡¡¡import javax.naming.InitialContext;
¡¡¡¡import javax.naming.NamingException;
¡¡¡¡import javax.servlet.ServletException;
¡¡¡¡import javax.servlet.http.HttpServletRequest;
¡¡¡¡import javax.servlet.http.HttpServletResponse;
¡¡¡¡import org.apache.struts.action.Action;
¡¡¡¡import org.apache.struts.action.ActionServlet;
¡¡¡¡import org.apache.struts.action.ActionForm;
¡¡¡¡import org.apache.struts.action.ActionForward;
¡¡¡¡import org.apache.struts.action.ActionMapping;
¡¡¡¡
¡¡¡¡Õâ¸öÀà¾ÍÊÇʹÓÃStruts¿ª·¢Ê±£¬ËùÓÐActionÀ඼Ҫ¼Ì³ÐµÄ»ùÀà¡£Ëü°ÑһЩͨ³£ÔÚʵ¼ÊÓ¦ÓÃÖÐ×îÓпÉÄܱ»Óõ½µÄ¶«Î÷¶¼¿¼ÂǽøÀ´ÁË¡£¾ÍÕâƪÎÄÕ¶øÑÔ£¬ ÀàÖÐһЩÓëStruts²¢²»ÊÇÌ«½ôÃÜÏà¹ØµÄ·½·¨½«Ö»×ö×¢ÊͶø²»»áÍêÕûµÄʵÏÖ£¬¶ø´ÓÊ¿ª·¢¹¤×÷µÄÄ㣬ÓÐÐËȤµÄ»°£¬ÇëÍê³ÉÕâЩ·½·¨²¢Ó¦ÓÃÕâ¸öÀ࣬½«ÎªÄãÔÚʵ¼ÊÏîÄ¿ÖеĿª·¢¿ìÂí¼Ó±Þ¡£×¢Ò⣬ÒòΪËùÓеÄActionÀ඼Ҫ´Óorg.apache.struts.action.Action ¼Ì³Ð¶øÀ´£¬ËùÒÔÎÒÃǵÄÕâ¸öÀàͬÑù¡£
¡¡¡¡
¡¡¡¡public abstract class AbstStrutsActionBase extends Action {
¡¡¡¡¡¡/ * ¶¨ÒåһЩÔÚstruts-config.xmlÖмǼÔÚ°¸µÄ
¡¡¡¡¡¡ * È«¾ÖÓ¦ÓÃÖнԿɿÉͨÓõÄforward±êʶ*/
¡¡¡¡¡¡protected static final String SUCCESS = "success";
¡¡¡¡¡¡protected static final String FAILURE = "failure";
¡¡¡¡¡¡protected static final String ERROR = "error";
¡¡¡¡¡¡protected static final String LOGIN = "login";
¡¡¡¡¡¡protected static final String CONFIRM = "confirm";
¡¡¡¡¡¡protected Context jndiContext = null;
¡¡¡¡¡¡/**
¡¡¡¡¡¡ * ĬÈϹ¹Ôì·½·¨
¡¡¡¡¡¡ */
¡¡¡¡¡¡public AbstStrutsActionBase() {
¡¡¡¡}
¡¡¡¡
¡¡¡¡/**
¡¡¡¡
¡¡¡¡ÏÂÃæÕâ¸ö²éÕÒEJBʵÀýµÄ·½·¨½«²»»áÍêÕûʵÏÖ¡£
¡¡¡¡
¡¡¡¡Ò»°ãÀ´Ëµ£¬ActionÀàÓ¦¸Ãµ÷ÓÃʵÏÖÁËÓ¦ÓõÄÉÌÎñÂß¼µÄEJB»á»°bean£¨»ò½ö½öÆÕͨJavaBean£©¡£ÔÚ´óÐÍÏîÄ¿ÖУ¬¿ª·¢ÈËÔ±±ØÐë»®Çå²ãÓë²ãÖ®¼äµÄ½çÏÞ¡£ÔÚActionÀàÖУ¬ÎÒÃÇÓ¦¸ÃÄõ½»ñÈ¡º¬ÓÐJNDIÐÅÏ¢µÄ»·¾³µÄʵÀý£¬È»ºóͨ¹ýEJBµÄJNDIÃû×ÖÈ¥²éѯ»ñÈ¡ËüµÄhome½Ó¿Ú¡£¹ý³Ì²¢²»¼òµ¥£¬ËùÒÔÏÂÃæÕâ¸ö´úÂëƬ¶ÏÖ»ÊǸö¸ø³öÁ˱ØҪʵÏÖµÄСÀý×Ó¡£
¡¡¡¡
¡¡¡¡²ÎÊýÀàÐÍString£¬´«ÈëµÄÒª²éѯJNDIµÄÃû×Ö
¡¡¡¡
¡¡¡¡·µ»ØÀàÐÍObject£¬¼´²éÕÒµ½µÄhome½Ó¿Ú
¡¡¡¡
¡¡¡¡Èç¹û²éÕÒʧ°Ü£¬Å׳öNamingExceptionÒì³£
¡¡¡¡
¡¡¡¡Èç¹û»ñÈ¡×ÊÔ´ÐÅϢʧ°Ü£¬Å׳öMissingResourceExceptionÒì³£
¡¡¡¡
¡¡¡¡*/
¡¡¡¡
¡¡¡¡public Object lookup(String jndiName)
¡¡¡¡¡¡¡¡throws NamingException, MissingResourceException {
¡¡¡¡¡¡// Ϊµ÷ÓÃEJB¶ÔÏó£¬Í¨¹ý¹¹½¨¼Ç¼JNDIÐÅÏ¢µÄProperties¶ÔÏó
¡¡¡¡¡¡// À´»ñµÃ³õʼ»·¾³ÐÅÏ¢
¡¡¡¡¡¡¡¡if (jndiContext == null) {
¡¡¡¡¡¡¡¡¡¡ResourceBundle resource =
¡¡¡¡¡¡¡¡¡¡¡¡ResourceBundle.getBundle("strutssample.properties");
¡¡¡¡¡¡¡¡Properties properties = new Properties();
¡¡¡¡¡¡¡¡¡¡properties.setProperty(
¡¡¡¡¡¡¡¡¡¡¡¡Context.INITIAL_CONTEXT_FACTORY,
¡¡¡¡¡¡¡¡¡¡¡¡resource.getString(Context.INITIAL_CONTEXT_FACTORY));
¡¡¡¡¡¡¡¡properties.setProperty(
¡¡¡¡¡¡¡¡¡¡¡¡Context.PROVIDER_URL,
¡¡¡¡¡¡¡¡¡¡¡¡resource.getString(Context.PROVIDER_URL));
¡¡¡¡¡¡¡¡properties.setProperty(
¡¡¡¡¡¡¡¡¡¡¡¡Context.SECURITY_PRINCIPAL,
¡¡¡¡¡¡¡¡¡¡¡¡resource.getString(Context.SECURITY_PRINCIPAL));
¡¡¡¡¡¡¡¡properties.setProperty(
¡¡¡¡¡¡¡¡¡¡¡¡Context.SECURITY_CREDENTIALS,
¡¡¡¡¡¡¡¡¡¡¡¡resource.getString(Context.SECURITY_CREDENTIALS));
¡¡¡¡¡¡¡¡jndiContext = new InitialContext(properties);
¡¡¡¡}
¡¡¡¡
¡¡¡¡×¢Ò⣺ÔÚÕæÕýµÄ²úÆ·ÖУ¬ÎÒÃÇÓ¦¸ÃÔÚ´Ë´¦¿¼ÂÇ´úÂëµÄ½¡×³ÐÔ£¬½«´úÂë¼ÓÈëµ½try/catch¿éÄÚ£¬²¢¼Ç¼ËùÓдíÎó»òÖØÒªÐÅÏ¢µ½ÏµÍ³logÖС£¶ø±¾ÀýÖУ¬ÎÒÃǽö½ö°ÑÒì³£ÍùÍâÅ×£¬²¢¼Ù¶¨Ò»¶¨»áÕÒµ½EJB¶ÔÏóµÄhome½Ó¿Ú²¢·µ»Ø¡£
¡¡¡¡
¡¡¡¡return (jndiContext.lookup(jndiName));
¡¡¡¡}
¡¡¡¡ÓÉÓÚActionÀཫÊÇÓÉStrutsÀ´µ÷Óõġ£ËùÒÔËüµÄÖ÷Òª·½·¨Ó¦¸ÃÊÇÒ»¸ö³éÏó·½·¨£¬¶øÓÉÿ¸ö¼Ì³ÐµÄ×ÓÀàÀ´¾ßÌåʵÏÖ£¬»òÕßÔÚÆäÖÐ×öһЩËùÓÐAction¶¼»á×öµÄͨÓûúÖÆ£¬ÀýÈç¼Ç¼logÐÅÏ¢¡£ÔÚ±¾ÀýÖУ¬ÎÒÃÇÒ»ÇдӼò£¬½«Æä³éÏóÖ®¡£
¡¡¡¡
¡¡¡¡²ÎÊýmapping£ºÆäÀàÐÍΪActionMapping£¬½«ÔÚ±¾Action×öÌøתѡÔñÓÃ
¡¡¡¡
¡¡¡¡²ÎÊýactionForm£ºÓÉStruts¸ù¾Ý±¾´ÎHTTPÇëÇóÊý¾ÝÌî³äÍê³ÉµÄActionForm¶ÔÏ󣨿ÉÑ¡£¬Èç¹û´æÔÚÇëÇóÊý¾ÝµÄ»°£©
¡¡¡¡
¡¡¡¡²ÎÊýrequest£º´ËActionËùÓд¦ÀíµÄ±¾´ÎHTTPÇëÇ󣨶ÔÏó£©
¡¡¡¡
¡¡¡¡²ÎÊýresponse£º´ËActionÊä³öÊý¾ÝËùÒªÓõ½µÄHTTPÏìÓ¦£¨¶ÔÏó£©
¡¡¡¡
¡¡¡¡Èç¹ûÓÐI/O´íÎó³öÏÖ£¬Ôò±¾·½·¨Å׳öIOExceptionÒì³£
¡¡¡¡
¡¡¡¡Èç¹û´¦Àíʱ·¢ÉúservletÒì³££¬Ôò±¾·½·¨Å׳öServletExceptionÒì³£
¡¡¡¡
¡¡¡¡±¾·½·¨´¦ÀíÍêÇëÇóºó°´ÕÕ´¦ÀíÂß¼·µ»ØÏàÓ¦µÄÒ³Ãæµ¼Ïò£¨¶ÔÏó£©
¡¡¡¡
¡¡¡¡public abstract ActionForward perform(
¡¡¡¡¡¡¡¡ActionMapping mapping,
¡¡¡¡¡¡¡¡ActionForm form,
¡¡¡¡¡¡¡¡HttpServletRequest request,
¡¡¡¡¡¡¡¡HttpServletResponse response)
¡¡¡¡¡¡¡¡throws IOException, ServletException;
¡¡¡¡}
¡¡¡¡»òÕßÈÃÕâ¸ö³éÏó·½·¨¸üÓÐÓÃÒ»µã£¬ÄǾÍÔÚÀïÃæ¸Éµãʲô°É£¬±ÈÈçÏñÏÂÃæÕâÑùÔÚÆäÖмǼlog¡£
¡¡¡¡
¡¡¡¡{
¡¡¡¡¡¡¡¡ActionForward forward = null;
¡¡¡¡¡¡¡¡//¡¡Ö»ÊǼòµ¥µÄ¼Ç¼һЩÌáʾÐÅÏ¢µ½servlet log
¡¡¡¡
¡¡¡¡¡¡¡¡getServlet().log(
¡¡¡¡¡¡¡¡¡¡"AbstStrutsActionBase.perform() [Action Class: "
¡¡¡¡¡¡¡¡¡¡¡¡+ this.getClass().getName()
¡¡¡¡¡¡¡¡¡¡¡¡+ " ]");
¡¡¡¡¡¡¡¡getServlet().log(
¡¡¡¡¡¡¡¡¡¡"AbstStrutsActionBase.perform() [Form Class : "
¡¡¡¡¡¡¡¡¡¡¡¡+ (form == null ? "null" : form.getClass().getName())
¡¡¡¡¡¡¡¡¡¡¡¡+ " ]");
¡¡¡¡¡¡}
¡¡¡¡È»ºó£¬ÎÒÃÇÔÙ±àдµÄÿ¸öActionÀ඼Ӧ¸Ã´ÓAbstStrutsActionBase¼Ì³Ð£¬²¢ÒÀÕÕ´¦ÀíÂß¼±àд¸÷×ÔµÄperform·½·¨¡£ÈÃÎÒÃÇÓÃLoginActionΪÀý£¬¿´¿´¾ßÌåÓ¦¸ÃÔõôӦÓðɡ£
¡¡¡¡
¡¡¡¡package com.oreilly.actions;
¡¡¡¡
¡¡¡¡import java.io.IOException;
¡¡¡¡import java.rmi.RemoteException;
¡¡¡¡import javax.ejb.CreateException;
¡¡¡¡import javax.servlet.ServletException;
¡¡¡¡import javax.servlet.http.HttpServletRequest;
¡¡¡¡import javax.servlet.http.HttpServletResponse;
¡¡¡¡import org.apache.struts.action.ActionError;
¡¡¡¡import org.apache.struts.action.ActionErrors;
¡¡¡¡import org.apache.struts.action.ActionForm;
¡¡¡¡import org.apache.struts.action.ActionMapping;
¡¡¡¡import org.apache.struts.action.ActionForward;
¡¡¡¡import com.oreilly.forms.LoginForm;
¡¡¡¡
¡¡¡¡/*
¡¡¡¡LoginAction ½«ÑÝʾһ¸öAction½«ÈçºÎ±»Struts¼Ü¹¹Ëùµ÷ÓÃ
¡¡¡¡
¡¡¡¡ÔÚÕâ¸öÀý×ÓÖУ¬ÎÒÃÇÖ»ÊǼòµ¥µÄÑÝʾperform·½·¨ÊÇÈçºÎµ÷Óá¢Ö´Ðв¢·µ»ØµÄ
¡¡¡¡
¡¡¡¡*/
¡¡¡¡public class LoginAction extends AbstStrutsActionBase {
¡¡¡¡½ÓÏÂÀ´Õâ¸öÊÇÑéÖ¤Óû§µÄ·½·¨£¬±¾ÀýÖÐûÓоßÌåʵÏÖ¡£µ«Ò»¸öµäÐ͵ÄÓ¦Ó÷½°¸Êǵ÷ÓÃJavaBean»òÕßEJBÀ´Íê³É¡£ÓÃÀ´²éÕÒEJBµÄlookup·½·¨£¨ÔÚ»ùÀàÖÐÍê³ÉµÄ£©Ó¦¸ÃÔÚ±¾·½·¨Öб»µ÷Óã¬Æä·µ»ØÒ»¸öÒÀ¾Ýºǫ́Êý¾Ý¿âÑéÖ¤Óû§µÄ½Ó¿Ú¡£
¡¡¡¡
¡¡¡¡²ÎÊýÀàÐÍString£¬ÒªÑéÖ¤µÄÓû§Ãû
¡¡¡¡
¡¡¡¡²ÎÊýÀàÐÍString£¬ÃÜÂë
¡¡¡¡
¡¡¡¡·µ»ØÀàÐÍboolean£¬Èç¹ûÑé֤ͨ¹ýΪtrue£¬·ñÔòΪfalse
¡¡¡¡
¡¡¡¡public boolean authenticate(String username, String password) {
¡¡¡¡/* ±¾·½·¨½«ÏÈ×öÒ»¸ö²éÕÒ¶¯×÷£¬»ñµÃÑéÖ¤Óû§µÄEJB¶ÔÏóµÄ½Ó¿Ú²¢µ÷ÓÃ
¡¡¡¡* ÓÉÓÚ±¾ÀýÖ»ÑÝʾActionÓëÉÌÎñÂß¼²ãÊÇÈçºÎ½»»¥µÄ
¡¡¡¡* ËùÒÔ¾ßÌåʵÏÖ´úÂë±¾ÀýÖоͲ»ÌṩÁË:)
²é¿´±¾ÎÄÀ´Ô´