Struts(二)

表单处理:

获取表单数据:

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():

要想做服务器端的表单验证,可以使用ActionFormvalidate方法,在这个方法中定义验证逻辑

这个方法将返回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.form.LoginAction.java

                             /src/yuchen.form.LoginForm.java

 

程序目标:

测试struts应用,用户进入登陆页面,当提交数据的时候,显示登陆成功页面

得到表单数据,如果用户输入的是root,那么提示不能用这个名字登陆,否则,登陆成功

用户登陆,加入登陆验证,用户名和密码不能为空,如果为空,流转到login.jsp,如果是root显示登陆失败

 

知识点:

1.使用资源文件,并将资源文件中的values显示在jsp页面上,只有在产生错误的情况下才会显示

为资源文件加入新的key-value:修改MessageResources.properties

struts-config.xml中加入标签

ActionFormvildate方法中new ActionErrorsActionMessage(key)对象

显示资源文件中的values:jsp页面中导入struts标签<%@taglib prefix="html" uri="/tags/struts-html" %> uriweb.xmlstruts-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 "-//W 3C //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/u4e 3a /u 7a 7a

error.pwd=/u5bc6/u7801/u4e0d/u80fd/u4e 3a /u 7a 7a

 

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.如果userroot,产生一个异常

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 "-//W 3C //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>

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值