发表新主题 回复该帖子
主题:Struts 基础教程(二)
唧唧
帖子档案  楼主 Struts 基础教程(二)   Post by : 2008-07-23 02:12:25.0
  • 幼儿园
  • 幼儿园
  • UID:3
  • 主题:342
  • 帖子:781
  • 加为好友 加为好友    发送短信 发送短信

表单处理:
获取表单数据:
在struts中,要想得到表单的数据,可以写个javabean,并且这个bean必须继承了ActionForm这个类,然后struts会自动将表单的数据封装到ActionForm的子类中,取得时候直接get就可以了
1.写ActionForm
2.修改Struts_config.xml文件,定义formbean,在action中引入formbean
 
引例:
 
环境配置:
web项目根目录:first_struts
     \first_struts
     \first_struts\JS
     \first_struts\pages login.jsp success.jsp fail.jsp
     \first_struts\pice
     \first_struts\WEB-INF : web.xml struts_config.xml
                    \WEB-INF\classes
                    \WEB-INF\lib
                    \WEB-INF\src
                             \src\yuchen.form1.LoginAction.java
                             \src\yuchen.form1.LoginForm.java
 
程序目标:
测试struts应用,用户进入登陆页面,当提交数据的时候,显示登陆成功页面
得到表单数据,如果用户输入的是root,那么提示不能用这个名字登陆,否则,登陆成功
 
知识点:
1.struts应用中处理表单的方式:
需要将表单数据存放到一个javabean中,这个javabean的模型已经写好了,只要我们继承ActionForm类就
可以了,这个就可以从表单中读取参数了
2.语法
在struts_config.xml中定义formbean,然后在action中写上这个url中表单所对应的formbean
<form-bean
       name="loginform"
       type="yuchen.form1.LoginForm"/>//声明formbean
      
        <action
              name="loginform" //引入formbean
              scope="request"
            path="/login"
              type="yuchen.form1.LoginAction">
              <forward name="success" path="/pages/success.jsp"/>
              <forward name="fail" path="/pages/fail.jsp"/>
         </action>
 
jsp:
引用上面的login.jsp success.jsp
 
fail.jsp:
<h1>can no root login!</h1>
 
struts-config.xml:
<form-bean
            name="loginform"
            type="yuchen.form1.LoginForm"/>
 
        <action
              name="loginform" //引入formbean
              scope="request"
            path="/login"
              type="yuchen.form1.LoginAction">
              <forward name="success" path="/pages/success.jsp"/>
              <forward name="fail" path="/pages/fail.jsp"/>
         </action>
 
java:
引用上面的LoginAction.java
 
LoginForm.java:
package yuchen.form1;
 
import org.apache.struts.action.ActionForm;
 
public class LoginForm extends ActionForm{
     private String user;
     private String pwd;
     public LoginForm(){};
     public String getPwd() {
         return pwd;
     }
     public void setPwd(String pwd) {
         this.pwd = pwd;
     }
     public String getUser() {
         return user;
     }
     public void setUser(String user) {
         this.user = user;
     }
    
}
 
表单验证:
1.ActionForm validate()
2.ActionErrors
3.ActionMessage
4.资源文件
5.引例
 
ActionForm validate():
要想做服务器端的表单验证,可以使用ActionForm的validate方法,在这个方法中定义验证逻辑
这个方法将返回ActionErrors类型的对象
 
ActionErrors:
这个类型的对象里面封装了若干的ActionMessage对象
 
ActionMessage:
这个里面有指向资源文件的key
 
资源文件:
classes\:MessageResources.properties
作用:这个资源文件里面有key指向的一些字符串,我们如果需要在页面上显示一些字符串信息,就可以使用
这个资源文件来实现,好处就是维护方便,可以国际化
在struts-config.xml中可以定义资源文件:
<message-resources>
 
ActionForm里面是ActionMessage,ActionMessage里面是key,key指向一个资源文件
 
 
引例:
 
环境配置:
web项目根目录:first_struts
     \first_struts
     \first_struts\JS
     \first_struts\pages login.jsp success.jsp fail.jsp
     \first_struts\pice
     \first_struts\WEB-INF : web.xml struts_config.xml
                    \WEB-INF\classes MessageResources.properties
                    \WEB-INF\lib
                    \WEB-INF\src
                             \src\yuchen.form2.LoginAction.java
                             \src\yuchen.form2.LoginForm.java
 
程序目标:
测试struts应用,用户进入登陆页面,当提交数据的时候,显示登陆成功页面
得到表单数据,如果用户输入的是root,那么提示不能用这个名字登陆,否则,登陆成功
用户登陆,加入登陆验证,用户名和密码不能为空,如果为空,流转到login.jsp,如果是root显示登陆失败
 
知识点:
1.使用资源文件,并将资源文件中的values显示在jsp页面上,只有在产生错误的情况下才会显示
为资源文件加入新的key-value:修改MessageResources.properties
在struts-config.xml中加入标签
在ActionForm的vildate方法中new ActionErrors和ActionMessage(key)对象
显示资源文件中的values:在jsp页面中导入struts标签<%@taglib prefix="html" uri="/tags/struts-html" %> uri为web.xml中struts-html对应的url值使用<html:errors>当发生错误的时候显示
2.加入表单验证功能
在struts-config.xml中加入<input>如果产生错误,导入指定的url,允许表单验证validate="true"
在ActionForm类中重写validate方法
 
jsp:
login.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib prefix="html" uri="/tags/struts-html" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<html:errors/>
     <form action="/first-struts/login.do" method="post">
         userName: <input type="text" name="user" /><br>
         password: <input type="text" name="pwd" /><br>
         <input type="submit" />
     </form>
</body>
</html>
 
引用上面的fail.jsp and success.jsp
 
修改struts-config.xml:
 
    <action-mappings>
        <action
             input="/pages/login.jsp"
             name="loginForm"
              scope="request"
              validate="true"
              path="/login"
            type="yuchen.form2.LoginAction">
              <forward name="success" path="/pages/success.jsp"/>
              <forward name="fail" path="/pages/fail.jsp"/>
   </action>
 
资源文件:
error.user=User name can not be empty
error.pwd=Password can not be empty
 
引用LoginAction.java
 
修改LoginForm.java:
添加validate方法
     public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
         // TODO Auto-generated method stub
         ActionErrors errors=new ActionErrors();
         ActionMessage am=null;
         if(user==null||user.trim().length()==0){
              am=new ActionMessage("error.user");
              errors.add("user",am);
         }
         if(pwd==null||pwd.trim().length()==0||pwd.trim().length()<3){
              am=new ActionMessage("error.pwd");
              errors.add("pwd",am);
         }
        
         return errors;
     }
 
国际化:
1.什么是国际化?有什么用?
2.开发步骤
3.引例
 
什么是国际化?有什么用?
界面友好化,比如说,中国区域的打开网站,显示中文,美国区打开网站显示的是英文
 
开发步骤:
1.写个文本文件,在里面写key-value
2.使用工具转化,并改副名
3.重启应用程序
 
引例:
引用上面的例子,上面的例子当提示错误信息的时候显示的是英文,我们做国际化,让他可以显示中文
1.写个文本文件,在里面写key-value
tome.txt:
error.user=用户名不能为空
error.pwd=密码不能为空
 
2.使用工具转化,并改副名 jdk1.5 bin中的native2ascii 要转化的文件转到哪个文件
MessageResources_zh.properties:
error.user=\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a
error.pwd=\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a
 
struts exception:
1.什么是struts exception:有什么用?
2.内容
3.引例
 
什么是struts error?有什么用?
struts异常是处理action发生的异常,使用的是资源文件输出异常信息
 
内容:
action两种情况产生的异常:
1.action还没有将数据传递到m层的时候就产生的异常
2.收到m层的结果后产生了异常,例如:数据库连接不正常,返回的结果不对等等
 
处理流程:
1.捕获异常
2.抛出异常,requestproessor接到这个异常
3.转给默认的异常处理器(也可以自己定义一个异常处理的类)
4.将处理的信息显示在一个jsp页面上
 
引例:
程序目标:
当用户输入root的时候,我们在action中抛出一个异常,将异常信息显示出来
程序逻辑:
1.action做校验
2.如果user为root,产生一个异常
3.抛出异常
4.Struts-config.xml中配置异常的声明
5.jsp显示异常信息
 
知识点:
 
login.jsp:
如果发生异常,显示异常信息,这个信息是在资源文件中定义的
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="html" uri="/tags/struts-html" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
     <html:errors />
     <form action="/yuchen-struts/login.do" method="post">
         userName: <input type="text" name="user"/><br>
         password: <input type="password" name="pwd" />
         <input type="submit" />
     </form>
</body>
</html>
 
success.jsp:
<h1>success!</h1>
 
LoginAction.java:
package yuchen.exception;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
 
public class LoginAction extends Action{
 
     @Override
     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest
request, HttpServletResponse response) throws Exception {
         // TODO Auto-generated method stub
         LoginForm lf=(LoginForm)form;
         if("root".equals(lf.getUser())){
              throw new LoginException("erro");
         }
         return mapping.findForward("success");
     }
    
}
 
LoginForm.java:
package yuchen.exception;
 
import javax.servlet.http.HttpServletRequest;
 
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
 
public class LoginForm extends ActionForm{
 
     private String user;
     private String pwd;
    
     public LoginForm() {
        
     }
 
     public String getPwd() {
         return pwd;
     }
 
     public void setPwd(String pwd) {
         this.pwd = pwd;
     }
 
     public String getUser() {
         return user;
     }
 
     public void setUser(String user) {
         this.user = user;
     }
    
}
 
LoginException.java:
package yuchen.exception;
 
public class LoginException extends Exception {
     public LoginException(String message){
         super(message);
     }
}
 
struts-config.xml:
//声明ActionForm
    <form-beans>
     <form-bean
            name="loginForm"
            type="yuchen.exception.LoginForm"/>
 
//声明action and exception
        <action
             name="loginForm"
              scope="request"
              path="/login"
            type="yuchen.exception.LoginAction">
              <exception
            key="error.root"
            type="yuchen.exception.LoginException"
            path="/pages/login.jsp"/>
              <forward name="success" path="/pages/success.jsp"/>
         </action>
 
资源文件:error.root=You can not be a root!
 
动态form:
1.什么是动态form?有什么用?
2.语法
3.引例
 
什么是动态form?有什么用?
懒汉form,不用写ActionForm类了,直接在配置文件中声明,这样的好处在于如果表单的数量变更就不用再修改ActionForm类了,struts会根据配置文件自动生成代码,但是没有表单验证的功能了
 
语法:
修改struts-config.xml:
     <form-bean
            name="dyLoginForm"
            type="org.apache.struts.action.DynaActionForm">
         <form-property name="user" type="java.lang.String" />
         <form-property name="pwd" type="java.lang.String" />
     </form-bean>
DynaActionForm这个类是动态form类,声明表单的属性
在action类这样写:
DynaActionForm df=(DynaActionForm)arg1;
df.get("参数");
 
引例:
程序目标:
判断用户名和密码,如果是yuchen,123显示成功页面,否则显示失败
程序逻辑:
1.login.jsp,success.jsp,fail.jsp
2.LoginAction.java
3.struts-config.xml 写form
 
login.jsp success.jsp fail.jsp略
 
LoginAction.java:
package yuchen.dyloginform;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
 
public class LoginAction extends Action{
 
     @Override
     public ActionForward execute(ActionMapping arg0, ActionForm arg1, HttpServletRequest
arg2, HttpServletResponse arg3) throws Exception {
         // TODO Auto-generated method stub
         DynaActionForm df=(DynaActionForm)arg1;
         String nextUrl;
         if(("yuchen".equals(df.get("user"))&&"123".equals(df.get("pwd")))||
("admin".equals(df.get("user"))&&"admin".equals(df.get("pwd")))){
              nextUrl="success";
         }else{
              nextUrl="fail";
         }
         return arg0.findForward(nextUrl);
     }
    
}
 
配置文件:
     <form-bean
            name="dyLoginForm"
            type="org.apache.struts.action.DynaActionForm">
         <form-property name="user" type="java.lang.String" />
         <form-property name="pwd" type="java.lang.String" />
     </form-bean>
 
    <action-mappings>
         <action
             name="dyLoginForm"
              scope="request"
              path="/login"
            type="yuchen.dyloginform.LoginAction">
              <forward name="success" path="/pages/success.jsp"/>
              <forward name="fail" path="/pages/fail.jsp"/>
   </action>

签名
 ★★★★★★★★
 纵里寻她千百度,蓦然回首,那人却在,灯火阑珊处!
 MyBlog :http://blog.javawind.net
返回页面顶部  


CopyRight © 2008-2009 JavaWind.Net Studio All Rights Reserved
Powered By JWind.BBS Vesion 1.0.0 Beta1 Processed in 20 ms,0 (Queries)  Gzip enabled

WAP - 清除Cookies - 联系我们 - JavaWind.Net Studio - Archiver - TOP Valid XHTML 1.0 Transitional Valid CSS! 粤ICP备07511478号