一、实验目的及要求:
1.理解mvc模式的原理。
2.掌握使用mvc模式开发程序。
二、实验内容:
1.定义一个inputjsp页面接收数据输入的长和宽。2.创建一个javaBean,包含长、宽和面积三个成员变量,分别有对应的get方法和set方法。
3.定义一个业务模型calculate.java,用来计算矩形的面积。
4.定义一个控制器handle.java,接收数据,创建bean对象,然后调用业务模型calculate.java完成面积计算,最后采用转发的方式调用display.jsp页面显示bean对象中的长宽高。
5.display.jsp用来显示实体模型中的数据,采用标记的形式。
input.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>input.jsp页面</title>
</head>
<body>
<form action="HandleServlet" method="post">
请分别输入长和宽:
<br>
<input type="text" name="length">
+
<input type="text" name="width">
<input type="submit" value="=">
</form>
</body>
</html>
display.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>display.jsp页面</title>
</head>
<body>
<jsp:useBean id="rectangle" class="dto.Rectangle" scope="request"/>
<jsp:getProperty property="length" name="rectangle"/>
+
<jsp:getProperty property="width" name="rectangle"/>
=
<jsp:getProperty property="area" name="rectangle"/>
面积是:${rectangle.area}
</body>
</html>
2.javaBean,包含长、宽和面积三个成员变量,分别有对应的get方法和set方法
package dto;
public class Rectangle {
private double length;
private double width;
private double area;
public double getLength() {
return length;
}
public void setLength(double length) {
this.length=length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getArea() {
return area;
}
public void setArea(double area) {
this.area = area;
}
}
业务模型calculate.java,用来计算矩形的面积
package service;
import dto.Rectangle;
public class Calculate {
public static double area(Rectangle rectangle) {
return rectangle.getWidth() * rectangle.getLength();
}
}
控制器handleServlet.java,接收数据,创建bean对象,然后调用业务模型calculate.java完成面积计算,最后采用转发的方式调用display.jsp页面显示bean对象中的长宽高。
package servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dto.Rectangle;
import service.Calculate;
@WebServlet(name="HandleServlet",urlPatterns=("/HandleServlet"))
public class HandleServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
/* 序列化ID,相当于身份认证,主要用于程序的版本控制,
* 保持不同版本的兼容性,在程序版本升级时避免程序
* 报出版本不一致的错误 */
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
doPost(request,response);
}
/*因为这个是控制器,是将视图层转发给业务层,处理后又转给视图层
* 所以我们需要两个层之间进行通信,HTTP就是用于传输超文本数据的应用层协议
* 有两个方法处理HTTP请求,doGet和doPost
* 对应HTTP GET请求 和HTTP POST请求
* GET用于获取数据 POST用于提交数据*/
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
/*传进来两个参数,HttpServletRequest用于获取客户端的数据
,HttpServletResponse用于浏览器给客户端的响应*/
request.setCharacterEncoding("utf-8");/*设置响应内容类型*/
获取HTTP请求的参数的值
String length=request.getParameter("length");
String width=request.getParameter("width");
System.out.print(length+width);
//实例化一个对象,用对象调用其属性或方法
Rectangle rectangle = new Rectangle();
//数据存储在模型rectangle中
rectangle.setWidth(Double.parseDouble(width));
rectangle.setLength(Double.parseDouble(length));
//实例化业务模型HandleServlet
double s = Calculate.area(rectangle);
rectangle.setArea(s);
/*确保rectangle对象已经被添加到请求属性中,这样它才能在display.jsp页面中通过EL表达式${rectangle}访问*/
request.setAttribute("rectangle", rectangle);
//将请求转发到名为"display.jsp"的JSP页面
RequestDispatcher dis = request.getRequestDispatcher("display.jsp");
dis.forward(request, response);//执行请求转发
}
}