mvc模式
目录
- 前言
- mvc的概念
- 传统mvc的使用
- mvc的优化
- 中央控制器
- 子控制器接口
- 子控制器
- jsp的调用
- 结果
- 总结
前言
所以需要去详细的去探究mvc的原理和思路。
mvc的概念
MVC全名是Model View controller,
是模型(model)-视图(view)-控制器(controller) 的缩写,
它是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码
实际图:
结构:
- V (view)
- jsp/iOS/Android(一般由jsp,ios,android文件组成)
- C (controller)
- servlet/action(一般由servlet,action文件组成)
- M (model)
- 实体域模型(名词)
- 过程域模型(动词)
传统mvc的使用
也就是你要实现什么方法的时候就提交到写好了的servlet里面
dao层:也就是数据访问层。
servlet层:也就是逻辑处理层。
jsp文件:也就是ui层
可是那样的话,servlet会越来越多;web.xml配置也越来越多,
这就十分麻烦了,
而且在每一个servlet里面都可能有很多重复的代码块
我们今天就要对其进行一个优化。
mvc的优化
首先,我们的优化思路是这样的。
用一个servlet来代替之前所有的servlet.
思路:
- 中央控制器(DispatcherServlet)
- 用来获取发送请求的路径名,并截取。然后交给其他子控制器。
- 子控制器接口(Action)
- 用来定义方法。
- 子控制器(&&Action):
- 列如:addAction 用来进行逻辑处理。
可以看图:
先是结构:一个web,一个framework就行
中央控制器
public class DispatcherServlet extends HttpServlet{
private Map<String, action> actionMap = new HashMap<>();//用来存储子控制器的位置
public void init() {
actionMap.put("add", new addServlet());//增加的子控制器
actionMap.put("del", new delServlet());
actionMap.put("select", new selectServlet());
actionMap.put("update", new updateServlet());
}
@Override
protected void doGet(HttpServletrequest req, HttpServletresponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
init();//使得map里有值
String requestURI = req.getRequestURI(); //获取请求的路径
System.out.println("截取前:"+requestURI);
String url = requestURI.substring(requestURI.lastindexof("/")+1, requestURI.lastIndexOf("."));//截取
System.out.println("截取后:"+url);
action action = actionMap.get(url); //获取map里面的对应关系
action.execute(req, resp);//调用方法
}
}
如果运行的话就是这样;
子控制器接口
public interface action {
void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
}
子控制器
用两个来进行举例:
public class addServlet implements action{//乘法
@Override
public void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String num1 = req.getparameter("num1");
String num2 = req.getParameter("num2");
req.setAttribute("res", integer.parseInt(num1)*Integer.parseInt(num2));
req.getRequestDispatcher("calres.jsp").forward(req, resp);
}
}
public class delServlet implements action{//除法
@Override
public void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String num1 = req.getParameter("num1");
String num2 = req.getParameter("num2");
req.setAttribute("res", Integer.parseInt(num1)/Integer.parseInt(num2));
req.getRequestDispatcher("calres.jsp").forward(req, resp);
}
}
jsp的调用
<html>
<head>
<meta http-equiv="content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function toSubmit(val){
if(val==1){
actionform.action = "${pagecontext.request.contextpath }/add.action";
}
else if(val==2){
ActionForm.action = "${pageContext.request.contextPath }/del.action";
}
else if(val==3){
ActionForm.action = "${pageContext.request.contextPath }/select.action";
}
else if(val==4){
ActionForm.action = "${pageContext.request.contextPath }/update.action";
}
ActionForm.submit();
}
</script>
</head>
<body>
<form name="ActionForm" id="ActionForm" action="${pageContext.request.contextPath }/add.action" method="post">
num1:<input type="text" name="num1" ><br>
num2:<input type="text" name="num2" ><br>
<input type="button" value="+" >
<input type="button" value="-" >
<input type="button" value="*" >
<input type="button" value="/" >
</form>
</body>
</html>
就这样就可以完成一个简单的优化;
结果
没问题;
总结
思路不怎么难,主要还是理解中央控制器,和子控制器这个概念
Thanks♪(・ω・)ノ希望对大家有所帮助
相关阅读
解决Windows应用程序不能加载C++组件 Side-by-Side错误 起因 前两天写了个小工具,在我的机器跑得好好的,QA的测试机里面却死活跑
本来网络上有很多类似的帖子,但是在我部署成功的过程中,依然摸索了很长时间,所以想写个文章来把我部署的过程记录分享一下,以便以后节
工厂模式用工厂方法代替了new操作, 将选择实现类, 创建对象统一管理和控制.从而将调用者(Client)与实现类进行解耦.实现了创建者
SSM框架SpringMVC@Scheduled注解简单实现定时任务
第一步: 在Springmvc的xml中加入如下:xmlns:task="http://www.springframework.org/schema/task"http://www.springfr
云计算的服务模式仍在不断进化,但业界普遍接受将云计算按照服务的提供方式划分为三个大类:SaaS(Software as a Service–软件即服务)