struts2学习
来源:互联网 发布:Windows资源无响应 编辑:程序博客网 时间:2024/04/29 14:30
在传统的jsp+servlet+jdbc的java web开发模式中,往往将所有的逻辑控制代码放到servlet中实现。这就导致了servlet中的代码十分复杂,且在实际项目开发中会存在很多问题。struts2就是针对其中的一些问题而出现的。这些问题可以分为三类,称为硬代码、机械代码以及测试问题。下面将针对给出的代码进行分析。
import java.io.IOException;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;/** */public class NumberGuessServlet extends HttpServlet {public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String act = request.getParameter("act");String result = null;if("guess".equals(act)){result = guess(request, response);}else{result = newGame(request, response);}String forwardTo = "";if("success".equals(result)){forwardTo = "/javaweb/numguess2/success.jsp";}else{forwardTo = "/javaweb/numguess2/guess.jsp";}request.getRequestDispatcher(forwardTo).forward(request, response);}private String newGame(HttpServletRequest request, HttpServletResponse response){Random r = new Random();Integer i = r.nextInt(100)+1;request.getSession().setAttribute("number",i);request.getSession().setAttribute("guessTimes",0);Integer newGameCnt = (Integer)request.getSession().getServletContext().getAttribute("newGameCnt");if(newGameCnt == null)newGameCnt=0;request.getSession().getServletContext().setAttribute("newGameCnt",++newGameCnt);return "newGame";}private String guess(HttpServletRequest request, HttpServletResponse response){HttpSession session = request.getSession();int guess = Integer.parseInt(request.getParameter("guess"));Integer number = (Integer)session.getAttribute("number");int guessTimes = (Integer)session.getAttribute("guessTimes");session.setAttribute("guessTimes",++guessTimes);if(guess == number){request.setAttribute("msg","对了.");return "success";}else if(guess > number){request.setAttribute("msg","偏大了.");}else{request.setAttribute("msg","偏小了.");}return "failure";}}这个java培训上老师分析的例子,主要实现猜数字的功能。
(1)硬代码
所谓硬代码就是一些写死在servlet中的配置信息,比如forwardTo = "/javaweb/numguess2/success.jsp";。如果要修改这些配置信息,我们就不得不修改servlet的源代码,十分的不方便。而struts2给出的解决方法就是将这些信息放在struts.xml配置文件中,根据返回值来控制所要跳转的页面。
(2)机械代码
机械代码就是指一些重复操作,比如String act = request.getParameter("act");。基本上servlet都会对request传过来的参数进行复制操作,我们当然希望这类机械性的代码能够自动完成。这就是struts2的一个重要功能,对request、session等对象中的参数赋到方法中的变量里。
(3)测试问题
由于servlet中用到的变量的值都是从tomcat的session、request中得到的,如果要对代码逻辑进行测试,我们必须启动server从前台页面输入参数,比较麻烦。由于struts2完成了将tomcat的session、request中的参数赋到servlet的变量中的工作,导致servlet的代码中并没有用到从session、request中取参数的方法,我们可以方便的直接写个主函数,然后自主给方法赋参数。
运用struts2后的代码如下
import java.util.Random;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;/** * POJO * plain old java object * */public class NumGuessAction {int guess;String msg;public String execute(){return newGame();}public String newGame(){Random r = new Random();Integer i = r.nextInt(100)+1;HttpSession session = ServletActionContext.getRequest().getSession();session.setAttribute("number",i);session.setAttribute("guessTimes",0);Integer newGameCnt = (Integer)session.getServletContext().getAttribute("newGameCnt");if(newGameCnt == null)newGameCnt=0;session.getServletContext().setAttribute("newGameCnt",++newGameCnt);return "newGame";}public String guess(){HttpSession session = ServletActionContext.getRequest().getSession();Integer number = (Integer)session.getAttribute("number");int guessTimes = (Integer)session.getAttribute("guessTimes");session.setAttribute("guessTimes",++guessTimes);if(guess == number){msg = "对了.";return "success";}else if(guess > number){msg = "偏大了.";}else{msg = "偏小了.";}return "failure";}public String testResult(){msg = "aaaaaaabbbbbbcccccc";return "abc";}public int getGuess() {return guess;}public void setGuess(int guess) {this.guess = guess;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}}
<action name="numGuess" class="com.yuqiaotech.helloj2ee.webapp.NumGuessAction"><result name="success">/num_guess/success.jsp</result><result name="failure">/num_guess/guess.jsp</result><result name="newGame">/num_guess/guess.jsp</result><result name="abc" type="simpleResult"/></action>
- [Struts2]Struts2学习总结
- Struts2 学习
- Struts2学习
- 学习struts2
- 学习struts2
- 学习struts2
- 学习Struts2
- Struts2学习
- struts2学习
- 学习struts2
- struts2学习
- struts2学习
- struts2学习
- struts2学习
- struts2学习
- Struts2学习
- struts2学习
- struts2学习
- 改变Windows 7系统预览窗口的大小
- 查看下拉框的默认实际值转化成显示值的请求
- 数组的排序 用指针作形参
- 在VMware中安装ubuntu遇到每次开机都需要重新联网的问题
- untill和till的区别
- struts2学习
- windows7家庭普通版升级旗舰版的方法
- 打开系统设置
- Cracking the coding interview--Q9.4
- LRU Cache的一种实现
- android附近的人的实现
- 第十六周 刷OJ题-输出四个数字字符
- 杀毒软件哪个好?2011年12月(第六次)VB100认证结果出炉
- 电视信号——行场同步