MVC模式的核心思想是有效地组合“视图”、“模型”和“控制器”。本章将介绍MVC模式,掌握该模式对于设计合理的Web应用框架有着十分重要的意义。
1. MVC模式介绍
MVC是一种通过3个不同部分构造一个软件或组件的理想办法:
§ 模型(Model)——用于存储数据的对象。
§ 视图(View)——为模型提供数据显示的对象。
§ 控制器(Controller)——负责具体的业务逻辑操作,即控制器根据视图提出的要求对数据做出处理,并将有关结果存储到模型中,同时负责让模型和视图进行必要的交互,当模型中的数据变化时,让视图更新显示。
2. JSP中的MVC模式
模型(Model):一个或多个JavaBean对象,用于存储数据,JavaBean主要提供简单的setXXX()方法和getXXX()方法,在这些方法中不涉及对数据的具体处理细节。
视图(View):一个或多个JSP页面,为模型提供数据显示,JSP页面主要使用 HTML标记和JavaBean标记来显示数据。
控制器(Controller):一个或多个Servlet对象,根据视图提交的要求进行数据处理操作,并将有关的结果存储到JavaBean中,然后Servlet使用重定向方式请求视图中的某个JSP页面更新显示.
3. request周期的JavaBean
(1)用CreateJavaBeanClass类的某个构造方法创建Javabean对象,例如:
CreateJavaBeanClass bean=new CreateJavaBeanClass();
(2)将所创建的JavaBean对象存放到HttpServletRequest对象request中,并指定查找该JavaBean的关键字,例如:
request.setAttribute("keyWord",bean);
4. 视图更新
JSP页面使用如下标记获得Servlet所创建的JavaBean的引用 :
<jsp:useBean id="keyWord" type="flower.grass. CreateJavaBeanClass" scope="request" />
5. session周期的JavaBean
(1)用CreateJavabeanClass类的某个构造方法创建JavaBean对象,例如:
CreateJavaBeanClass bean=new CreateJavaBeanClass();
(2)将所创建的JavaBean对象存放到HttpServletSession对象session中,并指定查找该JavaBean的关键字,例如:
HttpSession session=request.getSession(true);
session.setAttribute("keyWord",bean);
6. application周期的JavaBe
(1)用CreateJavaBeanClass类的某个构造方法创建JavaBean对象,例如:
CreateJavaBeanClass bean=new CreateJavaBeanClass();
(2)Servlet可以使用getServletContext()方法返回服务器创建的ServletContext对象的引用,将所创建的JavaBean对象存放到服务器创建的ServletContext对象中,并指定查找该JavaBean的关键字,例如:
getServletContext().setAttribute("keyWord",bean);
web.xml
<?xml version="1.0" encoding=" ISO-8859-1"?>
<web-app>
<servlet>
<servlet-name>computerSum</servlet-name>
<servlet-class>sun.yourservlet.HandleSum</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>computerSum</servlet-name>
<url-pattern>/lookSum</url-pattern>
</servlet-mapping>
</web-app>
Series.java
package moon.yourbean;
public class Series
{ double firstItem; //数列首项
double var; //公差或公比
int number; //求和项数
double sum; //求和结果
String name=""; //数列类别
public void setFirstItem(double a)
{ firstItem=a;
}
public double getFirstItem()
{ return firstItem;
}
public void setVar(double b)
{ var=b;
}
public double getVar()
{ return var;
}
public void setNumber(int n)
{ number=n;
}
public double getNumber()
{ return number;
}
public void setSum(double s)
{ sum=s;
}
public double getSum()
{ return sum;
}
public void setName(String na)
{ name=na;
}
public String getName()
{ return name;
}
}
inputMess.jsp
<%@ page contentType="text/html;Charset=GB2312" %>
<HTML><BODY ><Font size=2>
<FORM action="lookSum" Method="post" >
等差数列求和:
<BR>输入首项:<Input type=text name="firstItem" size=4>
输入公差:<Input type=text name="var" size=4>
求和项数:<Input type=text name="number" size=4>
<Input type=submit value="提交">
</FORM>
<FORM action="lookSum" Method="get" >
等比数列求和:
<BR>输入首项:<Input type=text name="firstItem" size=4>
输入公比:<Input type=text name="var" size=4>
求和项数:<Input type=text name="number" size=4>
<Input type=submit value="提交">
</FORM>
</Font></BODY></HTML>
showResult.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="moon.yourbean.*"%>
<jsp:useBean id="lie" type="moon.yourbean.Series" scope="request"/>
<HTML><BODY>
<Table border=1>
<tr>
<th> 数列的首项</th>
<th> <jsp:getProperty name="lie" property="name"/></th>
<th> 所求项数</th>
<th> 求和结果</th>
</tr>
<td><jsp:getProperty name="lie" property="firstItem"/></td>
<td><jsp:getProperty name="lie" property="var"/></td>
<td><jsp:getProperty name="lie" property="number"/></td>
<td><jsp:getProperty name="lie" property="sum"/></td>
</tr>
</Table>
</BODY></HTML>
HandleSum.java
package sun.yourservlet;
import moon.yourbean.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleSum extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{super.init(config);
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ Series shulie=new Series(); //创建Javabean对象
request.setAttribute("lie",shulie);//将shulie存储到HttpServletRequest对象中
double a=Double.parseDouble(request.getParameter("firstItem"));
double d=Double.parseDouble(request.getParameter("var"));
int n=Integer.parseInt(request.getParameter("number"));
shulie.setFirstItem(a); //将数据存储在shulie中
shulie.setVar(d);
shulie.setNumber(n);
//计算和:
double sum=0,item=a;
int i=1;
shulie.setName("等差数列的公差");
while(i<=n) //计算等差数列的和
{ sum=sum+item;
i++;
item=item+d;
}
shulie.setSum(sum);
RequestDispatcher dispatcher=request.getRequestDispatcher("showResult.jsp");
dispatcher.forward(request,response); //请求showResult.jsp显示shulie中的数据
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ Series shulie=new Series();
request.setAttribute("lie",shulie);
double a=Double.parseDouble(request.getParameter("firstItem"));
double d=Double.parseDouble(request.getParameter("var"));
int n=Integer.parseInt(request.getParameter("number"));
shulie.setFirstItem(a);
shulie.setVar(d);
shulie.setNumber(n);
//计算和:
dou
1. MVC模式介绍
MVC是一种通过3个不同部分构造一个软件或组件的理想办法:
§ 模型(Model)——用于存储数据的对象。
§ 视图(View)——为模型提供数据显示的对象。
§ 控制器(Controller)——负责具体的业务逻辑操作,即控制器根据视图提出的要求对数据做出处理,并将有关结果存储到模型中,同时负责让模型和视图进行必要的交互,当模型中的数据变化时,让视图更新显示。
2. JSP中的MVC模式
模型(Model):一个或多个JavaBean对象,用于存储数据,JavaBean主要提供简单的setXXX()方法和getXXX()方法,在这些方法中不涉及对数据的具体处理细节。
视图(View):一个或多个JSP页面,为模型提供数据显示,JSP页面主要使用 HTML标记和JavaBean标记来显示数据。
控制器(Controller):一个或多个Servlet对象,根据视图提交的要求进行数据处理操作,并将有关的结果存储到JavaBean中,然后Servlet使用重定向方式请求视图中的某个JSP页面更新显示.
3. request周期的JavaBean
(1)用CreateJavaBeanClass类的某个构造方法创建Javabean对象,例如:
CreateJavaBeanClass bean=new CreateJavaBeanClass();
(2)将所创建的JavaBean对象存放到HttpServletRequest对象request中,并指定查找该JavaBean的关键字,例如:
request.setAttribute("keyWord",bean);
4. 视图更新
JSP页面使用如下标记获得Servlet所创建的JavaBean的引用 :
<jsp:useBean id="keyWord" type="flower.grass. CreateJavaBeanClass" scope="request" />
5. session周期的JavaBean
(1)用CreateJavabeanClass类的某个构造方法创建JavaBean对象,例如:
CreateJavaBeanClass bean=new CreateJavaBeanClass();
(2)将所创建的JavaBean对象存放到HttpServletSession对象session中,并指定查找该JavaBean的关键字,例如:
HttpSession session=request.getSession(true);
session.setAttribute("keyWord",bean);
6. application周期的JavaBe
(1)用CreateJavaBeanClass类的某个构造方法创建JavaBean对象,例如:
CreateJavaBeanClass bean=new CreateJavaBeanClass();
(2)Servlet可以使用getServletContext()方法返回服务器创建的ServletContext对象的引用,将所创建的JavaBean对象存放到服务器创建的ServletContext对象中,并指定查找该JavaBean的关键字,例如:
getServletContext().setAttribute("keyWord",bean);
web.xml
<?xml version="1.0" encoding=" ISO-8859-1"?>
<web-app>
<servlet>
<servlet-name>computerSum</servlet-name>
<servlet-class>sun.yourservlet.HandleSum</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>computerSum</servlet-name>
<url-pattern>/lookSum</url-pattern>
</servlet-mapping>
</web-app>
Series.java
package moon.yourbean;
public class Series
{ double firstItem; //数列首项
double var; //公差或公比
int number; //求和项数
double sum; //求和结果
String name=""; //数列类别
public void setFirstItem(double a)
{ firstItem=a;
}
public double getFirstItem()
{ return firstItem;
}
public void setVar(double b)
{ var=b;
}
public double getVar()
{ return var;
}
public void setNumber(int n)
{ number=n;
}
public double getNumber()
{ return number;
}
public void setSum(double s)
{ sum=s;
}
public double getSum()
{ return sum;
}
public void setName(String na)
{ name=na;
}
public String getName()
{ return name;
}
}
inputMess.jsp
<%@ page contentType="text/html;Charset=GB2312" %>
<HTML><BODY ><Font size=2>
<FORM action="lookSum" Method="post" >
等差数列求和:
<BR>输入首项:<Input type=text name="firstItem" size=4>
输入公差:<Input type=text name="var" size=4>
求和项数:<Input type=text name="number" size=4>
<Input type=submit value="提交">
</FORM>
<FORM action="lookSum" Method="get" >
等比数列求和:
<BR>输入首项:<Input type=text name="firstItem" size=4>
输入公比:<Input type=text name="var" size=4>
求和项数:<Input type=text name="number" size=4>
<Input type=submit value="提交">
</FORM>
</Font></BODY></HTML>
showResult.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="moon.yourbean.*"%>
<jsp:useBean id="lie" type="moon.yourbean.Series" scope="request"/>
<HTML><BODY>
<Table border=1>
<tr>
<th> 数列的首项</th>
<th> <jsp:getProperty name="lie" property="name"/></th>
<th> 所求项数</th>
<th> 求和结果</th>
</tr>
<td><jsp:getProperty name="lie" property="firstItem"/></td>
<td><jsp:getProperty name="lie" property="var"/></td>
<td><jsp:getProperty name="lie" property="number"/></td>
<td><jsp:getProperty name="lie" property="sum"/></td>
</tr>
</Table>
</BODY></HTML>
HandleSum.java
package sun.yourservlet;
import moon.yourbean.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleSum extends HttpServlet
{ public void init(ServletConfig config) throws ServletException
{super.init(config);
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ Series shulie=new Series(); //创建Javabean对象
request.setAttribute("lie",shulie);//将shulie存储到HttpServletRequest对象中
double a=Double.parseDouble(request.getParameter("firstItem"));
double d=Double.parseDouble(request.getParameter("var"));
int n=Integer.parseInt(request.getParameter("number"));
shulie.setFirstItem(a); //将数据存储在shulie中
shulie.setVar(d);
shulie.setNumber(n);
//计算和:
double sum=0,item=a;
int i=1;
shulie.setName("等差数列的公差");
while(i<=n) //计算等差数列的和
{ sum=sum+item;
i++;
item=item+d;
}
shulie.setSum(sum);
RequestDispatcher dispatcher=request.getRequestDispatcher("showResult.jsp");
dispatcher.forward(request,response); //请求showResult.jsp显示shulie中的数据
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{ Series shulie=new Series();
request.setAttribute("lie",shulie);
double a=Double.parseDouble(request.getParameter("firstItem"));
double d=Double.parseDouble(request.getParameter("var"));
int n=Integer.parseInt(request.getParameter("number"));
shulie.setFirstItem(a);
shulie.setVar(d);
shulie.setNumber(n);
//计算和:
dou