在本文系列的第一部分中你已经学习了如何配置Struts提供的HTML标签库以及独立使用的标签在第二部分中你学习了和form相关的标签在第三部分中你将学习如何在Login程序中使用HTML标签库你可以点此下载该程序如果你阅读过关于Struts的系列文章(包含六个部分)你会发现这个Longin程序是上次我们讨论过的Login程序的增强版
图 应用程序目录结构这个Login程序是一个简单的Struts程序它将显示如何使用HTML标签库尤其是和form相关的标签和用于错误处理的标签其目录结构如图中所示
本文将介绍程序中每个类之间的关系以及它们所起的作用注意你必须自己将所有的库文件复制到WEBINF/lib目录下为了节省下载时间它们没有被包含在ZIP文件中
视图
MVC范例中有三种作为视图的JSP页面loginjsp mainMenujsp和viewSecretjsploginjsp文件中包含一个用于用户登录的formmainMenujsp中显示了两个链接(注销(log out)和查看公司机密)而viewSecretjsp则用来显示一条机密消息
这个程序的首页面是一个Login页面它是一个包含两个输入框(userName和password)的form(见图)用户被要求在这两个输入框中输入正确的值登录成功之后程序会显示mainMenujsp页面它包含两个链接一个是注销另一个是查看公司机密账号(见图)
如果点击了注销链接程序便会退出并重新显示Login页面如果点击了查看机密链接则会显示viewSecretjsp 页面如果注册失败那么用户会被重新引导到Login页面以重新登录
如果点击了注销链接程序便会退出并重新显示Login页面如果点击了查看机密链接则会显示viewSecretjsp 页面如果注册失败那么用户会被重新引导到Login页面以重新登录
图 Login页面如果用户输入正确的用户名和密码程序会建立一个session对象并会有一个名为loggedIn的属性被添加到这个session对象中去只有当程序能够在用户的session对象中查找到这个loggedIn属性时用户才可以浏览Main Menu页面和Secret页面所有缺少该属性或无效的session对象都会迫使用户登录在这个程序中正确的用户名是john密码是这些值是程序中固定写死的以避免需要连接到数据库里或使用其他存储来完成用户验证
当用户注销时他或她的session对象将失效同时Longin页面会重新显示当用户点击链接要查看公司机密时会弹出viewSecretjsp页面(见图)
图 主页面配置文件
Login程序有两个位于WEBINF目录下的配置文件作为部署描述符的webxml文件(见列表)以及作为Struts配置文件的trutsconfigxml文件 (见列表)在列表中你需要特别注意action servlet配置中的<initparam>元素 <initparam>
<paramname>application</paramname>
<paramvalue>comjavaprostruts
ApplicationResources
</paramvalue>
</initparam>
一个<initparam>元素代表一个初始化参数它会被包含在传送到action servlet中的ServletConfig对象里带有名为application的初始化参数对action servlet来说具有特殊的意义它定义了一个会被加载到缺省消息资源(message resource)中的属性文件(我将在消息资源部分介绍这个属性文件)在这个程序中该属性文件被用于存贮整个程序中的错误消息
部署描述符中需要注意的第二个地方是的<taglib>元素它包含<tagliburi>和<tagliblocation>元素基本上<taglib>元素是用来告诉servlet容器如何使用一个标签库的该标签库的TLD文件可以在<tagliblocation>元素指定的位置找到
educitycn/img_///gif>图 机密页面注意在列表中<formbeans>部分包含一个名为loginForm的form bean我在关于Struts系列文章的第五部分中曾介绍过form bean
WEBINF目录中的最后一个文件是strutshtmltld文件它是HTML标签库中的TLD文件为了节省时间我将跳过对它的介绍但你可以在ZIP文件中的WEBINF目录下找到它
Form
该form以comjavaprostrutsLoginForm类的形式显示(见列表)注意粗体的部分它通过传入errormissinguserName和errormissingpassword字符串来举例说明ActionError对象这些字符串在消息资源中起关键字(key)的作用
Action类
Action类分两种LoginAction (见列表)和LogoutAction(见列表)另外值得一提的是如何通过消息资源中的一个关键字来构建这个ActionError消息(在列表中显示为粗体)
HTML标签库的使用
列表列表和列表中分别包含了JSP文件loginjsp页面(见列表)中显示了如何在HTML库中使用这些标签(粗体部分)我在本文系列的第一部分中介绍过这些标签但通过看它如何在真正的程序中运行你会对它们有更深入的了解
消息资源
如我在配置文件部分简要介绍的那样在WEBINF/classes/com/javapro/struts目录下的ApplicationResourcesproperties 文件中包含配对的key/values它们会被加载到缺省的消息资源中去HTML标签库中的<errors>标签会在该消息资源中查找到自定义的错误消息想知道它是如何出错的你可以试着用一个错误的用户名或密码来登录看看显示的错误消息是什么更改错误消息和编辑属性文件一样容易看看如下的属性文件 errorsheader=
<b>Error(s)!!!</b><ul>
errorsfooter=
</ul><hr>
errormissinguserName=
<li>A user name was not found</li>
errormissingpassword=
<li>A password was not found</li>
errorloginfailed=
<li>Incorrect user name and/or password</li>
如果你检查了程序的webxml文件你会看到这些对象是如何被加载的消息资源通过将程序的参数传入ActionServlet来完成加载过程在ActionServlet进行初始化时它会将package文件夹中的ApplicationResourcesproperties属性解析为缺省的消息资源如果在资源中更改一个消息并重新加载程序它就会在整个程序中显示在你的Login程序中这个属性文件包含一些程序的类中所使用的错误消息
本文介绍了如何在一个简单的Login程序中使用HTML标签库它对程序进行了详细描述包括视图配置文件form beanaction类以及用于JSP页面的代码