一个简单的struts的例子-阿里云开发者社区

开发者社区> 科技小能手> 正文

一个简单的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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7830 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9445 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
5478 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
3882 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
1135 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
3278 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
16931 0
14491
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载