刚入门学习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,我不太习惯,或者说觉得很烦杂,因此没有用到,暂时就写这么多,如果还有什么问题,再继续补充吧。