第五章 JSP的两种开发模型

在JSP开发过程中,有两种开发模型可供选择。一种是JSP和JavaBean结合,称为model1,另一种是JSP、JavaBean和Servlet相结合,称为model2。

JavaBean是用于封装业务逻辑或对象的Java类,是一个可重用的Java软件组件模型。分为可视化和非可视化,前者是一种传统的应用方式,用于实现可视化界面,如窗体、按钮、文本框等;后者用于实现一些业务逻辑或封装一些业务对象。

1、第一种模式

index.js,表单,提交

    <form action="student.jsp" method="post">
    	<p>学号:<input type="text" name="id"/></p>
    	<p>年龄:<input type="text" name="age"/></p>
    	<p>
    		<input type="submit" value="提交"/>
    		<input type="reset" value="重置"/>
    	</p>
    </form>

student.jsp,实例化对象,赋值,输出属性

    <jsp:useBean id="student" class="pa.Student"></jsp:useBean>
    <jsp:setProperty property="*" name="student"/>
    <jsp:setProperty property="classes" name="student" value="一年级(1)班"/>
    <hr/>
    <p>学号:<%=student.getId() %></p>
    <p>年龄:<%=student.getAge() %></p>
    <p>班级:<%=student.getClasses()%></p>

Student.java类,UseBean

public class Student 
{
	private int id;
	private int age;
	private String classes;
	public void setId(int id)
	{
		this.id=id;
	}
	public int getId()
	{
		return id;
	}
	public void setAge(int age)
	{
		this.age=age;
	}
	public int getAge()
	{
		return age;
	}
	public void setClasses(String classes)
	{
		this.classes=classes;
	}
	public String getClasses()
	{
		return classes;
	}
}

还可在jsp页面中使用getProperty属性。

<jsp:useBean id="book" class="pa.Book"></jsp:useBean>
    <jsp:setProperty property="bookName" name="book" value="《JAVA程序设计标准教程》"/>
    <jsp:setProperty property="author" name="book" value="明日科技"/>
    <jsp:setProperty property="category" name="book" value="计算机"/>
    <jsp:setProperty property="price" name="book" value="199.782"/>
    书名:<jsp:getProperty property="bookName" name="book"/><br/>
    作者:<jsp:getProperty property="author" name="book"/><br/>
    类别:<jsp:getProperty property="category" name="book"/><br/>
    价格:<jsp:getProperty property="price" name="book"/><br/>

其中Book.java如下:

public class Book 
{
	private String bookName;
	private String author;
	private String category;
	private double price;
	public void setBookName(String bookName )
	{
		this.bookName=bookName;
	}
	public String getBookName()
	{
		return bookName;
	}
	public void setAuthor(String author)
	{
		this.author=author;
	}
	public String getAuthor()
	{
		return author;
	}
	public void setCategory(String category )
	{
		this.category=category;
	}
	public String getCategory()
	{
		return category;
	}
	public void setPrice(double price )
	{
		this.price=price;
	}
	public double getPrice()
	{
		return price;
	}
}

第一种模式,jsp页面接收用户的输入,通过表单形式,在另一个jsp页面连接到JavaBean,处理用户的输入,然后向用户显示信息。涉及的对象只有JSP和JavaBean。

2、第二种模式

第二种模式,jsp页面接收用户的输入,通过表单提交到Servlet,Servlet负责接收数据,实例化JavaBean定义的对象,处理数据,在另一个页面连接Servlet,在页面显示数据给用户。

第二种模式即为MVC模式,分别将显示层、控制层和模型层相分离,3层结构各司其职。Model模型层,是应用程序的核心,主要有JavaBean担任,一般为实体对象或业务逻辑,具有重用性和扩展性;View视图层,提供应用程序和用户之间交互的界面,这层不包括任何的业务逻辑,一般由jsp或html来担任;Controller控制层,控制应用程序中的请求,起到宏观调控的作用,通知容器选择什么样的模型组件,一般由Servlet担任。

index.jsp

<form action="servlet/GoodsServlet" method="post" onSubmit="return save(this);">
    
    	<table border="1" align="center" width="500">
        	<tr>
            	<td align="center" colspan="2">
                	<h1>录入商品信息</h1>
                </td>
            </tr>
            <tr>
            	<td>商品名称:</td>
                <td><input type="text" name="name"></td>
            </tr>
             <tr>
            	<td>价格:</td>
                <td><input type="text" name="price"></td>
            </tr>
             <tr>
            	<td>商品描述:</td>
                <td><textarea name="description" cols="30" rows="3"></textarea></td>
            </tr>
             <tr>
            	<td><input type="submit" value="提交"></td>
                <td><input type="reset" value="重置"></td>
            </tr>
        </table>
    </form>

GoodsServlet.java,即控制层servlet。首先接收jsp页面的参数,然后实例化一个类(Goods),对类进行操作(设置属性)。这里还实例化了另外一个类GoodsDao,看看代码它要干什么

public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		response.setCharacterEncoding("GBK");
		request.setCharacterEncoding("GBK");
		PrintWriter out = response.getWriter();
		//获取商品信息
		String name=request.getParameter("name");
		String price=request.getParameter("price");
		String description=request.getParameter("description");
		//实例化商品对象
		Goods goods=new Goods();
		//商品对象赋值
		goods.setName(name);
		goods.setPrice(Double.valueOf(price));
		goods.setDescription(description);
		//实例化GoodsDao
		GoodsDao goodsDao=new GoodsDao();
		goodsDao.saveGoods(goods);
		out.print("商品信息保存成功!");
		out.flush();
		out.close();
	}

Goods.java

public class Goods 
{
	private String name;
	private double price;
	private String description;
	public void setName(String name)
	{
		this.name = name;
	}
	public String getName()
	{
		return name;
	}
	public void setPrice(double price)
	{
		this.price = price;
	}
	public double getPrice()
	{
		return price;
	}
	public void setDescription(String description)
	{
		this.description = description;
	}
	public String getDescription()
	{
		return description;
	}

}

GoodsDao.java 。 连接数据库并将一个Goods类型的对象的属性值写进数据库

import java.sql.*;

public class GoodsDao 
{
	public void saveGoods(Goods goods)
	{
		try
		{
			Class.forName("com.mysql.jdbc.Driver");
			String url="jdbc:mysql://localhost:3306/test";
			Connection conn=DriverManager.getConnection(url,"root","xhp");
			String sql="insert into tb_goods(name,price,description) values(?,?,?)";
			PreparedStatement ps=conn.prepareStatement(sql);
			ps.setString(1,goods.getName());
			ps.setDouble(2,goods.getPrice());
			ps.setString(3,goods.getDescription());
			ps.executeUpdate();
			ps.close();
			conn.close();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}

其中数据库的结构为:

create table tb_goods
(
name varchar(20),
price double,
description varchar(20)
);

在service.jsp页面查看上述操作的结果

    <jsp:useBean id="goods" class="pa.Goods"></jsp:useBean>
    <jsp:setProperty property="*" name="goods"></jsp:setProperty>
    
    <jsp:useBean id="goodsDao" class="pa.GoodsDao"></jsp:useBean>
    <%
		goodsDao.saveGoods(goods);
	  %>

3、检查JavaBean的作用域

    <jsp:useBean id="counter_session" class="pa.Counter" scope="session"></jsp:useBean>
    session:<jsp:getProperty property="count" name="counter_session"/>
    <jsp:useBean id="counter_application" class="pa.Counter" scope="application"></jsp:useBean>
    application:<jsp:getProperty property="count" name="counter_application"/>

其中Counter.java如下:

public class Counter 
{
	private int count=0;
	public int getCount()
	{
		return ++count;
	}
}

4、使用MVC模式实现用户登录模块

(0)数据库设计

(1)视图层,jsp文件

index.jsp,主页

reg.jsp,用户注册页面

login.jsp,用户登录页面

message.jsp,提示信息页面

(2)控制层,servlet,即java文件

RegServlet.java,用户注册Servlet

LoginServlet.java,用户登录Servlet

UserExitServlet.java,用户退出Servlet

(3)模型层,class(JavaBean组件),即java文件

User.java,封装用户对象

UserDao.java,用户信息的数据库操作

DataBaseUtil.java,数据库连接工具类






 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值