Struts快速入门

 Struts快速入门

    一、Struts快速入门案例

为什么要学习Struts呢?因为Web层jsp页面调用servlet过于繁琐,Apache组织开发了一套针对web层简化操作的框架,可以简化Web层的操作。

首先,我们了解了为什么要学习Struts后,我们先来用上Struts框架实现用户注册页面。

1、编写一个注册页面

2、把表单的注册请求交给struts处理

3、导入struts开发环境

  (1)导入struts开发包

  (2)在web.xml文件中配置struts处理所有.do的请求

<servlet>

    <servlet-name>ActionServlet</servlet-name>

    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

    <init-param>

       <param-name>config</param-name>

       <param-value>/WEB-INF/struts-config.xml</param-value>

    </init-param>

    <load-on-startup>1</load-on-startup>

</servlet>

    <servlet-mapping>

    <servlet-name>ActionServlet</servlet-name>

    <url-pattern>*.do</url-pattern>

</servlet-mapping>

4、在web-inf中加入struts的配置文件

<?xml version="1.0" encoding=“UTF-8" ?>

<!DOCTYPE struts-config PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN""http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>

    <form-beans>

      <form-bean name="userForm" type="cn.itcast.web.formbean.UserForm"></form-bean>

    </form-beans>

<action-mappings>  <!-- 将以下配置信息自动封装进actionMapping对象 -->

    <action path="/register" type="cn.itcast.web.action.RegisterAction" name="userForm">

      <forward name="message" path="/message.jsp"></forward>

    </action>

</action-mappings>

</struts-config>

5、编写封装表单数据的formbean

6、编写处理请求的action

7、根据struts配置,进行转发请发

在配置文件 Struts-config.xml 中配置
<action path="/RegisterUser" type="cn.ysp.web.action.RegisterUser" name="UserFormBean">
      <forward name="success" path="/success.jsp"/>
      <forward name="failure" path="/success.jsp"/>
</action>

因此在程序中只用调用ActionMapping对象的实例调用其findForward(“name”)方法,实现转发

ActionForward forward = new ActionForward(“/success.jsp”);

    Return forward;

下面是Struts对Web层进行封装数据,简化数据的大概流程图:

 

二、Struts工作流程

(1)       Struts的控制器组件主要包括

     ActionServlet对象:Struts 的核心类

     RequestProcessor对象:由ActionServlet调用,负责处理用户请求

     Action对象:用户自己编写的类

(2)     Struts处理请求的流程:

      当 ActionServlet 接收到 HTTP 请求后,在 doGetdoPost 方法中都会调用process()方法处理请求

      在 ActionServlet 的 process() 方法中一旦选择了正确的子应用模块,就会调用RequestProcessor实例的process()方法来处理请求。在ActionServlet调用这个方法时,会把当前的request和response对象传给它

      RequestProcessor实例的process()方法调用ProcessActionCreate()方法,先判断是否在 Action 缓存中存在Action实例,如果不存在,就创建一个Action实例,把它保存在 Action 缓存中

      RequestProcessor实例的process()方法调用Action实例的execute()方法

三、Struts配置中的常用属性

 

path=“/register“ ------> 指定action处理的地址
type=“cn.itcast.RegisterAction"  ------> 指定处理请求的Action的完整类名
name=“userFormBean“ ------->指定使用哪个formbean封装请求参数
scope="request" ------>指定把formbean存放到哪个域对象中,默认session
attribute=“myformbean"  ------>指定formbean存储的key,不设默认为name属性的值
input="/register.jsp"  ------>指定formbean的数据是由哪个页面提供的,提供此属性的目的在于formbean校验失败时,程序方便跳回formbean的输入页面,显示校验失败信息。                                 
forward=“welcome.jsp“  ----->指定收到请求时,跳转到相应的jsp页面,如果配置了此属性,则action将不再被调用。
include="welcome.jsp"  ------>指定收到请求时,进行页面包含。
unknown= “true"  ------>如果action把该属性设置为true,则它可以处理客户机发出的所有无效的.do请求,默认值为false
parameter=“method”  ------>配置action参数,调用actioMapping.getParameter方法可以获得这里配置的参数。 
classname=“”  ------>  <action>标签和所有的配置信息使用哪个对象封装,默认值为ActionMapping对象。
validate="true"  ------>请求参数封装到formbean中后,是否让struts自动调用formbean的validate方法进行数据校验。默认true
l
<forward name="hello" path="/success.jsp"/>------>Struts请求转发

四、Struts进行表单校验

      校验:

1、表单数据提交后,在服务器端编程校验数据合法性,是一个很常见的需求。所以struts的ActionServlet在把数据封装到formbean后,会自动调用formbean的validate方法对数据进行校验,并根据validate方法的返回值,决定转发到哪个jsp页面处理。

2、  Sturs的这种处理方式,可以让开发人员少死点脑细胞,开发人员只需要在validate方法中写代码进行数据校验就OK了,调用方法的事由struts的actionServlet去做了,并且,调用方法完后,如果有错误,跳转的事,也由struts根据配置文件做了。

3、  注意:若想struts的actionServlet把数据封装到formbean后,调用其validate方法,需要在struts-config.xml文件中把action的validate属性设置为true,默认值为true。

Struts调用formbean.validate方法后,其规则为: 
            (1)如果validate返回的ActionErrors对象为空或null,则Struts认为表单验证通过,struts进而继续调用Action处理请求。 
            (2)如果validate返回的ActionErrors不为空,并且封装了数据,则认为校验失败,Struts将自动跳转回表单输入页面。(input属性指定)
             因此用户若想校验失败,只需要创建ActionErrors对象,并调用其方法:

      ActionErrors.add(String key,ActionMessage message)

 

l

例:

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
             ActionErrors errors = new ActionErrors();
             if(isEmpty(this.username)){
                     addMessage(errors, "username", "用户名不能为空");
             }else{
                     if(!this.username.matches("[A-Za-z]{3,6}")){
                     addMessage(errors, "username", "用户名要是3-6位");
                     }
              }

 

return errors;

   显示校验信息:

Struts在收到Formbean的返回值ActionErrors后,会将其存储到request域中,进而带给表单页面,以便开发人员在表单页面中显示校验失败的错误信息(这点建议读读struts的源码)。
        1)在JSP页面中开发人员可以编码显示错误信息:(手工获取)




       1>注意上面的代码取request的errors对象时为什么用“org.apache.struts.action.ERROR”,这个值从何来?
       2>显示消息时有可能需要在struts-config.xml文件中配置一个资源文件
       <message-resources parameter="MessageResource"/>

2)使用Struts的html标签获取错误信息

在JSP页面中手工编码获取errors对象中保存的数据很麻烦,因此Struts编写了<html:errors>标签,它用于封装JSP页面中用于获取消息的java代码。
       用户使用<html:errors>标签可以很轻松获取到errors中保存的校验信息,示例。
      <html:errors>标签也可以以ActionMessage中封装了key为关键字,从资源文件中检索数据予以显示,如下所示:


注意:1>html:errors标签在显示ActionMessage封装的消息时,将以ActionMessage的key为关键字从资源文件中检索数据显示
          2>errors标签工作时需要资源文件

ActionMessage封装消息的方式很灵活,后面两个构造函数中的value参数,用于替换消息文本中的占位符:


以下是往Actionmessage对象中封装消息的代码示例:


五、Struts进行数据回显

 Struts提供了很多表单相关的自定义标签,如:
<html:text>
<html:radio>
<html:select>
<html:option>
<html:checkbox>
<html:multibox>
<html:textarea>
……
      这些标签除用于生成相应的html标签外,最大的好处在于它在产生html标签时,会自动检索相应formbean的数据予以显示,这样,当表单校验失败时,表单数据的回显struts帮我们干了,开发人员就不需要再编码去取了。


使用Struts的html标签完成数据回显时注意的问题:
      html标签回显数据时,会以org.apache.struts.taglib.html.BEAN为关键字,从各个域中查找bean,找不到则抛空指针异常。所以使用html标签时域中须有以org.apache.struts.taglib.html.BEAN为关键字的对象。
      这个工作可以交给html:form标签做,html:form标签在执行时,会查找域中已有的formbean,并以org.apache.struts.taglib.html.BEAN为关键字把formbean存在域中。

如果html:form标签在域中找不到formbean,则html:form标签会实例化一个空bean,然后存储到域中。因此,为了在页面中使用struts的html标签回显数据,这些标签需要配合html:form标签使用。(查看html:form标签的源文件可以看到这点)。
      对于复选框中的数据,Html:checkbox标签不能完成数据回显,复选框的数据回显需要使用html:multibox。
      Struts中的html:password标签也会回显数据,如果不想password回显,需要把其redisplay属性置为false。
补充:formbean的reset方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值