自定义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的Servletpublic 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
//得到path
String path=request.getServletPath();
//找出Action
Action 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 stub
doGet(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>附上两张结构图显示如图所示结果就成功啦!同理可以继续完善程序,实现减法,乘法和除法,在这里我就不一一写出啦。
1018



被折叠的 条评论
为什么被折叠?



