原创:第二节struts1的处理流程及配置文件详解
2011-01-06 07:49
483 查看
通过第一节内容我们了解了struts1的简单处理过程.在处理的过程中我们使用到了struts1中的struts-config.xml配置文件,那么这一小节我们就针对其action配置的属性详细解析Action配置中属性含义及其使用。
1、首先我们来简单总结以下struts1的处理流程
首先:由视图层发出请求,当 ActionServlet 接收到 HTTP 请求后,在 doGet 或 doPost 方法中都会调用process()方法处理请求
其次:在ActionServlet 的 process() 方法中一旦选择了正确的子应用模块,就会调用RequestProcessor实例的process()方法来处理请求。在ActionServlet调用这个方法时,会把当前的request和response对象传给它
然后:RequestProcessor实例的process()方法调用ProcessActionCreate()方法,先判断是否在 Action 缓存中存在Action实例,如果不存在,就创建一个Action实例,把它保存在 Action 缓存中
最后:RequestProcessor实例的process()方法调用Action实例的execute()方法 并返回相应的试图界面
2、简单了解struts1的处理流程之后那么我们就来了解一下struts1配置文件中action的常用属性
首先列举action的属性代码如下:
[align=left] <action path="URL" [/align]
[align=left] type="ActionClass" [/align]
[align=left] name="userForm" [/align]
[align=left] scope="request" [/align]
[align=left] attribute="key" [/align]
[align=left] input="/register.jsp"[/align]
[align=left] forward="/index.jsp" [/align]
[align=left] include="/index.jsp" [/align]
[align=left] unknown="true" [/align]
[align=left] parameter="test" [/align]
[align=left] className="mappingclass"[/align]
[align=left] validate="true">[/align]
[align=left] <forward name="" path=""></forward>[/align]
</action>
下面就对其属性解析
l a、path :代表请求的Action的名称,无需指明后缀struts1自动处理
例如上一节中的/Register 就是从视图中提交的Action请求 此请求有的方式是:
<form action="${pageContext.request.contextPath}/Register.do" method="post">....</form>
当其点击此提交时后缀名称为.do,(由于我们在会web.xml配置*.do的处理),所以经过mapping的地址映射,交给ActionServlet按照struts1的处理流程处理提交Action的请求。
l b、type:代表请求的的Action交给那个Action处理,注意此类的名称一定是类的全名称(包括包名)
l c、name:代表的是请求参数封装的ActionForm的名称。
备注:此名称与<form-beans><form-bean name="名称Form" type="Form类的全名"></form-bean></form-beans>中"名称Form"一致,并通过此form-bean中的type来指定封装的ActionForm类。
l d、scope:代表把formbean的参数封装到那个作用域中,默认的作用域为session
备注:当我们没有指定formbean的作用域时,在type指定的Action类中还可以通过以下代码获取:
[align=left] /** 获取ActionForm中的对象并强制造型为UserForm 此获取方式为通过传递的ActionForm参数直接获取,开发中就是用此方式 */[/align]
[align=left] // UserForm userForm = (UserForm) form;[/align]
[align=left] /**[/align]
[align=left] * 由于在Action的属性配置中的scope属性指定了userForm的作用域, 当采用的是默认值(session)时,[/align]
[align=left] * 也可以直接从作用域中获取代码如下:[/align]
[align=left] */[/align]
[align=left] UserForm userForm = (UserForm) request.getSession().getAttribute("userForm");[/align]
[align=left] [/align]
[align=left] System.out[/align]
[align=left] .println("用户名称:" + userForm.getUsername() + " 用户密码:"[/align]
[align=left] + userForm.getUserpass() + " 用户邮箱:"[/align]
[align=left] + userForm.getUseremail());[/align]
/**备注:
由于在开发的过程中为了节省ActionForm占用的内存空间,我们一般不采用默认值,而是采用scope=”request”配置,因此我们也可以采用一下的方式获取*/
UserForm userForm = (UserForm) request.getAttribute("userForm");
[align=left] 注意:由于在aciton的配置中我们没有配置attribute="key" 此属性时,在Action中获取的关键字采用默认的值及name的名称,当配置了attribute="key"此属性是必须通过"key"获取.如果你不明白看下面的介绍。[/align]
[align=left] [/align]
l E、attribute 指定formbean存储的key,不设默认为name属性的值。
[align=left] 举例:如果我们在action的配置中配置了attribute=”uform”的话,那么我们在Action中获取的方式就应该为:[/align]
[align=left] /** 通过方法参数中传递的ActionForm获取ActionForm中的对象[/align]
[align=left]并强制造型为UserForm */[/align]
[align=left]UserForm userForm = (UserForm) form;[/align]
[align=left]/**由于在action的配置中我们指明了attribute的属性及属性值,因此我们应该采用以下方式获取*/[/align]
[align=left] UserForm userForm = (UserForm) request.getAttribute("uform");[/align]
[align=left] System.out[/align]
[align=left] .println("用户名称:" + userForm.getUsername() + " 用户密码:"[/align]
[align=left] + userForm.getUserpass() + " 用户邮箱:"[/align]
[align=left] + userForm.getUseremail());[/align]
备注:在指明了attribute属性后,我们如果还采用d中介绍方式即直接从作用域通过name的属性值获取的话,会出现javax.servlet.ServletException: java.lang.NullPointerException异常信息.
l F、input="/register.jsp" 指定formbean的数据是由哪个页面提供的。
说明:提供此属性的目的在于formbean校验失败时,程序方便跳回formbean的输入页面,通过struts1错误信息标签,显示校验失败信息。
l G、forward="/index.jsp" 指定收到请求时,跳转到相应的jsp页面
强调:如果配置了此属性,则action将不再被调用,即接受到此action时,直接调至到index.jsp页面。
l H、include="/index.jsp" 指定收到请求时,进行页面包含
l I、unknown="true" 如果action把该属性设置为true,则它可以处理客户机发出的所有无效的.do请求,默认值为false
举例:如果在配置文件中添加如下的action配置,
<action path="/**" forward="/index.jsp" unknown="true"/>
当如果在地址栏中发出请求为: http://localhost:8080/20110105struts1_2/regi.do 如果在此配置文件中找不到regi.do的Action就会处理上面配置的action直接跳转到index.jsp页面 (备注:与此action中path名称无关,但必须配置一个path属性).
l J、parameter="test"配置action参数,调用actioMapping.getParameter方法可以获得这里配置的参数(后续会详细介绍)
l K、className="mappingclass" <action>标签和所有的配置信息使用哪个对象封装,默认值为ActionMapping对象。这是struts1的作者考虑,开发者使用自己开发的Mapping类提供的配置.
l L、validate="true" 请求参数封装到formbean中后,是否让struts自动调用formbean的validate方法进行数据校验。默认true(后续会详细介绍)
除此之外还用一些属性配置,我只做了常用属性的介绍.
[align=left]3、forward标签[/align]
[align=left]在action配置中,还有一些其他的标签配置,在上面种我们看到了<forward name="" path=""></forward>即在处理完此action之后我们可以在Action中的execute方法中通过此标签的name属性获取此action,并跳转到相应的path地址中去.[/align]
[align=left]举例:如果在action内部我们配置了forward标签的代码如下:[/align]
[align=left]<forward name="message" path="/message.jsp"></forward>[/align]
[align=left] 那么我们可以再Action返回值中做如下处理:[/align]
[align=left]/** 获取跳转的地址并返回ActionForward */[/align]
[align=left] return mapping.findForward("message");[/align]
[align=left]通过以上配置,在处理完此action后,struts1经过处理后就会跳转到/message.jsp视图层.[/align]
[align=left] [/align]
通过上面的介绍我们简单了解了struts1的处理流程、action配置、forward标签及在Action中的处理,希望你能够数量掌握及其应用.
以上内容归redarmy_chen原创,版权归redarmy_chen所有不得随意转载
如有问题请发送邮件到redarmy_chen@qq.com
1、首先我们来简单总结以下struts1的处理流程
首先:由视图层发出请求,当 ActionServlet 接收到 HTTP 请求后,在 doGet 或 doPost 方法中都会调用process()方法处理请求
其次:在ActionServlet 的 process() 方法中一旦选择了正确的子应用模块,就会调用RequestProcessor实例的process()方法来处理请求。在ActionServlet调用这个方法时,会把当前的request和response对象传给它
然后:RequestProcessor实例的process()方法调用ProcessActionCreate()方法,先判断是否在 Action 缓存中存在Action实例,如果不存在,就创建一个Action实例,把它保存在 Action 缓存中
最后:RequestProcessor实例的process()方法调用Action实例的execute()方法 并返回相应的试图界面
2、简单了解struts1的处理流程之后那么我们就来了解一下struts1配置文件中action的常用属性
首先列举action的属性代码如下:
[align=left] <action path="URL" [/align]
[align=left] type="ActionClass" [/align]
[align=left] name="userForm" [/align]
[align=left] scope="request" [/align]
[align=left] attribute="key" [/align]
[align=left] input="/register.jsp"[/align]
[align=left] forward="/index.jsp" [/align]
[align=left] include="/index.jsp" [/align]
[align=left] unknown="true" [/align]
[align=left] parameter="test" [/align]
[align=left] className="mappingclass"[/align]
[align=left] validate="true">[/align]
[align=left] <forward name="" path=""></forward>[/align]
</action>
下面就对其属性解析
l a、path :代表请求的Action的名称,无需指明后缀struts1自动处理
例如上一节中的/Register 就是从视图中提交的Action请求 此请求有的方式是:
<form action="${pageContext.request.contextPath}/Register.do" method="post">....</form>
当其点击此提交时后缀名称为.do,(由于我们在会web.xml配置*.do的处理),所以经过mapping的地址映射,交给ActionServlet按照struts1的处理流程处理提交Action的请求。
l b、type:代表请求的的Action交给那个Action处理,注意此类的名称一定是类的全名称(包括包名)
l c、name:代表的是请求参数封装的ActionForm的名称。
备注:此名称与<form-beans><form-bean name="名称Form" type="Form类的全名"></form-bean></form-beans>中"名称Form"一致,并通过此form-bean中的type来指定封装的ActionForm类。
l d、scope:代表把formbean的参数封装到那个作用域中,默认的作用域为session
备注:当我们没有指定formbean的作用域时,在type指定的Action类中还可以通过以下代码获取:
[align=left] /** 获取ActionForm中的对象并强制造型为UserForm 此获取方式为通过传递的ActionForm参数直接获取,开发中就是用此方式 */[/align]
[align=left] // UserForm userForm = (UserForm) form;[/align]
[align=left] /**[/align]
[align=left] * 由于在Action的属性配置中的scope属性指定了userForm的作用域, 当采用的是默认值(session)时,[/align]
[align=left] * 也可以直接从作用域中获取代码如下:[/align]
[align=left] */[/align]
[align=left] UserForm userForm = (UserForm) request.getSession().getAttribute("userForm");[/align]
[align=left] [/align]
[align=left] System.out[/align]
[align=left] .println("用户名称:" + userForm.getUsername() + " 用户密码:"[/align]
[align=left] + userForm.getUserpass() + " 用户邮箱:"[/align]
[align=left] + userForm.getUseremail());[/align]
/**备注:
由于在开发的过程中为了节省ActionForm占用的内存空间,我们一般不采用默认值,而是采用scope=”request”配置,因此我们也可以采用一下的方式获取*/
UserForm userForm = (UserForm) request.getAttribute("userForm");
[align=left] 注意:由于在aciton的配置中我们没有配置attribute="key" 此属性时,在Action中获取的关键字采用默认的值及name的名称,当配置了attribute="key"此属性是必须通过"key"获取.如果你不明白看下面的介绍。[/align]
[align=left] [/align]
l E、attribute 指定formbean存储的key,不设默认为name属性的值。
[align=left] 举例:如果我们在action的配置中配置了attribute=”uform”的话,那么我们在Action中获取的方式就应该为:[/align]
[align=left] /** 通过方法参数中传递的ActionForm获取ActionForm中的对象[/align]
[align=left]并强制造型为UserForm */[/align]
[align=left]UserForm userForm = (UserForm) form;[/align]
[align=left]/**由于在action的配置中我们指明了attribute的属性及属性值,因此我们应该采用以下方式获取*/[/align]
[align=left] UserForm userForm = (UserForm) request.getAttribute("uform");[/align]
[align=left] System.out[/align]
[align=left] .println("用户名称:" + userForm.getUsername() + " 用户密码:"[/align]
[align=left] + userForm.getUserpass() + " 用户邮箱:"[/align]
[align=left] + userForm.getUseremail());[/align]
备注:在指明了attribute属性后,我们如果还采用d中介绍方式即直接从作用域通过name的属性值获取的话,会出现javax.servlet.ServletException: java.lang.NullPointerException异常信息.
l F、input="/register.jsp" 指定formbean的数据是由哪个页面提供的。
说明:提供此属性的目的在于formbean校验失败时,程序方便跳回formbean的输入页面,通过struts1错误信息标签,显示校验失败信息。
l G、forward="/index.jsp" 指定收到请求时,跳转到相应的jsp页面
强调:如果配置了此属性,则action将不再被调用,即接受到此action时,直接调至到index.jsp页面。
l H、include="/index.jsp" 指定收到请求时,进行页面包含
l I、unknown="true" 如果action把该属性设置为true,则它可以处理客户机发出的所有无效的.do请求,默认值为false
举例:如果在配置文件中添加如下的action配置,
<action path="/**" forward="/index.jsp" unknown="true"/>
当如果在地址栏中发出请求为: http://localhost:8080/20110105struts1_2/regi.do 如果在此配置文件中找不到regi.do的Action就会处理上面配置的action直接跳转到index.jsp页面 (备注:与此action中path名称无关,但必须配置一个path属性).
l J、parameter="test"配置action参数,调用actioMapping.getParameter方法可以获得这里配置的参数(后续会详细介绍)
l K、className="mappingclass" <action>标签和所有的配置信息使用哪个对象封装,默认值为ActionMapping对象。这是struts1的作者考虑,开发者使用自己开发的Mapping类提供的配置.
l L、validate="true" 请求参数封装到formbean中后,是否让struts自动调用formbean的validate方法进行数据校验。默认true(后续会详细介绍)
除此之外还用一些属性配置,我只做了常用属性的介绍.
[align=left]3、forward标签[/align]
[align=left]在action配置中,还有一些其他的标签配置,在上面种我们看到了<forward name="" path=""></forward>即在处理完此action之后我们可以在Action中的execute方法中通过此标签的name属性获取此action,并跳转到相应的path地址中去.[/align]
[align=left]举例:如果在action内部我们配置了forward标签的代码如下:[/align]
[align=left]<forward name="message" path="/message.jsp"></forward>[/align]
[align=left] 那么我们可以再Action返回值中做如下处理:[/align]
[align=left]/** 获取跳转的地址并返回ActionForward */[/align]
[align=left] return mapping.findForward("message");[/align]
[align=left]通过以上配置,在处理完此action后,struts1经过处理后就会跳转到/message.jsp视图层.[/align]
[align=left] [/align]
通过上面的介绍我们简单了解了struts1的处理流程、action配置、forward标签及在Action中的处理,希望你能够数量掌握及其应用.
以上内容归redarmy_chen原创,版权归redarmy_chen所有不得随意转载
如有问题请发送邮件到redarmy_chen@qq.com
相关文章推荐
- 第二节struts1的处理流程及配置文件详解
- 第二节:Struts2配置文件详解-Struts.properties
- struts1的处理流程 和配置文件详解
- struts-config.xml配置文件详解
- Struts struts.properties 配置文件详解
- Struts2配置文件详解——struts.xml
- Struts配置文件详解,web.xml以及struts-cofig.xml,以及struts-cofig.xml中各个标签的作用。
- 新手基本struts.xml的配置文件详解
- struts2:struts.xml配置文件详解
- Struts2 学习之路(二):2.3 struts.xml 配置文件中的result 详解
- Struts-config.xml配置文件《action-mappings》元素的详解
- Struts配置文件详解
- struts2 struts.xml配置文件详解
- struts2.0中struts.xml配置文件详解
- struts2.0 配置文件、常量配置详解
- struts2.0中struts.xml配置文件详解
- [整理]struts2.0中struts.xml配置文件详解
- struts2.0中struts.xml配置文件详解
- Struts 2.0 的Struts.xml配置文件详解
- struts.xml配置文件标签详解