作者:baggio785
来源:http://blog.csdn.net/baggio785
原文地址:http://blog.csdn.net/baggio785/archive/2006/03/10/620579.aspx(转载请注明出处)
日期:2006-3-9
关键词:Eclipse,MyEclipse,Struts,Java
创建消息资源文件
视图组件将使用标签来输出文本内容,这些内容来自于Resource Bundle。Resource Bundle对应消息资源文件。
代码清单二(ApplicationResources.properties)
# 这里是注释 logon.username.error = 请输入用户名! logon.userpassword.error = 请输入密码! logon.badusername.error = 用户名不能为admin! logon.baduserpassword.error = 密码不能为123456! logon.success = 欢迎您登录! |
为了实现国际化,消息资源文件中的汉字采用的是UTF-8编码。查看如何实现汉字转化为UTF-8。
创建JSP文件
logon.jsp(所在路径为/form/)接收用户输入的用户名和密码,并显示表单验证失败的错误信息。success.jsp显示登录成功的信息。
JSP文件全部使用客户化标签,无JAVA代码,输入的文本内容完全由标签提供。
代码清单三(logon.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java"%> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
用户名: 密 码:
|
代码清单四(success.jsp)
<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
|
创建ActionForm Bean组件logonFrom
用户提交HTML表单后,Struts框架会自动把表单数据封装到ActionForm Bean(本例是logonForm)中。ActionForm Bean的属性必须与HTML表单的字段一一对应。ActionForm Bean会对表单数据进行验证,并提供将HTML表单的字段值重置为默认值的方法(等同于HTML中Form表单的Reset)。
代码清单五(logonFrom.java)
package com.mystruts.struts.form; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; /** // --------------------------------------------------------- Instance Variables /** userpassword property */ /** username property */ // --------------------------------------------------------- Methods /**
//如果用户名验证失败,将ActionMessage对象保存到ActionErrors对象errors中。logon.username.error对应消息资源文件中的logon.username.error的值。
//返回ActionErrors对象errors,Struts框架会把errors保存在request范围内,并将请求转发到视图组件logon.jsp中,通过 /** // TODO Auto-generated method stub /** /** /** /** } |
创建控制器Action组件logonAction
logonAction对表单数据进行业务逻辑验证。
代码清单六(logonAction.java)
package com.mystruts.struts.action; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.Action; import com.mystruts.struts.SaveLogon; /** // --------------------------------------------------------- Instance Variables // --------------------------------------------------------- Methods /** //获得表单数据中的username //获得表单数据中的userpassword //定义非法用户名 //定义非法密码
if(badusername.equals(username)){ //如果用户名验证失败,将ActionMessage对象保存到ActionMessages对象errors中。logon.badusername.error对应消息资源文件中的logon.badusername.error的值。 //保存ActionMessages对象errors到request范围。 //返回ActionForward对象,Struts框架会把请求转发到视图组件logon.jsp中,通过 if(userpassword.equals(baduserpassword)){
//清除request范围内的ActionForm Bean,因为后面的请求已经不需要了
} |
创建模型组件SaveLogon
本模型提供get/set方法,以及saveToDb方法。在例子中并未实现saveToDb方法。
代码清单七(SaveLogon.java)
package com.mystruts.struts; /** private String username = null; public void setUsername(String username){ public String getUsername(){ public void setUserpassword(String userpassword){ public String getUserpassword(){ public void saveToDb(){ }
|
运行
如果用户名和密码为空,运行结果如图十二、图十三、图十四所示。
(图十二)
如果用户名为admin,运行结果如图十三
(图十三)
如果通过验证,运行结果如图十四
(图十四)
小结
1 为了降低偶合度,应该建立一个存放常量的JAVA文件。例如logonAction.java中的String badusername = "admin",或者request.setAttribute("savelogon",sl)的第一个参数。
2 要实现Struts的国际化,支持多国语言,编码方式一定要为UTF-8。
3 在配置Action时,见图九,如果选取redirect,则在struts-config.xml中的action元素会多一个属性,redirect="true"。运行的结果是success.jsp中无法获得request范围内的savelogon对象。