在本文系列的第一部分中,你已经学习了如何配置Struts提供的HTML标签库以及独立使用的标签;在第二部分中你学习了和form相关的标签;在第三部分中,你将学习如何在Login程序中使用HTML标签库。你可以点此下载该程序。如果你阅读过关于Struts的系列文章(包含六个部分),你会发现这个Longin程序是上次我们讨论过的Login程序的增强版。
|
本文将介绍程序中每个类之间的关系以及它们所起的作用。注意,你必须自己将所有的库文件复制到WEB-INF/lib目录下;为了节省下载时间它们没有被包含在ZIP文件中。
视图
MVC范例中有三种作为视图的JSP页面:login.jsp、 mainMenu.jsp和viewSecret.jsp。login.jsp文件中包含一个用于用户登录的form,mainMenu.jsp中显示了两个链接(注销(log out)和查看公司机密),而viewSecret.jsp则用来显示一条机密消息。
这个程序的首页面是一个Login页面,它是一个包含两个输入框(userName和password)的form(见图2)。用户被要求在这两个输入框中输入正确的值。登录成功之后程序会显示mainMenu.jsp页面,它包含两个链接:一个是注销,另一个是查看公司机密账号(见图3)。
如果点击了“注销”链接,程序便会退出并重新显示Login页面。如果点击了“查看机密”链接,则会显示viewSecret.jsp 页面。如果注册失败,那么用户会被重新引导到Login页面以重新登录。
|
当用户注销时,他或她的session对象将失效,同时Longin页面会重新显示。当用户点击链接要查看公司机密时,会弹出viewSecret.jsp页面(见图4)。
|
Login程序有两个位于WEB-INF目录下的配置文件:作为部署描述符的web.xml文件(见 列表1);以及作为Struts配置文件的truts-config.xml文件 (见 列表2)。在 列表1中,你需要特别注意action servlet配置中的<init-param>元素:
<init-param> <param-name>application</param-name> <param-value>com.javapro.struts. ApplicationResources </param-value> </init-param> |
一个<init-param>元素代表一个初始化参数,它会被包含在传送到action servlet中的ServletConfig对象里。带有名为“application”的初始化参数对action servlet来说具有特殊的意义:它定义了一个会被加载到缺省消息资源(message resource)中的属性文件。(我将在“消息资源”部分介绍这个属性文件)。在这个程序中,该属性文件被用于存贮整个程序中的错误消息。
部署描述符中需要注意的第二个地方是的<taglib>元素,它包含<taglib-uri>和<taglib-location>元素。基本上,<taglib>元素是用来告诉servlet容器如何使用一个标签库的,该标签库的TLD文件可以在<taglib-location>元素指定的位置找到。
|
WEB-INF目录中的最后一个文件是struts-html.tld文件,它是HTML标签库中的TLD文件。为了节省时间我将跳过对它的介绍,但你可以在ZIP文件中的WEB-INF目录下找到它。
Form
该form以com.javapro.struts.LoginForm类的形式显示(见列表3)。注意粗体的部分:它通过传入“error.missing.userName”和“error.missing.password”字符串来举例说明ActionError对象,这些字符串在消息资源中起关键字(key)的作用。
Action类
Action类分两种:LoginAction (见列表4)和LogoutAction(见列表5)。另外值得一提的是如何通过消息资源中的一个关键字来构建这个ActionError消息(在列表4中显示为粗体)。
HTML标签库的使用
列表6、列表7和列表8中分别包含了JSP文件。login.jsp页面(见列表6)中显示了如何在HTML库中使用这些标签(粗体部分)。我在本文系列的第一部分中介绍过这些标签,但通过看它如何在真正的程序中运行,你会对它们有更深入的了解。
消息资源
如我在“配置文件”部分简要介绍的那样,在WEB-INF/classes/com/javapro/struts目录下的ApplicationResources.properties 文件中包含配对的key/values,它们会被加载到缺省的消息资源中去。HTML标签库中的<errors>标签会在该消息资源中查找到自定义的错误消息。想知道它是如何出错的,你可以试着用一个错误的用户名或密码来登录,看看显示的错误消息是什么。更改错误消息和编辑属性文件一样容易。看看如下的属性文件:
errors.header= <b>Error(s)!!!</b><ul> errors.footer= </ul><hr> error.missing.userName= <li>A user name was not found.</li> error.missing.password= <li>A password was not found.</li> error.login.failed= <li>Incorrect user name and/or password.</li> |
如果你检查了程序的web.xml文件,你会看到这些对象是如何被加载的。消息资源通过将程序的参数传入ActionServlet来完成加载过程。在ActionServlet进行初始化时,它会将package文件夹中的ApplicationResources.properties属性解析为缺省的消息资源。如果在资源中更改一个消息并重新加载程序,它就会在整个程序中显示。在你的Login程序中,这个属性文件包含一些程序的类中所使用的错误消息。
本文介绍了如何在一个简单的Login程序中使用HTML标签库。它对程序进行了详细描述,包括视图、配置文件、form bean、action类以及用于JSP页面的代码。