一个简单的struts页面

      用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真的好有用啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值