一个简单的struts的例子

简介:

index.jsp

 

 
  1. 代码  
  2.  
  3. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> 
  4. <%  
  5. String path = request.getContextPath();  
  6. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  7. %> 
  8.  
  9. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
  10. <html> 
  11.   <head> 
  12.     <base href="<%=basePath%>"> 
  13.       
  14.     <title>测试ActionForm</title> 
  15.     <meta http-equiv="pragma" content="no-cache"> 
  16.     <meta http-equiv="cache-control" content="no-cache"> 
  17.     <meta http-equiv="expires" content="0">      
  18.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
  19.     <meta http-equiv="description" content="This is my page"> 
  20.     <!--  
  21.     <link rel="stylesheet" type="text/css" href="styles.css">  
  22.     --> 
  23.   </head> 
  24.     
  25.   <body> 
  26.       <h1>测试ActionForm</h1> 
  27.       <hr> 
  28.       <li>测试动态ActionForm</li><br> 
  29.       <form action="dyanactionform.do" method="post"> 
  30.           姓名:<input type="text" name="username"><br> 
  31.            年龄:<input type="text" name="age"><br> 
  32.            <input type="submit" value="提交">      
  33.       </form>    
  34.       <p> 
  35.       <li>测试struts上传文件</li><br> 
  36.       <form action="upload.do" method="post" enctype="multipart/form-data"> 
  37.           标题:<input type="text" name="title"><br> 
  38.           文件:<input type="file" name="myfile"><br> 
  39.           <input type="submit" value="提交"> 
  40.       </form> 
  41.       <p> 
  42.       <li>空字段测试</li><br> 
  43.       <form action="blankfield.do" method="post"> 
  44.           姓名:<input type="text" name="username"><br> 
  45.           <input type="submit" value="提交"> 
  46.       </form> 
  47.        <p> 
  48.        <li>测试ActionForm类型转换器</li><br> 
  49.        <form action="typeconvert.do" method="post"> 
  50.            intValue:<input type="text" name="intValue"><br> 
  51.            doubleValue:<input type="text" name="doubleValue"><br> 
  52.            booleanValue:<input type="text" name="booleanValue"><br> 
  53.            java.sql.Date:<input type="text" name="sqlDate"><br> 
  54.            java.util.Date:<input type="text" name="utilDate"><br> 
  55.            <input type="submit" value="提交"> 
  56.        </form> 
  57.   </body> 
  58. </html> 

配置文件

struts-config.xml

 

 
  1. 代码  
  2.  
  3. <?xml version="1.0" encoding="ISO-8859-1" ?> 
  4.  
  5. <!DOCTYPE struts-config PUBLIC  
  6.           "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"  
  7.           "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> 
  8.  
  9. <struts-config> 
  10.     <form-beans> 
  11.         <form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm"> 
  12.             <form-property name="username" type="java.lang.String"/> 
  13.             <form-property name="age" type="java.lang.Integer"/> 
  14.         </form-bean> 
  15.           
  16.         <form-bean name="uploadForm" type="com.bjsxt.struts.UploadActionForm"/> 
  17.           
  18.         <form-bean name="blankFieldForm" type="com.bjsxt.struts.BlankFieldActionForm"/> 
  19.           
  20.         <form-bean name="typeconvertForm" type="com.bjsxt.struts.TypeConvertActionForm"/> 
  21.     </form-beans> 
  22.       
  23.     <action-mappings> 
  24.         <action path="/dyanactionform" 
  25.                 type="com.bjsxt.struts.DynaActionFormTestAction" 
  26.                 name="dynaForm" 
  27.                 scope="request" 
  28.         > 
  29.             <forward name="success" path="/dyna_actionform.jsp"/> 
  30.         </action> 
  31.           
  32.         <action path="/upload" 
  33.                 type="com.bjsxt.struts.UploadTestAction" 
  34.                 name="uploadForm" 
  35.                 scope="request" 
  36.         > 
  37.             <forward name="success" path="/upload_success.jsp"/> 
  38.         </action> 
  39.           
  40.         <action path="/blankfield" 
  41.                 type="com.bjsxt.struts.BlankFieldTestAction" 
  42.                 name="blankFieldForm" 
  43.                 scope="request"          
  44.         > 
  45.             <forward name="success" path="/blankfield_success.jsp"/> 
  46.         </action> 
  47.           
  48.         <action path="/typeconvert" 
  49.                 type="com.bjsxt.struts.TypeConvertTestAction" 
  50.                 name="typeconvertForm" 
  51.                 scope="request" 
  52.         > 
  53.             <forward name="success" path="/typeconvert_success.jsp"/>      
  54.         </action> 
  55.     </action-mappings> 
  56.       
  57.     <controller maxFileSize="10M"/> 
  58.       
  59.     <plug-in className="com.bjsxt.struts.UtilDateConverterInitWithPlugin"/> 
  60. </struts-config> 

1、AtionForm

 

 
  1. 代码  
  2.  
  3. package com.bjsxt.struts;  
  4.  
  5. import org.apache.struts.action.ActionForm;  
  6.  
  7. /**  
  8.  * 测试空字段  
  9.  * @author Administrator  
  10.  *  
  11.  */  
  12. public class BlankFieldActionForm extends ActionForm {  
  13.  
  14.     private String username;  
  15.       
  16.     private String password;  
  17.  
  18.     public String getUsername() {  
  19.         return username;  
  20.     }  
  21.  
  22.     public void setUsername(String username) {  
  23.         this.username = username;  
  24.     }  
  25.  
  26.     public String getPassword() {  
  27.         return password;  
  28.     }  
  29.  
  30.     public void setPassword(String password) {  
  31.         this.password = password;  
  32.     }  

 

 
  1. 代码  
  2.  
  3. package com.bjsxt.struts;  
  4.  
  5. import javax.servlet.http.HttpServletRequest;  
  6. import javax.servlet.http.HttpServletResponse;  
  7.  
  8. import org.apache.struts.action.Action;  
  9. import org.apache.struts.action.ActionForm;  
  10. import org.apache.struts.action.ActionForward;  
  11. import org.apache.struts.action.ActionMapping;  
  12.  
  13. /**  
  14.  * 测试空字段  
  15.  * @author Administrator  
  16.  *  
  17.  */  
  18. public class BlankFieldTestAction extends Action {  
  19.  
  20.     @Override  
  21.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  22.             HttpServletRequest request, HttpServletResponse response)  
  23.             throws Exception {  
  24.         return mapping.findForward("success");  
  25.     }  
  26.  

 

 
  1. 代码  
  2.  
  3. <%@ page language="java" contentType="text/html; charset=GB18030" 
  4.     pageEncoding="GB18030"%> 
  5. <%@ page import="com.bjsxt.struts.*" %>      
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
  7. <html> 
  8. <head> 
  9. <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
  10. <title>Insert title here</title> 
  11. </head> 
  12. <body> 
  13.     <%  
  14.         BlankFieldActionForm form = (BlankFieldActionForm)request.getAttribute("blankFieldForm");  
  15.      %> 
  16.     <li>jsp脚本</li><br> 
  17.     姓名:<%=form.getUsername() %><br> 
  18.     密码:<%=form.getPassword() %><br> 
  19.     <p> 
  20.     <li>el表达式</li><br> 
  21.     姓名:${blankFieldForm.username }<br> 
  22.     密码:${blankFieldForm.password }<br> 
  23. </body> 
  24. </html> 

业务逻辑类

DynaActionFormTestAction.java

 

 
  1. 代码  
  2.  
  3. package com.bjsxt.struts;  
  4.  
  5. import javax.servlet.http.HttpServletRequest;  
  6. import javax.servlet.http.HttpServletResponse;  
  7.  
  8. import org.apache.struts.action.Action;  
  9. import org.apache.struts.action.ActionForm;  
  10. import org.apache.struts.action.ActionForward;  
  11. import org.apache.struts.action.ActionMapping;  
  12. import org.apache.struts.action.DynaActionForm;  
  13.  
  14. /**  
  15.  * 测试动态ActionForm  
  16.  * @author Administrator  
  17.  *  
  18.  */ 
  19. public class DynaActionFormTestAction extends Action {  
  20.  
  21.     @Override 
  22.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  23.             HttpServletRequest request, HttpServletResponse response)  
  24.             throws Exception {  
  25.         DynaActionForm daf = (DynaActionForm)form;  
  26.         String username = (String)daf.get("username");  
  27.         Integer age = (Integer)daf.get("age");  
  28.         System.out.println("username=" + username);  
  29.         System.out.println("age=" + age);  
  30.         return mapping.findForward("success");  
  31.     }  
  32.  

成功的返回页面

dyna_actionform.jsp

 

 
  1. 代码  
  2.  
  3. <%@ page language="java" contentType="text/html; charset=GB18030" 
  4.     pageEncoding="GB18030"%> 
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
  6. <html> 
  7. <head> 
  8. <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
  9. <title>Insert title here</title> 
  10. </head> 
  11. <body> 
  12.     用户名称:${dynaForm.map.username }<br> 
  13.     年龄:${dynaForm.map.age }<br> 
  14. </body> 
  15. </html> 

2、struts上传文件

 

 
  1. 代码  
  2.  
  3. package com.bjsxt.struts;  
  4.  
  5. import org.apache.struts.action.ActionForm;  
  6. import org.apache.struts.upload.FormFile;  
  7.  
  8. /**  
  9.  * 上传ActionForm  
  10.  * @author Administrator  
  11.  *  
  12.  */  
  13. public class UploadActionForm extends ActionForm {  
  14.  
  15.     private String title;  
  16.       
  17.     //必须采用FormFile  
  18.     private FormFile myfile;  
  19.  
  20.     public String getTitle() {  
  21.         return title;  
  22.     }  
  23.  
  24.     public void setTitle(String title) {  
  25.         this.title = title;  
  26.     }  
  27.  
  28.     public FormFile getMyfile() {  
  29.         return myfile;  
  30.     }  
  31.  
  32.     public void setMyfile(FormFile myfile) {  
  33.         this.myfile = myfile;  
  34.     }  

 

 
  1. 代码  
  2.  
  3. package com.bjsxt.struts;  
  4.  
  5. import java.io.FileOutputStream;  
  6.  
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9.  
  10. import org.apache.struts.action.Action;  
  11. import org.apache.struts.action.ActionForm;  
  12. import org.apache.struts.action.ActionForward;  
  13. import org.apache.struts.action.ActionMapping;  
  14. import org.apache.struts.upload.FormFile;  
  15.  
  16. /**  
  17.  * 上传Action  
  18.  * @author Administrator  
  19.  *  
  20.  */  
  21. public class UploadTestAction extends Action {  
  22.  
  23.     @Override  
  24.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  25.             HttpServletRequest request, HttpServletResponse response)  
  26.             throws Exception {  
  27.         UploadActionForm uaf = (UploadActionForm)form;  
  28.         System.out.println("title" + uaf.getTitle());  
  29.         FormFile myFile = uaf.getMyfile();  
  30.         if (myFile != null) {  
  31.             System.out.println("fileName=" + myFile.getFileName());  
  32.               
  33.             FileOutputStream fos = new FileOutputStream("c:\\" + myFile.getFileName());  
  34.             fos.write(myFile.getFileData());  
  35.             fos.flush();  
  36.             fos.close();  
  37.         }  
  38.         return mapping.findForward("success");  
  39.     }  
  40.  

成功返回页面

upload_success.jsp

 

 
  1. 代码  
  2.  
  3. <%@ page language="java" contentType="text/html; charset=GB18030" 
  4.     pageEncoding="GB18030"%> 
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
  6. <html> 
  7. <head> 
  8. <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
  9. <title>Insert title here</title> 
  10. </head> 
  11. <body> 
  12.     标题:${uploadForm.title}<br> 
  13.     文件名:${uploadForm.myfile.fileName  }<br> 
  14. </body> 
  15. </html> 

3、类型转换

 

 
  1. 代码  
  2.  
  3. package com.bjsxt.struts;  
  4.  
  5. import java.text.ParseException;  
  6. import java.text.SimpleDateFormat;  
  7. import java.util.Date;  
  8.  
  9. import org.apache.commons.beanutils.Converter;  
  10.  
  11. /**  
  12.  * java.util.Date类型转换器  
  13.  * @author Administrator  
  14.  *  
  15.  */  
  16. public class UtilDateConverter implements Converter {  
  17.  
  18.     public Object convert(Class type, Object value) {  
  19.         System.out.println("UtilDateConverter.value=" + value);  
  20.         if (value == null) {  
  21.             return value;  
  22.         }  
  23.         if (value instanceof Date) {  
  24.             return value;  
  25.         }  
  26.         Date d = null;  
  27.         if (value instanceof String) {  
  28.             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
  29.             try {  
  30.                 d = sdf.parse((String)value);  
  31.             } catch (ParseException e) {  
  32.                 // TODO Auto-generated catch block  
  33.                 e.printStackTrace();  
  34.             }  
  35.         }  
  36.         return d;  
  37.     }  
  38.  

 

 
  1. 代码  
  2.  
  3. package com.bjsxt.struts;  
  4.  
  5. import java.util.Date;  
  6.  
  7. import javax.servlet.ServletException;  
  8.  
  9. import org.apache.commons.beanutils.ConvertUtils;  
  10. import org.apache.struts.action.ActionServlet;  
  11. import org.apache.struts.action.PlugIn;  
  12. import org.apache.struts.config.ModuleConfig;  
  13.  
  14. public class UtilDateConverterInitWithPlugin implements PlugIn {  
  15.  
  16.     public void destroy() {  
  17.     }  
  18.  
  19.     public void init(ActionServlet servlet, ModuleConfig config)  
  20.             throws ServletException {  
  21.         System.out.println("UtilDateConverterInitWithPlugin.init()");  
  22.         ConvertUtils.register(new UtilDateConverter(), Date.class);  
  23.     }  

 

 
  1. 代码  
  2.  
  3. package com.bjsxt.struts;  
  4.  
  5. import java.util.Date;  
  6.  
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.http.HttpServlet;  
  9.  
  10. import org.apache.commons.beanutils.ConvertUtils;  
  11.  
  12. /**  
  13.  * 注册java.util.date转换器  
  14.  * @author Administrator  
  15.  *  
  16.  */  
  17. public class UtilDateConverterInitWithServlet extends HttpServlet {  
  18.  
  19.     @Override  
  20.     public void init() throws ServletException {  
  21.         System.out.println("UtilDateConverterInitWithServlet.init()");  
  22.         ConvertUtils.register(new UtilDateConverter(), Date.class);  
  23.     }  
  24.  

成功返回页面

typeconvert_success.jsp

 

 
  1. 代码  
  2.  
  3. <%@ page language="java" contentType="text/html; charset=GB18030" 
  4.     pageEncoding="GB18030"%> 
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
  6. <html> 
  7. <head> 
  8. <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
  9. <title>Insert title here</title> 
  10. </head> 
  11. <body> 
  12.     intValue:${typeconvertForm.intValue }<br> 
  13.     doubleValue:${typeconvertForm.doubleValue }<br> 
  14.     booleanValue:${typeconvertForm.booleanValue }<br> 
  15.     java.sql.dateValue:${typeconvertForm.sqlDate }<br> 
  16.     java.util.utilValue:${typeconvertForm.utilDate }<br> 
  17. </body> 
  18. </html> 

讲解

1、动态ActionForm
动态ActionForm是为了避免标准ActionForm膨胀而设计的,使用动态ActionForm可以获得标准
ActionForm的所有功能
* 在struts-config.xml文件中定义动态ActionForm,如:
<form-beans>
<form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="username" type="java.lang.String" />
<form-property name="age" type="java.lang.Integer"/>
</form-bean>
</form-beans>
*在Action中使用动态ActionForm,参见DynaActionFormTestAction.java
DynaActionForm daf = (DynaActionForm)form;
String username = (String)daf.get("username");
Integer age = (Integer)daf.get("age");

动态ActionForm其实是把页面中的html元素的名字和值放到了map中,所以通过get方法可以取出相应的值
动态ActionForm采用EL表达式的输出方式,${dynabean.map.prop}, 参见:dyna_actionform.jsp
动态Action的验证,通常使用动态验证框架validator

2、采用struts上传文件
* 页面的配置,如:
<form action="upload.do" method="post" enctype="multipart/form-data">
标题:<input type="text" name="title"><br>
文件:<input type="file" name="myfile"><br>
<input type="submit" value="提交">
</form>
* ActionForm中使用FormFile来接收上传的文件,参见:UploadActionForm.java
* 在Action中调用FormFile取得上传文件数据,采用流输出,即完成上传,参见:UploadTestAction.java
* 采用<controller/>标签配置上传参数,如:<controller maxFileSize="10M"/>

3、空字段测试
* 在表单中没有input输入域,jsp脚本接收到的值为null,el表达式接收到的值为空串
* 如果表单中的值,没有输入,那么jsp脚本和el表达式接收到的值都为空串

4、测试ActionForm类型的自动转换
* boolean:yes,1,on,true都会转换成True类型,而且忽略大小写,其他情况转换成false
* Date类型的转换:
* 如果是java.sql.Date,页面日期的格式必须为yyyy-mm-dd,才可以转换
* 如果是java.util.Date,默认情况下struts无法转换

* 自定义转换器的实现步骤
* 实现converter接口,实现convert方法
* 将实现的conerter注册,通常情况采用servlet注册
* 采用servlet注册需要注意标签的配置,<load-on-startup>10</load-on-startup>(也可以采用struts plugin注册)

Struts对ActionForm的自动搜集过程:
* 将页面数据放到map中,其中map中的key为页面中的名称,map中的value为页面中的value值
* 调用BeanUtils.setProperties方法,将map中的值逐个设置到ActionForm实例上,对于ActionForm中的每个属性
根据类型调用相应的Converter,然后调用相应的convert方法,将相应的字符串转换成ActionForm中指定的类型

可以通过BeanUtils.copyProperties(目标对象,源对象)方法进行对象值的复制。



本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1080869

相关文章
|
Java
struts2中Action的三种开发编写形式,ActionSupport,POJO
struts2中Action的三种开发编写形式,ActionSupport,POJO
105 0
struts2中Action的三种开发编写形式,ActionSupport,POJO
|
XML Java 数据格式
struts2+spring+mybatis整合小案例
最近学习ssm框架,模仿别人做了一个小案例 当然途中也遇到了蛮多的问题.借此机会.记录一下自己的过程 struts2+spring+mybatis的整合过程 1.说明: 个人采用的是deepin操作系统(深度linux)+Intellij Idea(相对与myeclipse我还是更喜欢idea 可能因为更智能)+tomcat7. 当然在windows下没什么不同,具
4269 0
|
前端开发 Java 应用服务中间件
第一个Struts2应用
第一个Struts2应用
123 0
|
XML 前端开发 Java
Action的三种实现方式,struts.xml配置的详细解释及其简单执行过程(二)
上一章简单介绍了Struts2的’两个蝴蝶飞,你好’ (一),如果没有看过,请观看上一章
379 0
Action的三种实现方式,struts.xml配置的详细解释及其简单执行过程(二)
|
Java JavaScript 前端开发
[Struts]在jsp里处理比较复杂的内容?
今天遇到一个问题,到现在也没能比较圆满的解决,是不是Struts在标签库上还不够完善呢。比如有一个界面是显示课件列表的,在最后一栏里可以对数据进行操作,如下所示: Code Name Author OP 10000001 风洞模型课件 刘金东 View Edit Delete 1000000.
1117 0
|
Java 前端开发 应用服务中间件
|
前端开发 Java 数据安全/隐私保护
|
前端开发
struts2 中的 addActionError 、addFieldError、addActionMessage的方法
addActionError 、addFieldError、addActionMessage都是ActionSupport的方法   一、addActionError("错误内容"):Action级别的错误消息this.
1127 0
|
Java API 前端开发