⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csdn_struts原理与应用(三).htm

📁 Struts文章
💻 HTM
📖 第 1 页 / 共 3 页
字号:

            <P><STRONG>ActionErrors</STRONG>是对错误信息的包装,一旦在执行action或者form.validate中出现异常,即可产生一个ActionError并最终加入到ActionErrors。在Form验证的过程中,如果有Error发生,则会将页面重新导向至输入页,并提示错误。 

            <P><STRONG>Action</STRONG>是用于执行业务逻辑的RequsestHandler。每个Action都只建立一个instance。Action不是线程安全的,所以不应该在Action中访问特定资源。一般来说,应改使用 
            Business Delegate 模式来对Business tier进行访问以解除耦合。 
            <P>Struts提供了多种Action供选择使用。普通的Action只能通过调用execute执行一项任务,而DispatchAction可以根据配置参数执行,而不是仅进入execute()函数,这样可以执行多种任务。如insert,update等。LookupDispatchAction可以根据提交表单按钮的名称来执行函数。 

            <P>我们可以先回到刚才的例子,理解一下Struts的流程。 
            <P>下面我们看Struts自带的example实例: </P><FONT size=+2>
            <H1>Chapter 6: Example 2: Login Application </H1>
            <P><FONT color=blue>Struts principle and practice </FONT></P>
            <P>说明:实例二是Struts自带的example程序, 实现了登录,注册,修改功能 </P>
            <P>代码中大量应用了struts taglib,并且采用validator插件进行form的验证 
            <P>但是代码树立了一个不好的榜样,即把大量的业务逻辑写在了action中。 
            <P>部分代码如下: 
            <P>登录:logon.jsp 
            <P>
            <TABLE>
              <TBODY>
              <TR>
                <TD class=code>
                  <P>&nbsp;</P></TD></TR></TBODY></TABLE><TEXTAREA class=code style="WIDTH: 473px; HEIGHT: 112px" name=textarea rows=5 cols=51> &lt;%@ page contentType="text/html;charset=UTF-8" language="java" %&gt; 

// 声明Taglib
&lt;%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %&gt;
&lt;%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %&gt; 

&lt;html:html locale="true"&gt;
&lt;head&gt;
// bean是用来从ApplicationResource中读取i18n信息
&lt;title&gt;&lt;bean:message key="logon.title"/&gt;&lt;/title&gt;
&lt;html:base/&gt;
&lt;/head&gt;
&lt;body bgcolor="white"&gt;

// 错误信息部分
&lt;html:errors/&gt;

// 登录form,action为logion.do
&lt;html:form action="/logon" focus="username"
onsubmit="return validateLogonForm(this);"&gt;
&lt;table border="0" width="100%"&gt;

&lt;tr&gt;
&lt;th align="right"&gt;
&lt;bean:message key="prompt.username"/&gt;:
&lt;/th&gt;
&lt;td align="left"&gt;
&lt;html:text property="username" size="16" maxlength="18"/&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;th align="right"&gt;
&lt;bean:message key="prompt.password" bundle="alternate"/&gt;:
&lt;/th&gt;
&lt;td align="left"&gt;
&lt;html:password property="password" size="16" maxlength="18"
redisplay="false"/&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align="right"&gt;
&lt;html:submit value="Submit"/&gt;
&lt;/td&gt;
&lt;td align="left"&gt;
&lt;html:reset/&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;

&lt;/html:form&gt;

// Validator插件,用于form验证
&lt;html:javascript formName="logonForm"
dynamicJavascript="true"
staticJavascript="false"/&gt;
&lt;script language="Javascript1.1" src="staticJavascript.jsp"&gt;&lt;/script&gt;

&lt;/body&gt;
&lt;/html:html&gt;

</TEXTAREA> 
            <P>
            <P><STRONG>struts-config.xml配置</STRONG></P>
            <P><TEXTAREA class=code style="WIDTH: 473px; HEIGHT: 112px" name=textarea rows=5 cols=51>  &lt;form-beans&gt;

    &lt;!-- Logon form bean --&gt;
    &lt;form-bean       name="logonForm"
                     type="org.apache.struts.validator.DynaValidatorForm"&gt;
      &lt;form-property name="username" type="java.lang.String"/&gt;
      &lt;form-property name="password" type="java.lang.String"/&gt;
    &lt;/form-bean&gt;

    &lt;!-- Subscription form bean --&gt;
    &lt;form-bean      name="subscriptionForm"
                    type="org.apache.struts.webapp.example.SubscriptionForm"/&gt;

  &lt;/form-beans&gt;
   &lt;action-mappings&gt;

    &lt;!-- Edit mail subscription --&gt;
    &lt;action    path="/editSubscription"
               type="org.apache.struts.webapp.example.EditSubscriptionAction"
          attribute="subscriptionForm"
              scope="request"
           validate="false"&gt;
      &lt;forward name="failure"              path="/mainMenu.jsp"/&gt;
      &lt;forward name="success"              path="/subscription.jsp"/&gt;
    &lt;/action&gt;
	...
  </TEXTAREA> </P>
            <P><BR><STRONG>subscriptionForm</STRONG> 
            是一个标准的ActionForm,其中reset方法用于清除form的值,validate方法用于验证 
            <P><TEXTAREA class=code style="WIDTH: 469px; HEIGHT: 105px" name=textarea rows=5 cols=51>public final class SubscriptionForm extends ActionForm  {
     // The maintenance action we are performing (Create or Edit).
    private String action = "Create";
    // Should we auto-connect at startup time?
    private boolean autoConnect = false;
    // The host name.
    private String host = null;
    private String password = null;
	private String type = null;
    private String username = null;

    public String getAction() {	return (this.action);    }
    public void setAction(String action) {  this.action = action;   }

    public boolean getAutoConnect() {     return (this.autoConnect);    }
    public void setAutoConnect(boolean autoConnect) {     this.autoConnect = autoConnect;   }

    public String getHost() {	return (this.host);    }
    public void setHost(String host) {        this.host = host;    }

    public String getPassword() {	return (this.password);    }
    public void setPassword(String password) {      this.password = password;    }

    public String getType() {	return (this.type);    }
    public void setType(String type) {      this.type = type;    }

    public String getUsername() {	return (this.username);    }
    public void setUsername(String username) {      this.username = username;    }

    /**
     * Reset all properties to their default values.
     *
     * @param mapping The mapping used to select this instance
     * @param request The servlet request we are processing
     */
    public void reset(ActionMapping mapping, HttpServletRequest request) {

        this.action = "Create";
        this.autoConnect = false;
        this.host = null;
        this.password = null;
        this.type = null;
        this.username = null;

    }


    /**
     * Validate the properties that have been set from this HTTP request,
     * and return an &lt;code&gt;ActionErrors&lt;/code&gt; object that encapsulates any
     * validation errors that have been found.  If no errors are found, return
     * &lt;code&gt;null&lt;/code&gt; or an &lt;code&gt;ActionErrors&lt;/code&gt; object with no
     * recorded error messages.
     *
     * @param mapping The mapping used to select this instance
     * @param request The servlet request we are processing
     */
    public ActionErrors validate(ActionMapping mapping,
                                 HttpServletRequest request) {

        ActionErrors errors = new ActionErrors();

	if ((host == null) || (host.length() &lt; 1))
            errors.add("host",
                       new ActionError("error.host.required"));
	if ((username == null) || (username.length() &lt; 1))
            errors.add("username",
                       new ActionError("error.username.required"));
	if ((password == null) || (password.length() &lt; 1))
            errors.add("password",
                       new ActionError("error.password.required"));
	if ((type == null) || (type.length() &lt; 1))
            errors.add("type",
                       new ActionError("error.type.required"));
	else if (!"imap".equals(type) &amp;&amp; !"pop3".equals(type))
            errors.add("type",
                       new ActionError("error.type.invalid", type));

	return (errors);

    }


}


</TEXTAREA> 
            <P><STRONG>logonAction</STRONG> 
            <P><TEXTAREA class=code style="WIDTH: 471px; HEIGHT: 70px" name=textarea2 rows=3 cols=51>public final class LogonAction extends Action {
    /**
     * Process the specified HTTP request, and create the corresponding HTTP
     * response (or forward to another web component that will create it).
     * Return an &lt;code&gt;ActionForward&lt;/code&gt; instance describing where and how
     * control should be forwarded, or &lt;code&gt;null&lt;/code&gt; if the response has
     * already been completed.
     *
     * @param mapping The ActionMapping used to select this instance
     * @param form The optional ActionForm bean for this request (if any)
     * @param request The HTTP request we are processing
     * @param response The HTTP response we are creating
     *
     * @exception Exception if business logic throws an exception
     */
    public ActionForward execute(ActionMapping mapping,
				 ActionForm form,
				 HttpServletRequest request,
				 HttpServletResponse response)
	throws Exception {

	// Extract attributes we will need
	Locale locale = getLocale(request);
	MessageResources messages = getResources(request);
	User user = null;

	// Validate the request parameters specified by the user
	ActionErrors errors = new ActionErrors();
	String username = (String)
            PropertyUtils.getSimpleProperty(form, "username");
        String password = (String)
            PropertyUtils.getSimpleProperty(form, "password");
	UserDatabase database = (UserDatabase)
	  servlet.getServletContext().getAttribute(Constants.DATABASE_KEY);
	if (database == null)
            errors.add(ActionErrors.GLOBAL_ERROR,
                       new ActionError("error.database.missing"));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -