刚入门学习Struts,使用那本Struts Web设计与开发大全,第2章有个小例子,作者是用JBuilder写的,不习惯用,因为一直用MyEclipse,然后和大家分享一下,我已经做出来的结果,但仍然有些little problem..希望能够交流下。。。 

      这是我这个猜数字的struts入门程序的主要代码和框架:

再分别贴出来相应的代码:

guess.jsp的代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
      <title>猜数字页面</title>
  </head>
  
  <body>
       <h1><bean:message key="page"/></h1>
       <!-- 第一个表单 -->
       <form action="<%=request.getContextPath() %>/createNumberAction.do" method="post">
          <h3><bean:message key="page.choose"/></h3>
          <!-- 选择猜数字的范围 -->
          <select name="digits">
             <option value="10" >10</option>
             <option value="100">100</option>
             <option value="200">200</option>
          </select>
          <input type="submit" value="开始一次新的猜数"/>
       </form>
       <hr/>
       <!-- 第二个表单 -->
       <form action="<%=request.getContextPath() %>/judgeAction.do" method="post">
         <input type="text" name="guess_number"/>
         <input type="submit" value="猜猜看"/>
       </form>
       <hr/>
       <!-- 页面显示判断结果的部分 -->
       <%
         String message=null;
         message=(String)session.getAttribute("message");
         if(message!=null)
             {
             if(message.equals("equal"))
             {
        %>
            <h1><bean:message key="result.equal"/></h1>
        <%
          }
          else if(message.equals("bigger"))
          {
         %>
         <h1><bean:message key="result.big"/></h1>
         <%
           }
           else
           {
          %>
          <h1><bean:message key="result.small"/></h1>
          <%
             }
           }
           %>
    
  </body>
</html>

 

           然后是两个ActionForm:

          首先是选择一个数字的范围的的ActionForm,代码如下:

          CreateNumberActionForm:

       

package com.scut.struts;

import org.apache.struts.action.ActionForm;

public class CreateNumberActionForm extends ActionForm {
    
    private String digits;

    public String getDigits() {
        return digits;
    }

    public void setDigits(String digits) {
        this.digits = digits;
    }
    

}

 

    再就是判断是否猜对代码的ActionForm,代码如下:

     judgeActionForm:

package com.scut.struts;

import org.apache.struts.action.ActionForm;

public class judgeActionForm extends ActionForm {
    
     private String guess_number;

    public String getGuess_number() {
        return guess_number;
    }

    public void setGuess_number(String guessNumber) {
        guess_number = guessNumber;
    }
     
}

 

 

      然后是两个Action的代码:

   选择数字的范转的Action,代码如下:

createNumberAction:

package com.scut.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

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 createNumberAction extends Action {

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        
        CreateNumberActionForm cform=(CreateNumberActionForm)form;
        
        HttpSession session=request.getSession();
        session.removeAttribute("message");
        int digits=Integer.parseInt(cform.getDigits());
        int secret_number=(int)(Math.random()*digits);
        //把随机生成的数放进用户的session中
        session.setAttribute("secret_number", String.valueOf(secret_number));
        
        return mapping.findForward("guess");
    }
    
    

}

  猜数字的那个Action,代码如下:

judgeAction:

package com.scut.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

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 judgeAction extends Action {

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        judgeActionForm jForm=(judgeActionForm)form;
        HttpSession session=request.getSession();
        
        int guess_number=Integer.parseInt(jForm.getGuess_number());
        int secret_number=Integer.parseInt((String)session.getAttribute("secret_number"));
        if(guess_number==secret_number)
        {
            session.setAttribute("message", "equal");
        }
        else if(guess_number>secret_number)
        {
            session.setAttribute("message", "bigger");
        }
        else
        {
            session.setAttribute("message", "smaller");
        }
        
        return mapping.findForward("guess");
    }
    

}

配置的web.xml还有struts-config.xml

struts-config.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

  <form-beans>
    <form-bean name="createNumberActionForm" type="com.scut.struts.CreateNumberActionForm"></form-bean>
    <form-bean name="judgeActionForm" type="com.scut.struts.judgeActionForm"></form-bean>
  </form-beans>
  
  <action-mappings>
    <action path="/createNumberAction" scope="session" type="com.scut.struts.createNumberAction" name="createNumberActionForm">
      <forward name="guess" path="/guess.jsp"></forward>
    </action>
    <action path="/judgeAction" scope="session" type="com.scut.struts.judgeAction" name="judgeActionForm">
      <forward name="guess" path="/guess.jsp"></forward>
    </action>
  </action-mappings>
  
  <message-resources parameter="com.scut.struts.ApplicationResources" />
  
</struts-config>

最后运行结果的界面如下:

    此程序有兴趣的可以完全复制过去运行,有点问题的地方是,当我点击开始一次新的猜数时,就算在option中选择的是100,最后刷新后仍然没有被选择。。。

    知道需要使用js控制option,但暂时没弄出来,望如果有想法的,可以跟贴交流。。。

    而且书中的例子使用的是struts的html,我不太习惯,或者说觉得很烦杂,因此没有用到,暂时就写这么多,如果还有什么问题,再继续补充吧。

posted on 2012-06-04 14:52  543fly  阅读(211)  评论(0编辑  收藏  举报