一. 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: 网页编程