初学Struts的一个问题

lywei123 2004-04-06 10:35:27
请问:
<action path="/logoff"
type="org.apache.struts.webapp.example.LogoffAction">
<forward name="success" path="/index.jsp"/>
</action>
这段话的作用是什么?实例化一个org.apache.struts.webapp.example.LogoffAction?

可LogoffAction.java
public final class LogoffAction extends Action{
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
……
}
请问这是怎么一个过程?execute()的参数谁来添?
...全文
72 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
OnlyLikeJava 2004-04-07
  • 打赏
  • 举报
回复
楼上的说的已经很明白了!~
哎,来晚喽!~
superdcy 2004-04-07
  • 打赏
  • 举报
回复
org.apache.struts.action.Action类在Struts框架中是Controller组件的扩展。它在一个用户操作和一个业务操作之间扮演“Adapter”的角色。Action类把客户请求从商业模型中解耦出来。一般的,Action类可以完成许多功能,例如在调用业务操作之前进行授权、记录日志和会话认证等。

Action类的几个方法中最重要的是execute()方法。该方法定义如下:
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException;
当Controller接收到来自客户端的请求时Controller将调用Action类实例的execute()方法。尽管execute()方法不是抽象方法,但是它的缺省行为仅仅是返回NULL,所以你应该创建自己的Action类并重载execute()方法。
除了execute()方法外,还有以下方法:
可以获得或设置与请求相关联的区域:
public Locale getLocale(HttpServletRequest request)
public void setLocale(HttpServletRequest request,Locale locale)
为应用程序获得消息资源:
public MessageResources getResources()
检查用户是否点击表单上的“取消”键,如果是,将返回true:
public Boolean isCancelled(HttpServletRequest request)
当应用程序发生错误时,Action类能够使用下面方法存储错误信息:
public void saveErrors(HttpServletRequest request,ActionErrors errors)
ActionError实例被用来存储错误信息,这个方法在错误关键字下的请求属性列表中存储ActionError对象。通过使用在struts标记库中定义的自定义标记,JSP页能够显示这些错误信息
lywei123 2004-04-07
  • 打赏
  • 举报
回复
谢谢kui(kui),最后一个问题
为什么会有
execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
这样的函数?
是不是像多线程必须覆写run()一样?
如果是的话,Struts这方面的有哪些文档?或者说我怎么才能知道要覆写哪些函数?
shaopin 2004-04-07
  • 打赏
  • 举报
回复
实际上struts in action这些学习文章都讲得很清楚了
kui 2004-04-07
  • 打赏
  • 举报
回复
我还是跟你说一下logon吧,这是我根据例子的说明翻译和改写的:
当用户提交logon.jsp中的注册表单时,将提交到由表单Action属性指定的"/logon"服务器程序进行处理,即“logon.do”。在web.xml中定义了所有*.do请求映射到Struts的 "action" servlet (ActionServlet的一个实例)。ActionServlet 将引用struts-config.xml中为logon.do定义的映射:
<!-- Process a user logon -->
<action path="/logon"
type="org.apache.struts.webapp.example.LogonAction"
name="logonForm"
scope="session"
input="logon">
<exception
key="expired.password"
type="org.apache.struts.webapp.example.ExpiredPasswordException"
path="/changePassword.jsp"/>
</action>
其中"logonForm"是form bean,对应的类是LogonForm,它的定义如下:
<!-- Logon form bean -->
<form-bean name="logonForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="username" type="java.lang.String"/>
<form-property name="password" type="java.lang.String"/>
</form-bean>

在请求通过LogonAction之前,ActionServlet先查找LogonForm bean,如果找到,ActionServlet将用HTTP请求中相匹配的属性名指定的数据更新LogonForm bean名字相同的属性值。如果没有找到,ActionServlet将新建一个,以便LogonAction能采用已存在的Bean。
当被 ActionServlet 呼叫的时候, LogonAction 取回来自 LogonForm bean 的用户名和密码( 如果是新建,bean 将会返回初设的值)。然后LogonAction通过 DatabaseServlet 检查本次登陆用户是否有与之相匹配的已注册用户。 如果没有相匹配的用户,LogonAction将添加一个由相应关键字指定的信息到出错列表中。在程序结束时,如果出错列表不为空,LogonAction 添加一个用户Bean到session存储范围的上下文,并转发到输入表单中(login.jsp)。
需要注意的是在实际应用中,DatabaseServlet一般在商业逻辑中调用而非在LogonAction中调用。
如果没有任何错误,LogonAction把用户Bean保存于session范围的上下文中
(代替预设的用户bean), 并转发到 " success " action。 具体转发到哪里将由struts-config.xml配置文件中的映射决定。在成功登陆前,LogonAction 也将处理LogonForm bean。稍后如果用户返回index.jsp表单,它将是一个清除后的表单而非旧的已登陆的表单。需注意的是LogonAction如果发现scope属性是"request", 将从request上下文中移除bean from,否则从默认的session的上下文移除。
Struts最好的习惯是在所有相关的属性中使用request范围的单一表单,因为不必跨越requests维持form beans。
在程序执行结束时,不管scope的设置而将移除LogonForm bean,这是为了向后兼容早期的配置。在实际的应用程序中,需根据配置决定,当scope为 "request"时将移除相应的bean。这样,仅仅改变struts-config.xml并重装就可以改变程序的这一行为,即是不移除相应的bean。
lywei123 2004-04-06
  • 打赏
  • 举报
回复
楼上能说的具体点么?或者有什么文档么?
bon_jovi 2004-04-06
  • 打赏
  • 举报
回复
actionservlet用了command模式,具体看看就知道为什么有execute这个函数了。
kewin 2004-04-06
  • 打赏
  • 举报
回复
<action path="/logoff"
type="org.apache.struts.webapp.example.LogoffAction">
<forward name="success" path="/index.jsp"/>
</action>
这段话的作用是什么?实例化一个org.apache.struts.webapp.example.LogoffAction?

///////////////////////////////////////
使actionservlet知道如何处理各种请求。
execute()的参数是struts框架提供给你用的
VVV_lucky 2004-04-06
  • 打赏
  • 举报
回复
这段话的作用是:使actionservlet知道如何处理各种请求。
execute()的参数是struts框架提供给你用的

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧