JSP—MVC模式

目录

前言

7.1MVC介绍

7.2JSP中的MVC模式

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

7.3.1  request bean

7.3.2  session bean

7.3.3  application bean

7.4MVC模式的简单实例


前言

        MVC(Model-View-Controller)是一种软件设计模式,用于将应用程序分解为三个主要组成部分:模型、视图和控制器。它的目的是将应用程序的内部逻辑与用户界面分离,从而提高代码的可维护性和可扩展性。

7.1MVC介绍

模型-视图-控制器(Model-View-Controller),简称为MVC。MVC已经成为软件设计者必须熟练使用的开发模式。理解、掌握在JSP程序设计中怎样具体体现MVC开发模式(其他语言的程序设计是非常类似的,仅仅是具体使用的API不同而已)。

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

■模型(model) 用于存储数据的对象。

■视图(view) 向控制器提交所需数据、显示模型中的数据。

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

7.2JSP中的MVC模式

■模型(Model) 一个或多个Javabean对象,用于存储数据。

■视图(View) 一个或多个JSP页面,其作用是向控制器提交必要的数据和显示数据。JSP页面可以使用HTML标记、Javabean标记以及Java程序片或Java表达式来显示数据。视图的主要工作就是显示数据,对数据的逻辑操作由控制器负责。

■控制器(Controller) 一个或多个servlet对象,根据视图提交的要求进行数据处理操作,并将有关的结果存储到Javabean中,然后servlet使用转发或重定向的方式请求视图中的某个JSP页面显示数据。比如让某个JSP页面通过使用Javabean标记、Java程序片或Java表达式显示控制器存储在Javabean中的数据。

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

7.3.1  request bean

■bean的创建

servlet创建request bean的步骤如下:

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

     BeanClass bean=new BeanClass();

(2)    

      request.setAttribute("keyWord",bean);

■视图更新

servlet所请求的JSP页面可以使用相应的标记显示该request bean中的数据。该JSP页面对请求做出响应之后,request bean所占有的内存被释放,结束自己的生命。

RequestDispatcher dispatcher= request.getRequestDispatcher("show.jsp"); dispatcher.forward(request,response);

servlet所请求的JSP页面,比如show.jsp页面可以使用如下标记获得servlet所创建的request bean:

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

该标记中的id是servlet所创建的bean的id。 然后JSP页面可以使用相应的标记或程序片显示该request bean中的数据。

7.3.2  session bean

■bean的创建

servlet创建session bean的步骤如下:

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

BeanClass bean=new BeanClass(); (

2)

HttpSession session=request.getSession(true); session.setAttribute("keyWord",bean);

■视图更新

Web服务目录的各个JSP都可以使用

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

标记获得servlet所创建的session bean,然后使用相应的标记或程序片显示该request bean中的数据。

如果servlet希望某个JSP显示其中的数据,可以使用RequestDispatcher对象转发到该页面,也可以使用HttpServletResponse类中的重定向方法(sendRedirect)定向到该页面。

7.3.3  application bean

■bean的创建

ervlet创建application bean的步骤如下:

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

BeanClass bean=new BeanClass();

(2)

getServletContext().setAttribute("keyWord",bean);

■视图更新

servlet建bean的第(2)步骤决定了bean为application bean。 用户在访问Web服务目录的各个JSP中都可以使用

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

标记获得servlet所创建的application bean,然后使用相应的标记或程序片显示该application bean中的数据,例如,使用

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

标记显示该application bean中的数据。 如果servlet希望某个JSP显示其中的数据,可以使用RequestDispatcher对象向该JSP页面发出请求,也可以使用HttpServletResponse类中的重定向方法(sendRedirect)。

7.4MVC模式的简单实例

设计一个Web应用

(一个request bean, 一个JSP页面example7_1.jsp, 一个servlet。)

Example7_1_Bean.java

package save.data;
public class Example7_1_Bean { 
   double numberOne,numberTwo,result;
   String operator="+";
   public void setNumberOne(double n){
      numberOne=n;
   }
   public double getNumberOne(){
      return numberOne; 
   }
   public void setNumberTwo(double n){
      numberTwo=n;
   }
   public double getNumberTwo(){
      return numberTwo; 
   }
   public void setOperator(String s){
      operator=s.trim();;
   }
   public String getOperator(){
      return operator;
   }
   public void setResult(double r){
      result=r; 
   }
   public double getResult(){
      return result; 
   }
}

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>
    <!--  以下是web.xml文件新添加的内容 -->
    <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>
    <servlet>
        <servlet-name>handleExpress</servlet-name>
        <servlet-class>handle.data.ExpressWish_Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>handleExpress</servlet-name>
        <url-pattern>/handleExpress</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>shopping</servlet-name>
        <servlet-class>handle.data.Example7_2_Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>shopping</servlet-name>
        <url-pattern>/shopping</url-pattern>
    </servlet-mapping>
</web-app>

结果:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值