打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
一个struts工程的创建过程及运行原理 - yan - JavaEye技术网站
一个struts工程的创建过程及运行原理
文章分类:Java编程1 在Myeclipse 中新建一个Web project,如图,点击Finish。
2 右击项目名z-myfirstproject,选择Myeclipse---Add Struts Capabilities
3 在出现的如下界面中,将包名称改为自己的包名称:yan.struts,其他的默认即可,点击确定。
4 完成以上步骤后,会在项目目录中自动添加一些jar包和文件等,如图。
5 点击打开 strust-config.xml,如下,右击空白处,选择 New ---Form Action and JSP,
6 在出现的Add Struts Capabilities界面中,输入user case为login,因为要做一个登录的用例。同时可以在下面的optional Details中的form Properties中点击Add按钮添加属性。
7 这里添加两个Form表单属性,一个是username ,一个password,如下图。
8 如下图,选中Create JSP form选项,Superclass选择 ActionForm。点击Next
9 在出现的界面中的Optional Details中,选择Forwards,点击Add添加一个Forward。
10 点击Add ,在出现的界面中填写Forward,点击Add按钮。然后在Add Struts Capabilities界面中点击finish 按钮。
11 以上操作完成后,会在项目中添加几个文件,如下图。
12 打开WebRoot目录下的form下的login.jsp页面,可以看到系统自动生成了登录页面,代码如下:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
<head>
<title><bean:message key="login.hello"/></title>
</head>
<body>
<html:form action="/login.do">
username : <html:text property="username"/><html:errors property="username"/><br/>
password : <html:password property="password"/><html:errors property="password"/><br/>
<html:submit/><html:cancel/>
</html:form>
</body>
</html>
13 在src目录下的yan.struts.form目录下自动生成LoginForm.java,在该Java类中编写validate()函数,进行表单验证,它完成的功能是:如果表单中输入的username为空或者password为空,则生成表单验证错误。返回错误结果给login页面。代码如下:
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
// TODO Auto-generated method stub
ActionErrors errors=new ActionErrors();
if(username==null||username.length()<1)
{
errors.add("username",new ActionMessage("login.error.username"));
//这里username对应的是login.jsp中<html:errors property="username"/>      }
if(password==null||password.length()<1)
{
errors.add("password",new ActionMessage("login.error.userpassword"));
//这里password对应的是login.jsp中<html:errors property=" password "/>
}
return errors;
}
当用户提交了HTML表单后,struts框架将自动把表单数据组装到ActionForm中,Actionform中的属性和HTML表单中的字段一一对应。ActionForm还提供数据验证方法,以及把属性重新设置为默认值的方法。Struts框架中定义的ActionForm类是抽象的,必须在应用中创建它的子类,来存放具体的HTML表单数据。
ActionForm实质是一种JavaBean,不过它除了具有javabean的常规方法,还有两种特殊方法:validate()用于表单验证;reset()把属性重新设置为默认值。
当用户提交了HTML表单后,struts框架会自动把表单数据组装到ActionForm中,如果在
Struts-config.xml配置文件中mapping配置中有 validate=true这一选项,则接下来struts框架会自动调用ActionForm中vlidate()方法进行表单验证。如果Validate()方法返回的ActionErrors对象为null,或者不包含任何ActionMessage对象,就表示没有错误,数据验证通过。如果ActionErrors中包含ActionMessage对象,就表示发生了错误,Struts框架会把ActionErrors对象保存到request范围内,然后把请求转发到恰当的视图组件,视图组件通过
<html:errors>标签把request范围内的ActionErrors对象中包含的错误消息显示出来,提示用户修改错误。
14 上面的代码中用到了 new ActionMessage("login.error.username"),这里的
login.error.username 需要在ApplicaitonResources.properties中定义。
打开ApplicaitonResources.properties(它在src----yan.struts目录下)
右击 ApplicaitonResources.properties,选择Openwith ------Myeclipse Property Editor,打开编辑器,点击Add 按钮添加
15 打开LoginAction.java,在该类中有一个execute()方法,它完成对表单信息的业务逻辑验证以及对相关处理。编辑该方法如下:
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;
String username1=loginForm.getUsername();
String username=null;
try {
username=new String(username1.getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//以上将form表单中获得用户名转换为UTF-8格式。
String password=loginForm.getPassword();
ActionMessages errors=new ActionMessages();
String badusername="admin";
String badpassword="123456";
if(username.equals(badusername))
{
errors.add("username",new ActionMessage("login.error.badusername",badusername));
//如果用户名验证失败,将ActionMessage对象保存到ActionMessages对象errors中。
//login.error.badusername对应消息资源文件中的login.error.badusername的值。
saveErrors(request,errors);
//保存ActionMessages对象errors到request范围。
return new ActionForward(mapping.getInput());
//返回ActionForward对象,Struts框架会把请求转发到视图组件login.jsp中,通过来显示错误信息。
}
if(password.equals(badpassword))
{
errors.add("password",new ActionMessage("login.error.badpassword",badpassword));
saveErrors(request,errors);
return new ActionForward(mapping.getInput());
}
request.setAttribute("username",username);
request.setAttribute("password",password);
//将username和password的值存入request范围内,可以传递到下一页面。
return mapping.findForward("login-success");//返回下一页面,login-success对应struts-config.xml中<forward>属性
}
}
所有的Action类都是org.apache.struts.action.Action的子类,Action子类应该覆盖父类的execute()方法,当ActionForm被创建,并且表单验证顺利通过后,struts框架就会调用Action类的execute()方法,该方法的包含如下参数:
ActionMapping:包含了这个Action的配置信息,和struts-config.xml文件中的<action>元素对应。
ActionForm:包含了用户的表单数据,当struts框架调用execute()方法时,ActionForm中的数据已经通过了表单验证。
HttpServletRequest:当前的HTTP请求对象。
HttpServletResponse:当前的Http相应对象。
16 在WebRoot下新建success.jsp文件,代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
手把手教你在Eclipse中配置并开发Struts(二)
Struts1.x配置 实现表单验证
用Struts Validator检查你的表单
struts demo Struts1.3
Struts1.x系列教程(2):简单的数据验证
Struts教程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服