Java Web开发——第七章MVC模式

前言

本章为《JSP实用教程》第四版 耿祥义 张跃平主编
软件版本号为:

Tomcat:9.0
Java:jdk13

7.1 MVC模式 介绍

MYVC 是一种通过三部分构造一个软件或组件的理想办法。

模型(model) : 用于存储数据的对象。
视图(Cview): 回控制希提交所需数据、显示模型中的数据。
控制器(controller) : 负责具体的业务逻辑操作,即控制需根据视图提出的要求对数据
做出(商业)处理,将有关结果存储到模型中,并负责让模型和视图进行必要的交互,当
模型中的数据变化时,让视图更新显示。

7.2 JSP 中的 MVC 模式

在这里插入图片描述

7.3 模型的生命周期与钢图更新

使用 MVC 模式和前面学习的JSP十JavaBean 模式有很大的不同。在JSP十JavaBean 模式中,由JSP 页面通过使用useBean 标记 :

< jsp:useBean id= “名字” class = “创建 bean 的类” scope = “生命周期”/>

创建 beaan。而在 MVC 模式中,由控制器 servlet 创建 bean ,并将有关数据存储到所创建的 bean 中 ,然后 servlet 请求某个 JSP 页面使用 getProperty 动作标记 :

< jsp:getProperty name = “名字” property = “bean 的属性”/>

显示 bean 中的数据。

在 MVC 模式中,当用控制吉 servlet 创建 bean 时 ,就可以使用 bean 类的带参数的构造方法。类中的方法的命名继续保留 getXxx 规则,但可以不遵守 setXxx 规则。理由是: 我们不希望JSP 页面修改 JavaBean 中的数据,只需要它显示 bean 中的数据。

注意:在 MVC 模式中,servlet 创建的 bean 也涉及生命周期 生命周期分为 request, bean ,sessionbean 和application bean。

7.3.1 request bean

bean的创建
servlet 创建 request bean 的步骤如下 :
(1) 用 BeanClass 类的某个构造方法创建 bean 对象 ,例如

BeanClass bean = new BeanClass( ) ;

(2) 将所创建的 bean 对象存放到 HttpServletRequest 对象 request 中 ,并指定查找该 bean 的id。该步骤决定了 bean 为 request bean。例如 :

request. setaRAttribute(“keyWord” ,bean) ;

视图更新
在 MVC 模式中,由 servlet(控制希)负责根据模型中数据的变化通知 JSP 页面(视图)更 新,其手段是使用转发,即使用RequestDispatcher 对象回革个 JSP 页面发出请求,让所请求的 JSP 页面显示 bean(模型)中的数据
因为 servlet 创建 bean 的步骤(2)决定了bean 为 request bean,因此,当 servlet 使用RequestDispatcher 对象回某个 JSP 页面发出请求时(进行转发操作) ,该 request bean 只对
servlet 所请求的JSP 页面有效,该JSP 页面对请求作出啊应之后,request bean 所占有的内存被释放 ,结束自己的生命。

7.3.2 Session bean

servlet 由 Tomecat 服务器负责创建, Web 设计者只需为 Tomcat 服务器预备好 Servlet 类,编写好相应的配置文件 web. xml,用户就可以根据 web. xml 部署文件来请Tomcat 服务需创建并运行一个servlet。如果 Tomcat 服务器没有名字为 hello 的 servlet, 就会根据 web. xml 文件中 servlet标记的子标记 servletrclass 指定的Servlet 类创建一个名字为 hello 的 servlet。因此,如果名字是hello 的 servlet 被创建之后,修改 Java 源文件.编译得到新的 Servlet 类,并布望 Tomcat 服务需用新的Servlet 类创建servlet ,那么就要重新局动 Tomcat 服务需。 当用户请求 Tomceat 服务器运行一个 servlet时,必须根据 web. xml 文件中标记 url-pattern 指定的格式输入请求。

bean 的创建
servlet 创建 session bean 的步骤如下 :
(1) 用 BeanClass 类的某个构造方法创建 bean 对象 ,例如 :

BeanClass bean = new BeanClass() ;

(2) 将所创建的bean 对象存放到 HttpServletSession 对象 session 中,并指定查找该
bean 的 id。该步骤决定了 bean 为 session bean。例如

HttpSesslion sesslion = request. getSesslion(true) ;
sesslion.setRAttribute( “keyWord” ,bean) ;

视图更新
servlet 创建 bean 的步骤(2)决定了 bean 为 session bean,只要用户的session 没有消失,
该 session bean 就一直存在。Web 服务目录的各个 JSP 都可以使用

< jsp:useBean id = "keVWord"class = “save. data. BeanClass” scope =“session”/>

标记获得 servlet 所创建的 session bean(id 的值是 servlet 创建 session bean 时,为 bean 指定的关键字) ,然后使用相应的标记或程序片显示该 session bean 中的数据,例如使用

< jsp:getProperty name = “keyWNord” property = “bean 的变量”/>

标记显示该 session bean 中的数据。

7.3.3 application bean

bean 的创建
servlet 创建 application bean 的步骤如下 :
(1) 用 BeanClass 类的某个构造方法创建 bean 对象,例如 :

BeanClass bean = new BeanClass( ) ;

(2) servlet 使用 getServletContext()方法返回服务需的 ServletContext 内置对象的引用,将所创建的 bean 对象存放到服务器这个 ServletContext 内置对象中,并指定查找该 bean的关键字 。该步骤决定了 bean 的生命周期为 application。例如

getServletContext( ) . setAttribute(“keyWord” ,bean) ;

这样就会把 bean 存放到 Tomcat 服务需管理的内置对象 pageContext 中 ,该 bean 被指定的 id 是 keyWord,生命周期是 PageContext. APPLICATION _ SCOPE(Capplication ) 。

视图更新
servlet 创建 bean 的步骤(2)决定了bean 为 application bean。当 servlet 创application bean 后,只要 Tomcat 服务天不关闭 ,该 bean 就一直存在。一个用户在访问 Web 服务目录的各个 JSP 中都可以使用

< jsp:useBean id = "keyWord"class = “save. data. BeanClass” scope =“application”/>

标记获得 servlet 所创建的 application bean(id 的值是 servlet 创建application bean 时为 bean指定的关键字) ,然后使用相应的标记或程序片显示该 application bean 中的数据,例如使用

< jsp:getProperty name = “keyWord” property = “bean 的变量”/>

标记显示该 application bean 中的数据。

7.4 MVC模式的简单实例

example7_1.jsp

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<jsp:useBean id="digitBean" class ="save.data.Example7_1_Bean" scope="request"/>
<style>
   #tom{
      font-family:宋体;font-size:26;color:blue 
   }
</style>
<HTML><body bgcolor=#ffccff>
<form action="computer" id =tom method=post>
<table>
<tr><td id =tom> 输入两个数:</td>
<td id =tom>
<input type=text name="numberOne" 
       value=<%= digitBean.getNumberOne() %> id =tom size=6/></td>
<td><input type=text name="numberTwo" 
       value=<%=digitBean.getNumberTwo()%> id =tom size=6/></td>
</tr>
<tr><td id =tom>选择运算符号:</td>
<td id =tom>
<select id =tom name="operator">
    <option value="+">+()
    <option value="-">-()
    <option value="*">*()
    <option value="/">/()
</select> 
</td>
<td><input type="submit" id =tom value="提交" name="sub"/></td>
</tr>
</table></form> 
<p id=tom>
运算结果:
<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></body></HTML>

Example7_1_Servlet.java

package handle.data;
import save.data.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Example7_1_Servlet extends HttpServlet{
   public void init(ServletConfig config) throws ServletException{
       super.init(config);
   }
   public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
       Example7_1_Bean digitBean = null;
       digitBean = new Example7_1_Bean();  //创建Javabean对象.
       //digitBean 是request bean:
       request.setAttribute("digitBean",digitBean);
       String str1 = request.getParameter("numberOne");
       String str2 = request.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 = request.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;
       digitBean.setNumberOne(numberOne); //将数据存储在digitBean中 
       digitBean.setNumberTwo(numberTwo);  
       digitBean.setOperator(operator);   
       digitBean.setResult(result); 
       //请求example7_1.jsp显示digitBean中的数据:
       RequestDispatcher dispatcher= request.getRequestDispatcher("example7_1.jsp");
       dispatcher.forward(request,response);
   } 
   public  void  doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
       doPost(request,response);
   }
} 

web.xml

<?xml version="1.0" encoding="utf-8"  ?>
<web-app>
    <servlet>
        <servlet-name>computer</servlet-name>
        <servlet-class>handle.data.Example7_1_Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>computer</servlet-name>
        <url-pattern>/computer</url-pattern>
    </servlet-mapping>
</web-app>

结果
在这里插入图片描述

总结

欢迎指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值