系列文章目录
目录
前言
模型-视图-控制器,简称为MVC。MVC已经成为软件设计者必须熟练使用的开发模式。
一、MVC模式介绍
MVC模式一种通过三部分构造一个软件或组件的理想办法。 ①模型:用于存储数据的对象。 ②视图:向控制器提交所需数据、显示模型中的数据。 ③控制器:负责具体的业务逻辑操作,即控制器根据视图提出的要求对数据做出处理,将有关结果存储到模型中,并负责让模型和视图进行必要的交互,当模型中的数据变化时,让视图更新显示。
二、JSP中的MVC模式
在JSP中,MVC模式的具体实现如下: ①模型:一个或多个JavaBean对象,用于存储数据就。JavaBean主要提供简单的setXxx方法和getXxx方法,在这些方法中不涉及对数据的具体处理细节,以便增强模型的通用性。 ②视图:一个或多个JSP页面,其作用是向控制器提交必要的数据和显示数据。JSP页面可以使用HTML标记、JavaBean标记以及Java程序片或Java表达式来显示数据。视图的主要工作就是显示数据,对数据的逻辑操作由控制器负责。 ③控制器:一个或多个servlet对象,根据视图提交的要求进行数据处理操作,并将有关的结果存储到JavaBean中,然后servlet使用转发或重定向的方式请求视图中的某个JSP页面显示数据。
三、模型的生命周期与视图更新
在MVC模式中,由控制器servlet创建bean,并将有关数据存储到所要创建的bean中,然后servlet请求某个JSP页面使用getProperty动作标记
1.request bean
①bean的创建 用BeanClass类的某个构造方法创建bean对象。 BeanClass bean = new BeanClass(); 将所创建的bean对象存放到HttpServletRequest对象request中,并指定查找该bean的id。该步骤决定了bean为request bean。 request.setAttribute("keyWord",bean); 执行上述操作,就会把bean存放到Tomcat服务器管理的内置对象pageContext中,该bean被指定的id是keyWord,生命周期是PageContext.PEQUEST_SCOPR(request).
②视图的更新 在MVC模式中,由servlet负责根据模型中的数据变化通知JSP页面更新,其手段是使用转发,即使用RequestDispatcher对象向某个JSP页面发出请求,让所请求的JSP页面显示bean中的数据。代码如下: RequestDispatcher dispatcher = request.getRequestDispatcher("JSP页面"); dispatcher.forward(request,response); <jsp:useBean id="keyWord" class="包下的类" scope="request"/> <jsp:getProperty name="keyWord" property="bean的变量"/>
2.session bean
①bean的创建 用BeanClass类的某个构造方法创建bean对象。 BeanClass bean = new BeanClass(); 将所创建的bean对象存放到HttpServletRequest对象seesion中,并指定查找该bean的id。该步骤决定了bean为session bean。 session.setAttribute("keyWord",bean); 执行上述操作,就会把bean存放到Tomcat服务器管理的内置对象pageContext中,该bean被指定的id是keyWord,生命周期是PageContext.SESSION_SCOPR(session).
②视图的更新 在MVC模式中,由servlet负责根据模型中的数据变化通知JSP页面更新,其手段是使用转发,即使用RequestDispatcher对象向某个JSP页面发出请求,让所请求的JSP页面显示bean中的数据。代码如下: <jsp:useBean id="keyWord" class="包下的类" scope="session"/> <jsp:getProperty name="keyWord" property="bean的变量"/>
需要注意的是,不同用户的session bean是互不相同的,即占有不同的内存空间。
3.application bean
①bean的创建 用BeanClass类的某个构造方法创建bean对象。 BeanClass bean = new BeanClass(); 将所创建的bean对象存放到HttpServletRequest对象applictaion中,并指定查找该bean的id。该步骤决定了bean为application bean。 application.setAttribute("keyWord",bean); 执行上述操作,就会把bean存放到Tomcat服务器管理的内置对象pageContext中,该bean被指定的id是keyWord,生命周期是PageContext.APPLICATION_SCOPR(application).
②视图的更新 在MVC模式中,由servlet负责根据模型中的数据变化通知JSP页面更新,其手段是使用转发,即使用RequestDispatcher对象向某个JSP页面发出请求,让所请求的JSP页面显示bean中的数据。代码如下: <jsp:useBean id="keyWord" class="包下的类" scope="application"/> <jsp:getProperty name="keyWord" property="bean的变量"/>
需要注意的是,所有用户在同一个Web服务目录中的application bean是相同的,即占有相同的内存空间。
四、MVC模式简单实例
<%@ page contentType="text/html" %> <%@ page pageEncoding="utf-8" %> <jsp:useBean id="digitBean" class="ch4_Person.Bean" scope="request"></jsp:useBean> <style> #textStyle { font-family: 宋体; font-size: 36px; color: blue }</style> <HTML><body bgcolor="#ffccff"> <form action="computer" id="textStyle" method="post"> <table> <tr><td>输入两个数:</td> <td><input type="text" name="numberOne" value=<%=digitBean.getNumberOne()%> size=6/></td> <td><input type="text" name="numberTwo" value=<%=digitBean.getNumberTwo()%> size=6/></td> </tr> <tr><td>选择运算符号:</td> <td><select name="operator"> <option value="+">+(加)</option> <option value="-">+(减)</option> <option value="*">+(乘)</option> <option value="/">+(除)</option> </select></td> <td><input type="submit" value="提交" name="sub"/></td> </tr> </table> <p> 运算结果: <jsp:getProperty name="digitBean" property="numberOne"/> <jsp:getProperty name="digitBean" property="operator"/> <jsp:getProperty name="digitBean" property="numberTwo"/> = <jsp:getProperty name="digitBean" property="result"/> </p> </form> </body> </HTML>package ch4_Person; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class Example extends HttpServlet { @Override public void init() throws ServletException { super.init(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Bean bean = null; bean = new Bean(); req.setAttribute("digitBean",bean); String str1 = req.getParameter("numberOne"); String str2 = req.getParameter("numberTwo"); if(str1 == null || str2 == null){ return; } if(str1.length() == 0 || str2.length() == 0){ return; } double numberOne = Double.parseDouble(str1); double numberTwo = Double.parseDouble(str2); String operator = req.getParameter("operator"); double result = 0; if(operator.equals("+")){ result = numberOne + numberTwo; } else if(operator.equals("-")){ result = numberOne - numberTwo; } else if(operator.equals("*")){ result = numberOne * numberTwo; } else if(operator.equals("/")){ result = numberOne / numberTwo; } bean.setNumberOne(numberOne); bean.setNumberTwo(numberTwo); bean.setOperator(operator); bean.setResult(result); RequestDispatcher dispatcher = req.getRequestDispatcher("test1.jsp"); dispatcher.forward(req,resp); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } }<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>computer</servlet-name> <servlet-class>ch4_Person.Example</servlet-class> </servlet> <servlet-mapping> <servlet-name>computer</servlet-name> <url-pattern>/computer</url-pattern> </servlet-mapping> </web-app>
总结
以上就是今天要讲的内容,本文仅仅简单介绍了MVC模式的使用,要想更加深入的学习MVC模式可以参考其他人的博客。