用Myeclipse建立一个简单的 formbean和action实现简单的页面登陆功能.视图为regedit.jsp
regedit.jsp主要代码如下:
<html:form action="/regedit">
address : <html:text property="address"/><br/>
name : <html:text property="name"/><br/>
<html:submit/><html:cancel/>
</html:form>
很简单,只有两个文本框架用于用户输入地址和名字,还有提交按钮和取消按钮.启动tomcat看看在浏览器(客户端)运行时的代码.
<form name="regeditForm" method="post"
action="/struts/regedit.do;jsessionid=B27047C17C70A2AA0F84647D2FCCE17A">
address : <input type="text" name="address" ><br/>
name : <input type="text" name="name" br/>
<input type="submit" value="Submit"><input type="submit" name="org.apache.struts.taglib.html.CANCEL" value="Cancel" οnclick="bCancel=true;">
</form>
原来的form表单中action='/regedit'变为action="/struts/regedit.do;jsessionid=B27047C17C70A2AA0F84647D2FCCE17A"了.再回到struts框架中.
先看看一幅图
当用户按下提交按钮的时候执行第一步(HTTP请求),然后请求到达服务器,接着被ActionServlet响应,这个Servlet是什么东西呢?请看web.xml:
<servlet>
<servlet-name>action</servlet-name> <<Servlet的名字
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <<servlet类的路径
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value> << 引出了struts-config.xml
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern> <<<<看到了吗,这个是响应所有*.do,刚才看到的 action=="/struts/regedit.do"正好对应这个
</servlet-mapping>
接着再看看被引出来的struts-config.xml
<form-beans > <<顾名思义,formbean
<form-bean name="regeditForm" type="com.tmd.struts.form.RegeditForm" /> <<type属性为类的路径
</form-beans>
<action-mappings >
<action
attribute="regeditForm" <<对应上面的formbean的名字
input="/regedit.jsp" <<为什么servlet会知道把regedit提交过来的数据填写到对应的formbean 答案就在 这个attribute="regeditForm"与input='/regedit.jsp',
name="regeditForm"
path="/regedit"
scope="request"
type="com.tmd.struts.action.RegeditAction"> <<对应的action啊
<forward name="show.jsp" path="/show.jsp" />
</action>
</action-mappings>
好了,服务器接受了从regedit.jsp传输过来的数据并且填到相应的java bean中(也就是formbean),在formbean中有一个数据检验的方法(属于服务器验证).到Regedit.java(formbean的java源文件)中看看:
/** address property */
private String address; << 地址
/** name property */
private String name; << 名字
校验方法,在这个函数中可以对名字或者地址校验,譬如名字是否为空等等,一般参数教少的时候采用这种检验方法,编写代码的时候比较省力.但是参数过多时候为了减轻服务器的负担,那么就应该使用客户端检查方法了.即把formbean写成动态的形式,这里仅说说"静态"的.
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
// TODO Auto-generated method stub
return null;
}
好,假如不设置任何输入验证,那么就转到了action中,或者你又会问,那么又怎么知道转到哪个action啊?请回头看看struts-config.xml action的type属性啊.现在知道了哪个action,就去看看个究竟.
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
RegeditForm regeditForm = (RegeditForm) form;// TODO Auto-generated method stub
return mapping.findForward("show.jsp");
竟然就只有一个函数!那肯定是执行它啦,看看他的返回值,是mapping.findForward("show.jsp");这个实现页面转向的show.jsp什么东西?还是看struts-config.xml吧!好了,现在你可以在show.jsp中显示刚才输入的用户名和地址就只需在show.jsp页面中使用java bean的 getpropetty方法就行了(还是那句话,formbean就是一个java bean).一个简单的struts框架就这样实现了.
总结出经验没有,struts-config.xml真的好有用啊!