使用符合MVC设计模式的自定义框架实现加法计算器

来源:互联网 发布:linux安全策略 编辑:程序博客网 时间:2024/05/22 13:19

自定义MVC框架的核心是控制器的实现:首先我们来定义Action接口,实现Controller类。编译环境为eclipse。

package com.dh.ch01.framework;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public interface Action {String execute(HttpServletRequest request,HttpServletResponse response);}
创建名为Controller的Servlet
public class Controller extends HttpServlet {//声明由控制器Controller维护的Action映射,其中保存所有的Action实例private HashMap actionMap;       /**        * Servlet初始化方法        */    public void init() throws ServletException{    //初始化actionMap    actionMap=new HashMap();    //将AddAction对象放入到acctionMap中    actionMap.put("add", new AddAction());//    actionMap.put("sub", new SubAction());    }    private Action determinActionByPath(String path){    String actionName=path.substring(path.lastIndexOf('/')+1,path.length()-7);    Action ret=(Action)actionMap.get(actionName);    return ret;    }    /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub//得到pathString path=request.getServletPath();//找出ActionAction action=(Action)this.determinActionByPath(path);//执行操作String resultView=action.execute(request, response);//控制页面转向if(null!=resultView){request.getRequestDispatcher(resultView).forward(request, response);}}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}
web.xml的配置

<servlet-name>Controller</servlet-name>    <servlet-class>com.dh.ch01.framework.Controller</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>Controller</servlet-name>    <url-pattern>*.action</url-pattern>  </servlet-mapping>
创建add.jsp页面(用户接收数据)
<title>算数计算器</title></head><body bgcolor="#ffffc0"><h1>算数计算器</h1><form id="calxForm" method="post" action="add.action"><table><tbody><tr><td>第一个数</td><td><input type="text" name="num1"/></td></tr><tr><td>第二个数</td><td><input type="text" name="num2"/></td></tr><tr><td><input type="submit" value="加"/></td></tr></tbody></table></form></body>
创建Calculator,实现算数运算

public class Calculator {public double add(double a,double b){return a+b;}public double subtract(double a,double b){return a-b;}public double multiply(double a,double b){return a*b;}public double divide(double a,double b){return a/b;}}

创建AddAction类,实现Action接口

public class AddAction implements Action {private Calculator biz=new Calculator();public String execute(HttpServletRequest request,HttpServletResponse response){//execute获取add.jsp页面的表单数据double num1=Double.parseDouble(request.getParameter("num1"));double num2=Double.parseDouble(request.getParameter("num2"));//调用业务逻辑方法,获得返回值double result=biz.add(num1, num2);//将结构存放在request中,以便在页面中得到request.setAttribute("result", result);//返回将要转发到页面路径return"add_result.jsp";}}
创建add_result.jsp页面显示计算结果


<body bgcolor="#ffffc0"><table><tbody><tr><td>第一个数</td><td>${param.num1}</td></tr><tr><td>第二个数</td><td>${param.num2}</td></tr><tr><td>结果</td><td>${requestScope.result}</td></tr></tbody></table><button onclick="history.go(-1);">返回</button></body>
附上两张结构图     

显示如图所示结果就成功啦!同理可以继续完善程序,实现减法,乘法和除法,在这里我就不一一写出啦。