Struts程序各文件之间的关系
下面介绍《如何实现最简单的Struts程序》例子中各文件之间的关系及源代码分析。
[相关链接]
《JavaWebStudio系列开发工具Visaul Struts版本简介》http://dev.csdn.net/develop/article/28/28871.shtm
《如何实现最简单的Struts程序》http://dev.csdn.net/develop/article/28/28946.shtm
《Struts下拉框的实现》http://dev.csdn.net/develop/article/28/28956.shtm
《Sruts单选框的实现》http://dev.csdn.net/develop/article/29/29042.shtm
《Struts复选框的实现》http://dev.csdn.net/develop/article/29/29043.shtm
开发环境:Java Web Studio系列开发环境visual strutst版本。
最新JavaWebStudio下载地址:ftp://210.36.64.79/kui
(上接Struts程序各文件之间的关系(1))
4 Action文件
Hello程序的Action文件实现对输入文件提交的表单的处理,文件名是helloAction.java,文件代码如下:
(省略)
public final class HelloWordAction extends Action
{
// 变量定义:
private Log log = LogFactory.getLog("org.apache.struts.webapp.Example");
//函数定义:
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception
{
// Extract attributes and parameters we will need
Locale locale = getLocale(request);
MessageResources messages = getResources(request);
HttpSession session = request.getSession();
HelloWordForm myform = (HelloWordForm) form;
String variable1= myform.getMybeanvariable1();
try
{
if(variable1.trim().equals(""))
{
return new ActionForward(mapping.getInput());
}
//其它代码
return (mapping.findForward("success"));
}
catch (Exception e)
{
//log.error("出错", e);
//log.trace("出错");
throw new RuntimeException(e.getMessage());
}
}
}
首先定义处理函数execute(),可以理解为当Hello输入文件表单提交到服务器的ActionServlet,由ActionServlet调用Action的execute()函数实现商业逻辑处理,处理完成后把结果转发到输出文件中。execute()函数定义一个helloForm实例“myform”,并从提交的输入ActionForm对象实例form中读取数据,把mybeanvariable1变量的值赋给新的字符串变量variable1:
helloForm myform = (helloForm) form;
String variable1= myform.getMybeanvariable1();
接下来是出错处理,try语句用于组合一个引起异常的代码块,它使我们告诉Java要注意有可能出现异常的代码段;catch:一旦掷出一个异常,需要捕获住这个异常,catch语句使程序员定义一个捕获;finally:在try/catch块结尾,程序可能需要确保一个代码块不管是否掷出了异常,总是被执行,例如不管发生什么,我们可能都需要确保关闭特定的文件; Exceptlon:一种用于存放在代码中发现的关于一个"exception"或"error"的信息的类;throws:当某些事需要关注时,我们"掷出"一个异常。这个异常被我们创建的一段处理异常的特殊代码"抓住"。涣句话说,通过掷出一个异常,我们告诉代码:出错啦,需要调用一些特殊的逻辑去处理问题。下面完它的完整结束:
try
{
//正常代码
}
catch (Exception e)
{
//出错处理代码
throw new RuntimeException(e.getMessage());
}
finally
{
//最后都必需进行的处理代码
}
在try块中我们进行的变量variable1是否为空的判断,如果为空就转发到输入页,否则转发到定义为success的输出页:
if(variable1.trim().equals(""))
{
return new ActionForward(mapping.getInput());
}
//其它代码
return (mapping.findForward("success"));
mapping.getInput()函数用于获取输入页的URL值,这个值与配置文件struts-config.xml中<action>项的input属性值相对应。
5 Struts程序应用配置文件struts-config.xml文件:
为了便于说明,在这里我们把web.xml文件称为应用程序的“项目配置文件”,把struts-config.xml、struts-config-registration.xml等其它配置文件称为应用程序的“Struts程序应用配置文件”。
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">
<struts-config>
<form-beans>
<form-bean name="HelloWordForm"
type="emptyprj.HelloWordForm" />
上面定义了一个Bean,名为"HelloWordForm",对应的类是HelloWordForm。它除了用于保存数据之外,还用于在服务器ActionServlet调用HelloWordAction前先实现bean数据的验证。
</form-beans>
<action-mappings>
<action path="/HelloWordAction"
type="emptyprj.HelloWordAction"
name="HelloWordForm"
scope="session"
input="/HelloWord.jsp">
<forward name="success" path="/HelloWordOut.jsp" />
</action>
上面定义了一个action 配置,其中path等于是转发的路径名,用于JSP文件中的表单中的Action属性值;type等于表单处理的类,意思是用户提交表单时,服务器ActionServlet调用HelloWordAction实现表单的处理;name等于Bean名,与JSP文件中的表单中的name属性值对应;session等于提交数据存储范围;input输入页;<forward>定义转发页。
</action-mappings>
</struts-config>