`
jiagou
  • 浏览: 2525127 次
文章分类
社区版块
存档分类
最新评论

通过Struts实现计算器来学习ActionFrom和Action.

 
阅读更多

在上一篇文章中已经对Struts的整体流程有一个基本了解,接下来的小例子是通过实现一个简易计算器来进一步了解Struts.


简单需求如下:

能够输入两个值,运算符.

计算成功后将成功的信息显示在页面上

Action 完成计算

ActionFrom 传数据

三个页面

重新配环境

1 拷贝lib下所有的jar

2 配置ActionServletweb.xml

3 配置Struts核心配置文件struts-config.xml

建立三个页面显示.

input.jsp

<%@ page language="java"contentType="text/html; charset=GB18030"
         pageEncoding="GB18030"%>
 <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type"content="text/html; charset=GB18030">
 <title>简易计算器</title>
 </head>
 <body>
     <form action="cal.action"method="post">
         <input type="text"name="value1"/>
         <select name="flag">
             <optionvalue="+">+</option>
             <optionvalue="-">-</option>
             <optionvalue="*">*</option>
             <optionvalue="/">/</option>
         
         </select>
         <input type = "text" name="value2"/>
         <input type ="submit"value="计算"/>
     </form>
     
     
 </body>
 </html>
  


success.jsp

<%@ page language="java" contentType="text/html;charset=GB18030"
         pageEncoding="GB18030"%>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html;charset=GB18030">
 <title>计算结果</title>
 </head>
 <body>
     ${calForm.value1 }
     ${calForm.flag }
     ${calForm.value2 }
     =
     ${result };
 </body>
 </html>


error.jsp

<%@ page language="java" contentType="text/html;charset=GB18030"
         pageEncoding="GB18030"%>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html;charset=GB18030">
 <title>Insert title here</title>
 </head>
 <body>
     ${calForm.value1 }
     ${calForm.flag }
     ${calForm.value2 }
     失败
  
 </body>
 </html>


分析Action

CalActionFrom(提供相关的属性和方法),继承StrutsActionForm

警告出现的ID表示序列号的错误.(一个容器里不会出现这个问题,但是分布式,或者夸JVM则会出现这中问题.)生成的Set后面的值要和表单里面的值一致

package com.bjpowernod.struts;
  
 import org.apache.struts.action.ActionForm;
 /**
 * 获取页面相关数据.
 * @author jnqqls
 * @group TGB
 * @version 1.0
 * @comments
 */
 @SuppressWarnings("serial")
 public class CalActionForm extendsActionForm {
     private int value1;
     privateString flag;
     private int value2;
     
     public int getValue1() {
         return value1;
     }
     public void setValue1(int value1) {
         this.value1 = value1;
     }
     publicString getFlag() {
         return flag;
     }
     public void setFlag(String flag) {
         this.flag = flag;
     }
     public int getValue2() {
         return value2;
     }
     public void setValue2(int value2) {
         this.value2 = value2;
     }
     
 }


CalAction 继承Action

重写Execute方法

获取相关的数值.

进行分发处理;

进行异常处理

成功时候转到一个页面(forward对象);失败时候转到一个失败页面.

将计算的结果设置到request.

package com.bjpowernod.struts;
  
 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;
  
 /**
 * 对请求进行分发.
 * @author jnqqls
 * @group TGB
 * @version 1.0
 * @comments
 */
 public class CalAction extends Action {
  
     @Override
     public ActionForward execute(ActionMapping mapping, ActionForm form,
             HttpServletRequest request, HttpServletResponse response)
             throws Exception {
         //获得ActionFrom相关信息
         CalActionForm calForm=(CalActionForm)form;
         int value1=calForm.getValue1();
         int value2 =calForm.getValue2();
         String flag =calForm.getFlag();
         
         //存储计算结果
         int result=0;
         try{
             if(flag.equals("+")){
                 result=value1+value2;
             }else if("-".equals(flag)){
                 result=value1-value2;
             }else if("*".equals(flag)){
                 result=value1*value2;
             }else if("/".equals(flag)){
                 result=value1/value2;
             }
             
             request.setAttribute("result", result);
             return mapping.findForward("success");
         }catch(Exception e){
             e.printStackTrace();
             return mapping.findForward("error");
             
         }
         
         
     }
  
 }


获取相关数据结果在页面中

成功:

success.jsp

失败

error.jsp

配置流程

配置ActionForm <form-beans>

配置Action <action-mapping>

<?xml version="1.0" encoding="iso-8859-1"?>
 <!DOCTYPE struts-config PUBLIC
                     "-//Apache Software Foundation//DTD StrutsConfiguration 1.2//EN"
                     "http://struts.apache.org/dtds/struts-config_1_2.dtd">
  
 <struts-config>
     
     <form-beans>
         <form-bean name="calForm" type="com.bjpowernod.struts.CalActionForm"/>
     </form-beans>
     
     <action-mappings>
             <action path="/cal"
                     type="com.bjpowernod.struts.CalAction"
                     name="calForm"        
                     scope="request"
                     >
                 <forward name="success" path="/success.jsp"/>
                 <forward name="error" path="/error.jsp"></forward>
             </action>
         </action-mappings>
 </struts-config>

小结:通过以上的例子我们来对两个重要的对象进行总结:ActionFromAction.

ActionForm用于封装用户的请求参数,而请求参数是通过JSP页面的表单域传递过来的。因此应保证ActionForm的参数,与表单域的名字相同。 可以简单的理解为ActionForm是将页面的信息进行包装然后进行传递.所有的ActionForm都被配置在struts-config.xml文件中,该文件包括了一个form-beans的元素,该元素内定义了所有ActionForm,每个ActionForm对应一个form- bean元素。可以参考上面配置流程中的相关代码.

Actionstruts中的一个抽象类,它其实是Struts的核心部分,上面说到的ActionForm进过处理获取的请求和数据,都会到达Action中得到分发。

Action可以进行一些表单数据的检查,这里面的检查一般和页面的检查是不一样的,页面的检查都是客户端的一些数据格式规范的检查,这里的检查而与业务相关的检查一般放到这里面检查,比如与JavaBean相关的一些操作。它会直接调用业务逻辑层的javabean去处理数据库的操作,比如增删改查等。 根据处理的结果决定程序的去向,并以ActionForward对象的形式传递给ActionServlet,这样ActionServlet通过配置文件,决定返回的数据到达那个页面。 Action是一个抽象类,必须实现以后才能执行,执行的方法是execute方法。本文中CalAction类便是实现Action类的一个具体类,来进行相关的计算,并将计算结果进行转发.


分享到:
评论

相关推荐

    struts1.2actionfrom验证

    struts验证,Actionfrom的表单验证

    Struts框架的学习

    6、 Action副控制器获得请求信息再调用符合要求Biz去实现功能 7、 在此前Biz将Entity实体对象传入Dao 8、 Biz在通过业务需要调用Dao对数据进行相应的操作 9、 Dao再连接数据库对数据库进行操作 10、 Dao将信息通过...

    struts 1.2 ActionFrom表单验证

    NULL 博文链接:https://kingpingping.iteye.com/blog/1625466

    Struts,Hibernate,Spring集成开发宝典_strust代码.rar

    Struts,Hibernate,Spring集成开发宝典_strust代码.rar 包含:action,actionfrom,basic

    j2ee 架构设计 (SSH典型结构解析)

    具体讲解每个层次的实现技巧 第二部分:介绍组织层次关联利器(Spring) 快速入门 Factory模式 IOC模式 AOP模式 演练Spring的威力 第三部分:介绍日志管理利器(Log4j) 快速入门 演练Log4j的优越性 第四部分:介绍...

    J2EE架构设计PPT

    具体讲解每个层次的实现技巧 第二部分:介绍组织层次关联利器(Spring) 快速入门 Factory模式 IOC模式 AOP模式 演练Spring的威力 第三部分:介绍日志管理利器(Log4j) 快速入门 演练Log4j的优越性 第四部分:介绍...

    strurts1完整资料

    strurts1完整资料 解析ActionServlet ActionFrom Action 国际化 taglib标签 MVC等功能

    validator相关

    将需要验证的逻辑写入该函数,即在提交表单时会对其进行验证,这中方法的缺点在于必须通过程序代码来实现验证逻辑,如果验证逻辑发生改变,则必重新编写和编译程序代码,此外如果程序中多个ActionFrom Bean共用相同...

    ActionForm属性中存在对象数组如何处理

    ActionForm属性中存在对象数组如何处理

Global site tag (gtag.js) - Google Analytics