﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-eagames-随笔分类-Spring</title><link>http://www.blogjava.net/eagames/category/4045.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:26:08 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:26:08 GMT</pubDate><ttl>60</ttl><item><title>Struts+Spring+Hibernate练习</title><link>http://www.blogjava.net/eagames/archive/2005/11/22/21037.html</link><dc:creator>EA_Games</dc:creator><author>EA_Games</author><pubDate>Tue, 22 Nov 2005 13:40:00 GMT</pubDate><guid>http://www.blogjava.net/eagames/archive/2005/11/22/21037.html</guid><wfw:comment>http://www.blogjava.net/eagames/comments/21037.html</wfw:comment><comments>http://www.blogjava.net/eagames/archive/2005/11/22/21037.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/eagames/comments/commentRss/21037.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/eagames/services/trackbacks/21037.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">环境：<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Windows2003<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">jdk<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><st1:chsdate Year="1899" Month="12" Day="30" IsLunarDate="False" IsROCDate="False" w:st="on">1.5.05</st1:chsdate><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Eclipse3.1+MyEclipse4.03<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">做一登录练习。<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">现已经完成了<SPAN lang=EN-US>login</SPAN>的<SPAN lang=EN-US>struts</SPAN>部份，实现了动态<SPAN lang=EN-US>ActionForm</SPAN>和动态<SPAN lang=EN-US>validator</SPAN>验证，详细全部文件内容如下：<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">struts-config.xml</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<BR>&lt;!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "<A href="http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"><FONT color=#8d8c8c>http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd</FONT></A>"&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&lt;struts-config&gt;<BR>&nbsp; &lt;data-sources /&gt;<BR>&nbsp; &lt;form-beans &gt;<BR>&nbsp;&nbsp;&nbsp; &lt;form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="password" type="java.lang.String" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-property name="username" type="java.lang.String" /&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/form-bean&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp; &lt;/form-beans&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp; &lt;global-exceptions /&gt;<BR>&nbsp; &lt;global-forwards &gt;<BR>&nbsp;&nbsp;&nbsp; &lt;forward name="indexGo" path="/index.jsp" /&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp; &lt;/global-forwards&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp; &lt;action-mappings &gt;<BR>&nbsp;&nbsp;&nbsp; &lt;action<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; attribute="loginForm"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input="/login.jsp"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="loginForm"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path="/login"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scope="request"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; validate="true"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="com.test.struts.action.LoginAction" /&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp; &lt;/action-mappings&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp; &lt;message-resources parameter="com.test.struts.ApplicationResources" /&gt;<BR>&nbsp; &lt;plug-in className="org.apache.struts.validator.ValidatorPlugIn"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /&gt;<BR>&nbsp; &lt;/plug-in&gt;<BR>&lt;/struts-config&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">login.jsp</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&lt;%@ page language="java" contentType="text/html; charset=UTF-8"%&gt;<BR>&lt;%@ taglib uri="<A href="http://jakarta.apache.org/struts/tags-bean"><FONT color=#8d8c8c>http://jakarta.apache.org/struts/tags-bean</FONT></A>" prefix="bean"%&gt; <BR>&lt;%@ taglib uri="<A href="http://jakarta.apache.org/struts/tags-html"><FONT color=#8d8c8c>http://jakarta.apache.org/struts/tags-html</FONT></A>" prefix="html"%&gt;<BR>&nbsp;<BR>&lt;html&gt; <BR>&nbsp;&lt;head&gt;<BR>&nbsp;&nbsp;&lt;title&gt;JSP for loginForm form&lt;/title&gt;<BR>&nbsp;&lt;/head&gt;<BR>&nbsp;&lt;body&gt;<BR>&nbsp;&nbsp;&lt;html:form action="/login"&gt;<BR>&nbsp;&nbsp;&nbsp;username : &lt;html:text property="username"/&gt;&lt;html:errors property="username"/&gt;&lt;br/&gt;<BR>&nbsp;&nbsp;&nbsp;password : &lt;html:password property="password"/&gt;&lt;html:errors property="password"/&gt;&lt;br/&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;html:submit/&gt;&lt;html:cancel/&gt;<BR>&nbsp;&nbsp;&lt;/html:form&gt;<BR>&nbsp;&lt;/body&gt;<BR>&lt;/html&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">index.jsp</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&lt;html&gt;<BR>&nbsp; &lt;head&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;title&gt;My JSP 'index.jsp' starting page&lt;/title&gt;<BR>&nbsp; &lt;/head&gt;<BR>&nbsp; <BR>&nbsp; &lt;body&gt;<BR>&nbsp;&lt;a href="login.jsp"&gt;Login&lt;/a&gt;<BR>&nbsp; &lt;/body&gt;<BR>&lt;/html&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">LoginAction.java</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">//Created by MyEclipse Struts<BR>// XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_<st1:chsdate Year="1899" Month="12" Day="30" IsLunarDate="False" IsROCDate="False" w:st="on">4.0.1</st1:chsdate>/xslt/JavaClass.xsl<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">package com.test.struts.action;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">import javax.servlet.http.HttpServletRequest;<BR>import javax.servlet.http.HttpServletResponse;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">import org.apache.struts.action.Action;<BR>import org.apache.struts.action.ActionForm;<BR>import org.apache.struts.action.ActionForward;<BR>import org.apache.struts.action.ActionMapping;<BR>import org.apache.struts.validator.DynaValidatorForm;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">/** <BR>&nbsp;* MyEclipse Struts<BR>&nbsp;* Creation date: 10-27-2005<BR>&nbsp;* <BR>&nbsp;* XDoclet definition:<BR>&nbsp;* @struts.action path="/login" name="loginForm" input="login.jsp" scope="request" validate="true"<BR>&nbsp;*/<BR>public class LoginAction extends Action {<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;// --------------------------------------------------------- Instance Variables<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;// --------------------------------------------------------- Methods<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;/** <BR>&nbsp; * Method execute<BR>&nbsp; * @param mapping<BR>&nbsp; * @param form<BR>&nbsp; * @param request<BR>&nbsp; * @param response<BR>&nbsp; * @return ActionForward<BR>&nbsp; */<BR>&nbsp;public ActionForward execute(<BR>&nbsp;&nbsp;ActionMapping mapping,<BR>&nbsp;&nbsp;ActionForm form,<BR>&nbsp;&nbsp;HttpServletRequest request,<BR>&nbsp;&nbsp;HttpServletResponse response) {<BR>&nbsp;&nbsp;DynaValidatorForm loginForm = (DynaValidatorForm) form;<BR>&nbsp;&nbsp;// TODO Auto-generated method stub<BR>&nbsp;&nbsp;String username=(String)loginForm.get("username");<BR>&nbsp;&nbsp;String password=(String)loginForm.get("password");<BR>&nbsp;&nbsp;loginForm.set("password",null);<BR>&nbsp;&nbsp;if(username.equals("sonic")||password.equals("sonic")){<BR>&nbsp;&nbsp;&nbsp;System.out.println("AAA");<BR>&nbsp;&nbsp;&nbsp;return mapping.findForward("indexGo");<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else {<BR>&nbsp;&nbsp;&nbsp;System.out.println("BBB");<BR>&nbsp;&nbsp;&nbsp;return mapping.getInputForward();<BR>&nbsp;&nbsp;}<BR>&nbsp;}<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">}<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">ApplicationResources.properties</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">prompt.username=User Name<BR>prompt.password=User Password<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">errors.required={0} is required.<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">ApplicationResources_zh_CN.properties</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">prompt.username=</SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">用户名称<SPAN lang=EN-US><BR>prompt.password=</SPAN>登录密码<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">errors.required={0} </SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">是必须的<SPAN lang=EN-US>.<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">validation.xml</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&lt;form-validation&gt;<BR>&nbsp;&lt;formset&gt;<BR>&nbsp;&nbsp;&lt;form name="loginForm"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;field property="username" depends="required"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg0 key="prompt.username" /&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;/field&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;field property="password" depends="required"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg0 key="prompt.password" /&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;/field&gt;<BR>&nbsp;&nbsp;&lt;/form&gt;<BR>&nbsp;&lt;/formset&gt;<BR>&lt;/form-validation&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">到此已经完成了全部代码！<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><img src ="http://www.blogjava.net/eagames/aggbug/21037.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/eagames/" target="_blank">EA_Games</a> 2005-11-22 21:40 <a href="http://www.blogjava.net/eagames/archive/2005/11/22/21037.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts+Hibernate+Spring练习（续）</title><link>http://www.blogjava.net/eagames/archive/2005/11/22/21035.html</link><dc:creator>EA_Games</dc:creator><author>EA_Games</author><pubDate>Tue, 22 Nov 2005 13:39:00 GMT</pubDate><guid>http://www.blogjava.net/eagames/archive/2005/11/22/21035.html</guid><wfw:comment>http://www.blogjava.net/eagames/comments/21035.html</wfw:comment><comments>http://www.blogjava.net/eagames/archive/2005/11/22/21035.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/eagames/comments/commentRss/21035.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/eagames/services/trackbacks/21035.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">现在创建<SPAN lang=EN-US>spring</SPAN>框架<SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">配置<SPAN lang=EN-US>struts-config.xml</SPAN>文件，添加（<SPAN lang=EN-US>spring</SPAN>）的插件<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&lt;plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" /&gt;<BR>&nbsp; &lt;/plug-in&gt;</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">修改<SPAN lang=EN-US>LoginAction</SPAN>配置</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><B><SPAN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">原：</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&lt;action<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; attribute="loginForm"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input="/login.jsp"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="loginForm"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path="/login"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scope="request"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; validate="true"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="com.test.struts.action.LoginAction" /&gt;</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp; &lt;/action-mappings&gt;</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">改为：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&lt;action<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; attribute="loginForm"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input="/login.jsp"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="loginForm"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path="/login"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scope="request"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; validate="true"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: green; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">org.springframework.web.struts.DelegatingActionProxy</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">" /&gt;</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp; &lt;/action-mappings&gt;</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">绿色字体部份为修改内容</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">这里将使用<SPAN lang=EN-US>spring</SPAN>的代理器来对<SPAN lang=EN-US>Action</SPAN>进行控制</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">当提交到<SPAN lang=EN-US>/login.do</SPAN>是将控制权交给了<SPAN lang=EN-US>spring</SPAN>，然后由<SPAN lang=EN-US>spring</SPAN>来决定是否转回到<SPAN lang=EN-US>struts</SPAN>的<SPAN lang=EN-US>Action<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">现在来配置<SPAN lang=EN-US>spring<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<BR>&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><A href="http://www.springframework.org/dtd/spring-beans.dtd"><FONT color=#8d8c8c>http://www.springframework.org/dtd/spring-beans.dtd</FONT></A><SPAN style="COLOR: blue">"&gt;</SPAN><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&lt;beans&gt;<BR>&nbsp;</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: green; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&lt;bean name="/login" class="net.xiaxin.action.LoginAction" singleton="false"&gt;&lt;/bean&gt;</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><BR>&lt;/beans&gt;</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">绿色字体是关于转交控制权的配置内容</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">属性<SPAN lang=EN-US>singleton="false"</SPAN>，指明了<SPAN lang=EN-US>Action </SPAN>的实例获取方式为每次重新创建。解决了<SPAN lang=EN-US>Struts</SPAN>中令人诟病的线程安全问题（<SPAN lang=EN-US>Struts</SPAN>中，由一个<SPAN lang=EN-US>Action</SPAN>实例处理所有的请求，这就导致了类公用资源在并发请求中的线程同步问题。）（摘自<SPAN lang=EN-US>spring</SPAN>开发指南）<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><B><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">建立数据库在 </SPAN></B><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">这里我使用的是<SPAN lang=EN-US>mysql<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><st1:chsdate Year="1899" Month="12" Day="30" IsLunarDate="False" IsROCDate="False" w:st="on">4.1.1</st1:chsdate>x</SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">CREATE TABLE `user` (<BR>&nbsp; `ID` int(11) NOT NULL auto_increment,<BR>&nbsp; `USERNAME` varchar(50) NOT NULL default '',<BR>&nbsp; `PASSWORD` varchar(50) NOT NULL default '',<BR>&nbsp; PRIMARY KEY&nbsp; (`ID`)<BR>) ENGINE=MyISAM DEFAULT CHARSET=latin1; <o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><B><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">创建<SPAN lang=EN-US>Hibernate</SPAN>框架</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">使用<SPAN lang=EN-US>MyEclipse</SPAN>的数据<SPAN lang=EN-US>Database Explorer</SPAN>工具创建<SPAN lang=EN-US>User.hmb.xml</SPAN>、<SPAN lang=EN-US>AbstractUser.java</SPAN>、<SPAN lang=EN-US>User.java</SPAN>映射文件<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">创建完成后可以将自动生成的<SPAN lang=EN-US>hibernate.cfg.xml</SPAN>删除<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><B><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">创建<SPAN lang=EN-US>UserDAO.java</SPAN>、<SPAN lang=EN-US>UserDAOImp.java</SPAN></SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><B><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">修改<SPAN lang=EN-US>LoginAction.java</SPAN>文件</SPAN></B><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">，使用<SPAN lang=EN-US>userDao</SPAN>的方法来进行用户验证<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">package com.test.struts.action;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">import javax.servlet.http.HttpServletRequest;<BR>import javax.servlet.http.HttpServletResponse;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">import org.apache.struts.action.Action;<BR>import org.apache.struts.action.ActionForm;<BR>import org.apache.struts.action.ActionForward;<BR>import org.apache.struts.action.ActionMapping;<BR>import org.apache.struts.validator.DynaValidatorForm;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: green; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">import com.test.UserDAO;</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><BR>public class LoginAction extends Action {<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><BR>&nbsp;<SPAN style="COLOR: green">private UserDAO userDAO</SPAN>;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: green; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;public UserDAO getUserDAO() {<BR>&nbsp;&nbsp;return userDAO;<BR>&nbsp;}</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; COLOR: green; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;public void setUserDAO(UserDAO userDAO) {<BR>&nbsp;&nbsp;this.userDAO = userDAO;<BR>&nbsp;}</SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;public ActionForward execute(ActionMapping mapping, ActionForm form,<BR>&nbsp;&nbsp;&nbsp;HttpServletRequest request, HttpServletResponse response) {<BR>&nbsp;&nbsp;DynaValidatorForm loginForm = (DynaValidatorForm) form;<BR>&nbsp;&nbsp;// TODO Auto-generated method stub<BR>&nbsp;&nbsp;String username = (String) loginForm.get("username");<BR>&nbsp;&nbsp;String password = (String) loginForm.get("password");<BR>&nbsp;&nbsp;loginForm.set("password", null);<BR>&nbsp;&nbsp;<SPAN style="COLOR: green">if (userDAO.isValidUser(username,password)) {<BR>&nbsp;&nbsp;&nbsp;return mapping.findForward("indexGo");<BR>&nbsp;&nbsp;} else {<BR>&nbsp;&nbsp;&nbsp;return mapping.getInputForward();<BR>&nbsp;&nbsp;}<BR></SPAN>&nbsp;}<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">}<BR></SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">绿色字体为修改部份<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">现在剩下最后的<SPAN lang=EN-US>spring</SPAN>配置了<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<BR>&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<A href="http://www.springframework.org/dtd/spring-beans.dtd"><FONT color=#8d8c8c>http://www.springframework.org/dtd/spring-beans.dtd</FONT></A>"&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&lt;beans&gt;<BR>&nbsp;&lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt;<BR>&nbsp;&nbsp;&lt;property name="driverClassName"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt;<BR>&nbsp;&nbsp;&lt;/property&gt;<BR>&nbsp;&nbsp;&lt;property name="url"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;jdbc:mysql://localhost:3306/test&lt;/value&gt;<BR>&nbsp;&nbsp;&lt;/property&gt;<BR>&nbsp;&nbsp;&lt;property name="username"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;root&lt;/value&gt;<BR>&nbsp;&nbsp;&lt;/property&gt;<BR>&nbsp;&nbsp;&lt;property name="password"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;value&gt;&lt;/value&gt;<BR>&nbsp;&nbsp;&lt;/property&gt;<BR>&nbsp;&lt;/bean&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;&lt;bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"&gt;<BR>&nbsp;&nbsp;&lt;property name="dataSource"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;ref local="dataSource" /&gt;<BR>&nbsp;&nbsp;&lt;/property&gt;<BR>&nbsp;&nbsp;&lt;property name="mappingResources"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;list&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;com\test\Hibernate\User.hbm.xml&lt;/value&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;/list&gt;<BR>&nbsp;&nbsp;&lt;/property&gt;<BR>&nbsp;&nbsp;&lt;property name="hibernateProperties"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;props&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="hibernate.dialect"&gt;net.sf.hibernate.dialect.MySQLDialect&lt;/prop&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="hibernate.show_sql"&gt;true&lt;/prop&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;/props&gt;<BR>&nbsp;&nbsp;&lt;/property&gt;<BR>&nbsp;&lt;/bean&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;&lt;bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"&gt;<BR>&nbsp;&nbsp;&lt;property name="sessionFactory"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;ref local="sessionFactory" /&gt;<BR>&nbsp;&nbsp;&lt;/property&gt;<BR>&nbsp;&lt;/bean&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;&lt;bean id="userDAO" class="com.test.UserDAOImp"&gt;<BR>&nbsp;&nbsp;&lt;property name="sessionFactory"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;ref local="sessionFactory" /&gt;<BR>&nbsp;&nbsp;&lt;/property&gt;<BR>&nbsp;&lt;/bean&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;&lt;bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&gt;<BR>&nbsp;&nbsp;&lt;property name="transactionManager"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;ref bean="transactionManager" /&gt;<BR>&nbsp;&nbsp;&lt;/property&gt;<BR>&nbsp;&nbsp;&lt;property name="target"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;ref local="userDAO" /&gt;<BR>&nbsp;&nbsp;&lt;/property&gt;<BR>&nbsp;&nbsp;&lt;property name="transactionAttributes"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;props&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="insert*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="get*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="is*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;/props&gt;<BR>&nbsp;&nbsp;&lt;/property&gt;<BR>&nbsp;&lt;/bean&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;&lt;bean name="/login" class="com.test.struts.action.LoginAction" singleton="false"&gt;<BR>&nbsp;&nbsp;&lt;property name="userDAO"&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;ref bean="userDAOProxy" /&gt;<BR>&nbsp;&nbsp;&lt;/property&gt;<BR>&nbsp;&lt;/bean&gt;<BR>&lt;/beans&gt;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&nbsp;<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">现在可以进行测试了！<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><img src ="http://www.blogjava.net/eagames/aggbug/21035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/eagames/" target="_blank">EA_Games</a> 2005-11-22 21:39 <a href="http://www.blogjava.net/eagames/archive/2005/11/22/21035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts1.2+Spring2.0+Hibernate3示例</title><link>http://www.blogjava.net/eagames/archive/2005/11/22/21034.html</link><dc:creator>EA_Games</dc:creator><author>EA_Games</author><pubDate>Tue, 22 Nov 2005 13:38:00 GMT</pubDate><guid>http://www.blogjava.net/eagames/archive/2005/11/22/21034.html</guid><wfw:comment>http://www.blogjava.net/eagames/comments/21034.html</wfw:comment><comments>http://www.blogjava.net/eagames/archive/2005/11/22/21034.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/eagames/comments/commentRss/21034.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/eagames/services/trackbacks/21034.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 工具：&nbsp;&nbsp;&nbsp;&nbsp;Eclipse3.1、MyEclipse4.03、Tomcat5.5.9、Properties Editor插件、MySql4.1.13&nbsp;新建工程：名称为 login&nbsp;创建Struts框架&nbsp;创建 index.jsp，增加一链接指向 login.jsp&nbsp;按下Ctrl + ...&nbsp;&nbsp;<a href='http://www.blogjava.net/eagames/archive/2005/11/22/21034.html'>阅读全文</a><img src ="http://www.blogjava.net/eagames/aggbug/21034.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/eagames/" target="_blank">EA_Games</a> 2005-11-22 21:38 <a href="http://www.blogjava.net/eagames/archive/2005/11/22/21034.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring</title><link>http://www.blogjava.net/eagames/archive/2005/10/21/16355.html</link><dc:creator>EA_Games</dc:creator><author>EA_Games</author><pubDate>Fri, 21 Oct 2005 14:20:00 GMT</pubDate><guid>http://www.blogjava.net/eagames/archive/2005/10/21/16355.html</guid><wfw:comment>http://www.blogjava.net/eagames/comments/16355.html</wfw:comment><comments>http://www.blogjava.net/eagames/archive/2005/10/21/16355.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/eagames/comments/commentRss/16355.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/eagames/services/trackbacks/16355.html</trackback:ping><description><![CDATA[<P>Spring(1)<BR>一地鸡毛 @ 2004-08-12 17:57</P>
<P>看了Rod的介绍Spring的文章，翻译后的连接： </P>
<P><BR><A href="http://blog.csdn.net/taowen2002/archive/2004/05/07/15875.aspx">http://blog.csdn.net/taowen2002/archive/2004/05/07/15875.aspx</A> </P>
<P>一，Spring简介 <BR>Spring的特点： <BR>1， Spring不同于其他的Framework，它要提供的是一种管理你的业务对象的方法。 <BR>2， Spring有分层的体系结构，意味着你能选择仅仅使用它的任何一个独立的部分，而其他的仍然使用你的相关实现。 <BR>3， 它的设计从一开始就是要帮助你编写易于测试的代码，Spring是使用测试驱动开发（TDD）的工程的理想框架。 <BR>4， Spring不会给你的工程添加对其他的框架依赖；同时Spring又可以称得上是个一揽子解决方案，提供了一个典型应用所需要的大部分基础架构。 </P>
<P>Spring的好处： <BR>1， Spring能有效地组织你的中间层对象；（*） <BR>2， Spring能消除在许多工程中常见的对Singleton的过多使用； <BR>3， 通过一种在不同应用程序和项目间一致的方法来处理配置文件，消除各种自定义格式的属性文件的需要，仅仅需要看看类的JavaBean属性。Inversion of Control的使用帮助完成了这种简化；（使用的是type2的IoC） <BR>4， 能够很容易培养你面向接口而不是面向类的编程习惯。（这也算。。。） <BR>5， Spring的设计会让使用它创建的应用尽可能少的依赖于它的APIs，在Spring应用中的大多数业务对象没有依赖于Spring。 <BR>6， 使用Spring构建的应用程序易于单元测试； <BR>7， Spring使EJB成为一个实现选择，而不是必需的选择。你可以用POJOs或local EJBs来实现业务接口，却不会影响到调用代码。 <BR>8， Spring提供一些web应用上的EJB的替代方案，比如用AOP提供声明性事务管理； <BR>9， Spring为数据存取提供了一个一致的框架，不论是使用JDBC还是O/R mapping的产品（Hibernate，JDO）。 </P>
<P>Spring的任务描述： <BR>Spring的主要目的就是使J2EE易用和促进良好的编程习惯。 <BR>Spring不会重新发明轮子，它是让已有的技术更加易用，比如它没有底层事务协调处理，但是提供了一个抽象层覆盖了JTA和任何其他的事物策略。Spring并没有和其他的开源项目竞争，不过还是在一些领域有新的方案提供，比如它的web framework，轻量级的IoC容器和AOP框架。 </P>
<P><BR>二，Inversion of Control容器 <BR>Spring的设计核心是org.springframework.beans包，用来协调JavaBeans的工作。这个包一般不会被用户直接使用，而是作为其他功能的基础服务。 <BR>下一个高一些的抽象概念是Bean Factory，一个Spring bean factory是一个可以通过名称来获取objects的通用工厂，并且管理objects之间的关系。 <BR>Bean factories支持两种对象模式： <BR>Singleton：默认的，最常使用的，对于无状态的对象是一种理想的模式。 <BR>Prototype：每次获取将创建一个独立的对象，可以让用户拥有他们自己的对象。 </P>
<P>由于org.springframework.beans.factory.BeanFactory是一个简单的接口，所以你能够方便地实现出你自己的BeanFactory，但是很少用户需要这样做；常用的BeanFactory定义是： <BR>XmlBeanFactory：解析简单直观的定义类和命名对象属性的XML结构； <BR>ListableBeanFactoryImpl：提供了解析存放在属性文件中的bean定义的能力； </P>
<P>通过BeanFactory的概念，Spring成为了一个Inversion of Control容器。IoC背后的概念就是所谓的Hollywood原则：Don’t call me, I ‘ll call you。IoC将控制创建的职责从对象的代码中搬进了框架中，使用IoC容器只需指出组件需要X对象，在运行期容器会提供给它具体的对象。而容器就是通过查看方法的参数表（例如JavaBean的属性），或者通过配置源（XML）来得到相应的信息，从而实现向组件提供对象 </P>
<P>Spring ApplicationContext是BeanFactory的子接口，为下列东西提供支持： <BR>信息查找，支持国际化 <BR>事件机制，允许发布应用程序以及可选的注册已接受到事件 <BR>可移植的文件和资源访问 </P>
<P><BR>三，JDBC抽象和数据访问异常层次 <BR>JDBC提供了不错的数据库抽象，但是也有痛苦的地方： <BR>需要大量的错误处理代码来确保ResultSet,Statement,Connection在使用后关闭； <BR>没有异常的层次，使用SQLException来响应所有的错误，并不知道具体错在哪里。 <BR>Spring用两种方法解决这些问题： <BR>通过API把冗长易出错的异常处理代码从程序转移到框架中，框架处理所有异常，而程序代码集中精力进行SQL和处理结果上； <BR>为要处理SQLException的程序代码提供有意义的异常层次。当Spring第一次从数据源取得一个连接时，它检查元数据以确定数据库，随后它使用这些信息把SQLException映射为自己的异常层次中的响应的异常，是你可以和有意义的异常打交道。 </P>
<P>Spring提供两层JDBC API，第一个在org.springframework.jdbc.core包中，使用回调机制移动控制权从程序转移到了框架中，这是一种不同的Inversion of Control。 <BR>在org.springframework.jdbc.object包中是对JDBC的更高层次的抽象。这是建立在核心的JDBC回调功能基础之上的，但是提供了一个能够对RDBMS操作的API，在这个API中无论是查询，更新或是存储过程，都是用Java对象来建模。这组API受到了JDO查询API的影响，非常直接而且有用。 </P>
<P>Spring数据访问异常层次是基于unchecked exception的，这样开发者可以自己决定是否来捕捉这些异常从而恢复。 </P>
<P>Spring JDBC对你带来的好处： <BR>你不必像JDBC那样写finally； <BR>你需要编写的代码变少了； <BR>你不必钻研RDBMS文档去解决理解，一个因为错误的列名而返回的诡异错误码； <BR>不管你使用何种持久化技术，你都可以方便地实现DAO模式，让业务代码不依赖于任何特定的数据访问API。 </P>
<P><BR>四，O/R mapping集成 <BR>Spring提供了对Hibernate 2.x和JDO的集成支持，尤其是对Hibernate的集成。 <BR>为什么要使用Hibernate+Spring，而不是直接使用Hibernate呢？ <BR>1， 用Hibernate的代码通常需要为了效率和适当的事务处理而使用相同的Session对象；Spring通过在代码层上使用显式的template包装类或者使用声明式的，AOP的方法拦截(interceptor)方式两种方案，使得能够很容易透明地创建和绑定Session到当前的线程。 <BR>2， 资源管理，Spring的应用程序context能够处理Hibernate SessionFactories的位置和配置，JDBC数据源和其他的相关资源；使得易于管理和改变。 <BR>3， 集成的事务管理 Spring让你能够把你的Hibernate代码包装起来，通过2种方式：在代码层上使用显式的template包装类，或者使用声明式的，AOP的方法拦截(interceptor)。 <BR>4， Spring能够包装Hibernate异常，把它们从私有的，checked异常转换为一套抽象的运行时异常；使得你能够在任何你需要的地方捕捉和处理异常，并且JDBC异常也被转换到相同的层次中，意味着你能在一致的编程模型中对JDBC执行相同的操作。 <BR>5， 为了避免和厂商绑定 Hibernate强大，灵活，免费，当时仍然使用私有的API；Spring对Hibernate的事务和异常的抽象，使你很容易将Hibernate-specific代码隔离开你的应用程序部分，而不会影响Hibernate的强大功能。 <BR>6， 测试简单 Spring的IoC使它很容易改变Hibernate session factories的位置，数据源，事务管理和映射对象执行，这使得很容易隔离和测试每一块持久关系代码。 </P>
<P>五，事务管理 <BR>JTA使一个直接用起来很笨重的API，许多J2EE开发者感到EJB CMT使对于事务管理的唯一合理的选择。 <BR>Spring提供了它对事务管理的抽象，提供了： <BR>1， 通过类似于JdbcTemplate的回调模板编程管理事务，比起直接用JTA容易多； <BR>2， 类似于EJB CMT的声明式事务管理，但不需要EJB容器； </P>
<P><BR>六，AOP <BR>Spring的AOP支持的首要目标是要给POJOs提供J2EE服务，而且它有能够在应用服务器之间移植的优势，Spring AOP支持method interception，关键概念包括： <BR>Interception：自定义行为能够在对接口和类的调用之前之后插入； <BR>Introduction：指定advice会导致对象实现额外的接口，混乱了继承； </P>
<P>Spring使用动态代理实现AOP或者在运行时使用CGLIB生成字节码（这是的能够代理类）。两种方法都能够在任何应用服务其中使用。 <BR>Spring使实现了AOP Alliance接口的AOP框架（在学习AOP中介绍过）。 </P>
<P>Spring AOP最常见的应用使声明式事务管理，这是基于前面描述的TransactionTemplate抽象上的，并且可以给任何POJO提供声明式事务管理。 <BR>Spring的声明式事务管理类似于EJB CMT，但在以下方面不同： <BR>l 事务管理能够应用于任何POJO； <BR>l 通过使用Spring的事务API能够在事务性POJO中实现编程回掉。为此我们提供静态的方法，使用ThreadLocal变量，因而不需要你传递EJBContext这样的对象确保回滚； <BR>l 你可以声明式地定义“回滚规则”； <BR>l 事务管理不绑定于JTA。 <BR>当然你还可以使用Spring AOP实现程序特有的aspects。 <BR>请对以上恢复出来的文字进行修改后提交<BR>七，MVC web框架 <BR>Spring的MVC model类似于Struts。在多线程服务对象这点上，Spring的Controller类似于Struts Action，只有一个实例处理所有客户请求。 <BR>Spring MVC比起Struts的优点： <BR>1， Spring在Controller, JavaBean, model和views提供了一个非常清晰的划分； <BR>2， Spring的MVC是非常灵活的。不像Struts强制你继承它的Action和Form对象，Spring MVC完全是基于接口的； <BR>3， Spring MVC是真正的view无关的。你不会被强制使用JSP <BR>4， 和其他对象一样，Spring的Controller是通过IoC配置的。使它们易于测试； <BR>5， Web层变成了业务对象层上的薄薄一层 </P>
<P><BR>八，EJB相关 <BR>实现EJB： <BR>如果你选择使用EJB，Spring能在EJB实现和客户端访问EJB两方面都提供很大的好处。 <BR>Spring为session bean和message drive bean提供了方便的超类，使得通过自动载入基于包含在EJB jar文件中的XML文档BeanFactory让这变得很容易。 <BR>感觉不是很有用的样子。 </P>
<P>使用EJB： <BR>许多EJB程序使用Service Locator和Business Delegate模式，这些比在客户代码中使用JDNI查找强多了，但是还是有显著的缺点： <BR>l 使用EJB的典型代码依赖Service Locator或者Business Delegate singletons，难于测试； <BR>l 在Service Locator模式没有使用Business Delegate的情况下，程序代码还要在EJB home重调用create()方法，并且可能导致异常，代码依然绑定在EJB API上； <BR>l 实现Business Delegate模式通常导致显著的代码重复； <BR>我们只需要给需要EJB的Bean定义一个组件，在XML中指定它的jndi name,interface，Spring AOP框架会帮你为EJB创建一个代理，实现了业务方法的接口，缓存EJBHome，代理JNDI查找，调用响应的业务方法。 <BR>从而使你的web层代码不依赖于EJB的使用，如果你要使用POJO或其他object代替EJB引用，你只需要改动组件定义xml，而不影响代码。<BR>&nbsp;<BR></P><img src ="http://www.blogjava.net/eagames/aggbug/16355.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/eagames/" target="_blank">EA_Games</a> 2005-10-21 22:20 <a href="http://www.blogjava.net/eagames/archive/2005/10/21/16355.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>