一. MVC 模式 创建自定义框架 理解 Struts 运行机制
1.实现自定义框架
- 1.基于 Servlet 技术
- 2.是 MVC 模式的实现
- 3.类似 Struts 框架
2.框架技术 帮我们更快,更好的创建应用程序
- 1.是一个应用程序的半成品
- 2.按一定规则组织的一组组建
- 3.提供可重用的公共结构
3.框架技术的优势
- 1.不用再考虑公共问题
- 2.专心再业务实现上
- 3.结构同一,易于学习维护
- 4.新手也可以写出好程序
4.MVC 模型的含义
- M – Model (模型层) //处理业务逻辑
- V – View (视图层) //展现数据,获得用户输入
- C – Controllor (控制层) //接收用户输入,调用业务代码(M),返回数据到视图(V)
二.自定义框架实例
自定义框架结构图

自定义框架实现加法器流程图

1.创建委托模型的接口
package net.royakon.customframe;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface Action {
public String execute(HttpServletRequest request,HttpServletResponse response);
}
2.FrameConfig.xml 文件格式
<?xml version="1.0" encoding="UTF-8"?>
<frame>
<action>
<path>add</path>
<action-class>demo.AddAction</action-class>
</action>
</frame>
3.创建框架主流程模块
package net.royakon.customframe;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ActionServlet extends HttpServlet {
//定义业务逻辑委托容器
private Map actionMap;
//初始化
public void init() throws ServletException {
//计算xml配置文件路径
String xmlpath=this.getServletConfig().getServletContext().getRealPath("/")
+"WEB-INF" + java.io.File.separator + "FrameConfig.xml";
//读取xml配置,获得路径与action的映射关系
actionMap = new XmlUtil().initActionMap(xmlpath);
}
/**
* 根据path判断由哪个action执行操作。
*/
private Action determinActionByPath(String path) {
String actionName = path.substring(path.lastIndexOf('/') + 1, path.length() - 3);
Action ret = (Action)actionMap.get(actionName);
return ret;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//接收客户请求URL
String path = request.getServletPath();
//判断请求所对应的业务
Action action = (Action)this.determinActionByPath(path);
//调用对应的业务
String outcome=action.execute(request, response);
//跳转
if (null!=outcome){
request.getRequestDispatcher(outcome).forward(request, response);
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
}
4.配置 web.xml
<servlet>
<servlet-name>ActionServlet</servlet-name>
<servlet-class>frame.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ActionServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
5.自定义框架下开发 简单加法器
5.1.设计运算模型
package demo;
public class Calculator {
/**
* 模型层实现计算器运算模型
*/
public double add(double x,double y) {
return x+y;
}
/**
* 模型层实现计算器运算模型
*/
public double sub(double x,double y) {
return x-y;
}
}
5.2.制作请求及结果页面
<!--index.jsp-->
<%@ page language="java" pageEncoding="gb2312"%>
<form name="Calculator" action="AddAction.do" method="post">
第一个数:<input type="text" size="10" name="num1"/><br/>
第二个数:<input type="text" size="10" name="num2"/><br/>
<input type="submit" value="+" />
</form>
<!--result.jsp-->
<%@ page language="java" pageEncoding="gb2312"%>
<h1>${result}</h1>
5.3.设计基于框架的动作请求Action完成功能
package demo;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.net.royakon.customframe.Action;
public class AddAction implements Action {
public String execute(HttpServletRequest request,
HttpServletResponse response) {
// 获得页面输入
double num1 =Double.parseDouble(request.getParameter("num1"));
double num2 =Double.parseDouble(request.getParameter("num2"));
//调用模型
Calculator c=new Calculator();
double s=c.add(num1,num2);
//存储结果
request.setAttribute("result", ""+s);
//返回页面名称
return "/result.jsp";
}
}
5.4.配置FrameConfig.xml文件将Action加入到框架
<?xml version="1.0" encoding="UTF-8">
<frame>
<action>
<path>add</path>
<action-class>demo.AddAction</action-class>
</action>
<action>
<path>sub</path>
<action-class>demo.SubAction</action-class>
</action>
</frame>
Categories: 网页编程