J2EE 6.MVC

MVC模式

模型(Model) Bean

          用于存储数据的对象。Javabean对象

视图(View)

         向控制器提交所须数据、显示模型中的数据。JSP页面

控制器(Controller) -servlet

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

 

使用javax.servlet.http包中的类,javax.servlet.http包不在JDK的核心类库中,因此需要将Tomcat安装目录lib子目录中的servlet-api.jar文件复制到Tomcat服务器所使用的JDK的扩展目录中,比如,复制到D:\jdk1.7\jre\lib\ext中

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

useBean标记:

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

创建Javabean。

也可以由控制器servet创建Javabean

生命周期分为request、session和application。

1.request周期的Javabean

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

     BeanClass bean=new BeanClass();

(2)将所创建的bean对象存放到request中,并指定查找该bean的关键字: request.setAttribute("keyWord",bean);

视图更新

.    jsp页面可以使用bean.

   <jsp:useBean id="keyWord" type="user.yourbean.BeanClass" scope="request"/>

<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="request"/>

 

2. session周期的Javabean

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

     BeanClass bean=new BeanClass();

(2)将所创建的bean对象存放到session中,并指定查找该bean的关键字:        session.setAttribute("keyWord",bean);

视图更新

   servlet使用转发或重定向方法让JSP页面来显示bean中的数据

jsp页面可以使用

   <jsp:useBean id="keyWord" type="user.yourbean.BeanClass" scope=“sessiont"/>

<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope=“session"/>   

 

3. application周期的Javabean

Javabean的创建

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

     BeanClass bean=new BeanClass();

(2)将所创建的bean对象存放到appication中,并指定查找该bean的关键字:

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

视图更新

   servlet使用转发或重定向

jsp页面可以使用

   <jsp:useBean id="keyWord" type="user.yourbean.BeanClass" scope=“appication"/>

<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope=“application"/>   

Javabean模型中的getXxx和setXxx方法不涉及对数据的具体处理细节,以便增强模型的通用性。

实验

6_1  计算一元二次方程的根

1.相关知识点

servlet(BeanClass)负责创建生命周期为request的be3edddddan关键代码是:

BeanClass bean=new BeanClass();

request.setAttribute("keyWord",bean);

上述代码会把bean存放到Tomcat引擎管理的内置对象pageContext中,该bean被指定的id是"keyWord",scope(生命周期)是PageContext.REQUEST_SCOPE(request)。

servlet负责根据模型中数据的变化通知视图(JSP页面)更新。对于scope是request的bean,其手段是使用转发,即使用RequestDispatcher对象向某个JSP页面发出请求,让所请求的JSP页面显示bean中的数据。

2.实验目的

本实验的目的是让学生掌握在MVC模式中怎样使用scope是request的bean。

3.实验要求

  1. 视图

提供两个JSP页面,一个页面使得用户可以输入一元二次方程的系数;另一个页面可以显示一元二次方程的系数和根。

  1. 数据模型

提供的Javabean负责刻画一元二次方程,即可以存储一元二次方程的系数以及方程的根,提供简单的获取数据和修改数据的方法。

  1. 控制器

负责计算一元二次方程的根,然后将有关数据存储到Javabean数据模型中,然后用转发的方式请求视图中负责显示数据的JSP页面显示Javabean数据模型中的数据。

Debug:

设置request参数,转发

奇怪,明明引用bean的都注释了(修改的文件错了,应该是移出文件夹后的)

bean equation not found within scope

for servlet [EquationServlet] in context with path [/test1] threw exception [java.lang.NullPointerException] with root cause

java.lang.NullPointerException

 

set、getAttribute对应使用

<!-- web.xml -->

  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>EquationServlet</servlet-name>
    <servlet-class>myservlet.control.EquationServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>EquationServlet</servlet-name>
    <url-pattern>/EquationServlet</url-pattern>
  </servlet-mapping> 
<!-- input.jsp -->

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
    This is my JSP page. <br>
    <form action="EquationServlet" method="get">
    	y=<input type="text" size="2" name="a">x^2+
    	<input type="text" size="2" name="b">x+
    	<input type="text" size="2" name="c">
    	<input type="submit" value="提交">
    </form>
  </body>
</html>
//EquationServlet.java
package myservlet.control;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import Bean.Equation;

public class EquationServlet extends HttpServlet {

	/**
	 * Constructor of the object.
	 */
	public EquationServlet() {
		super();
	}
	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		double a=Double.parseDouble(request.getParameter("a"));
		double b=Double.parseDouble(request.getParameter("b"));
		double c=Double.parseDouble(request.getParameter("c"));
		double root1,root2;
		double delta=b*b-4*a*c;
		Equation equation=new Equation();
		equation.setA(a);
		equation.setB(b);
		equation.setC(c);
		System.out.println("------------>delta:"+delta);
		if(delta>=0){
			root1=(-b+Math.sqrt(delta))/(2*a);
			root2=(-b-Math.sqrt(delta))/(2*a);
			equation.setRoot1(root1);
			equation.setRoot2(root2);
			System.out.println("------------>根"+root1);
			request.setAttribute("status","1");
		}else{
			System.out.println("------------>无实数解");
			request.setAttribute("status","0");
		}
		request.setAttribute("equation",equation);
		RequestDispatcher dispatcher=request.getRequestDispatcher("output.jsp");
		dispatcher.forward (request,response);
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request,response);
	}
}
<!-- output.jsp -->
<%@page import="Bean.Equation"%>
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
 <jsp:useBean id="equation" type="Bean.Equation" scope="request"/>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
    This is my JSP page. <br>
    <%
    	String status=(String)request.getAttribute("status");
    	out.print(status);
    	if(status.equals("1")){
    		double a=equation.getA();
    		double b=equation.getB();
    		double c=equation.getC();
    		double root1=equation.getRoot1();
    		double root2=equation.getRoot2(); 
    		out.println("y="+a+"x^2+"+b+"x+"+c);
    		out.println("解为:"+root1+" "+root2);
    	}else{
    		out.print("无解");
    	}
     %>
  </body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值