第十一章jsp 开发模型 day14

文章目录

  • 第十一章JSP开发模型
    • 一、jspJSP开发模型
      • 1. jsp Model1
        • 图里是JSP Model1前JSP开发的早期模型和 JSPModel1 的工作原理
      • 2.jsp Model2
    • 二、 MVC模型的设计
      • 1. Model2思想实现用户注册功能
      • 2.实现步骤
        • 1.创建项目,编写JAVABean
        • 2.创建工具类
        • 3.创建Servlet
        • 4.创建JSP页面
          • 1.在项目WebContent目录下创建register.jsp文件,该文件是用户注册的表单页面,用于接收用户的注册信息。
          • 2.在项目WebContent目录下创建loginSuccess.jsp文件,该文件是用户登入成功的页面。
        • 5 运行程序,测试结果
    • 本章小结
    • 2020080605013

第十一章JSP开发模型

JSP技术在Web应用程序的开发过程中应用十分广泛,它功能强大,是当前流行的动态网页技术标准之一。使用JSP技术开发Web应用程序,有两种开发模型可供选择,通常我们称为JSP Model1和 JSP Model2.

一、jspJSP开发模型

1. jsp Model1

图里是JSP Model1前JSP开发的早期模型和 JSPModel1 的工作原理

2.jsp Model2

JSPModel1 虽然将数据和部分的业务逻辑从 JSP 页面中分离出去,但是 JSP 页面仍然需要负责流程控制和产生用户界面。对于一个业务流程复杂的大型应用程序来说,在 JSP 页面中依旧会嵌入大量的 Java 代码,这样会给项目管理带来很大的麻烦。为了解决这样的问题,SUN 公司在 Model1 的基础上又提出了JSPModel2 架构模型。
JSP Model2架构模型采用 JSP + Servlet + JavaBean 的技术,此技术将原本 JSP 页面中的流程控制代码提取出来,封装到 Servlet 中,从而实现了整个程序页面显示、流程控制和业务逻辑的分离。
实际上,JSP Model2 模型就是 MVC (模型Model - 视图View - 控制器Controller)设计模式。其中,控制器的角色是由 Servlet 实现的,视图的角色是由 JSP 页面实现的,模型的角色是由 JavaBean 实现的。JSP Model2的工作原理,如图所示:

二、 MVC模型的设计

它是施乐帕克研究中心在 20 世纪 80 年代为编程语言 Smalltalk–80 发明的一种软件设计模式,提供了一种按功能对软件进行模块划分的方法。MVC 设计模式将软件程序分为 3 个核心模块:模型( Model ) 视图( View ) 和 控制器( Controller ),这3个模块的作用如下所示。

1.模型
模型(Model) 负责管理应用程序的业务数据、定义访问控制以及修改这些数据的业务规则。当模型的状态发生改变时,它会通知视图发生改变,并为视图提供查询模型状态的方法。
2.视图
视图(View) 负责与用户进行交互,它从模型中获取数据向用户展示,同时也能将用户请求传递给控制器进行处理。当模型的状态发生改变时,视图会对用户界面进行同步更新,从而保持与模型数据的一致性。
3…控制器
控制器( Controller ) 是负责应用程序中处理用户交互的部分,它负责从视图中读取数据,控制用户输入,并向模型发送数据。
它们之间的关系如图:

1. Model2思想实现用户注册功能

务目标
学会使用 JSP Model2 模型开发程序。
JSP Model2 模型是一种 MVC 设计模式,由于 MVC 模式中的功能模块相互独立,并且使用该模式的软件具有极高的可维护性、可扩展性和可复用性,因此,使用MVC 开发模式的 Web应用越来越受到欢迎。接下来,本任务将按照 JSP Model2 的模型思想编写一个用户注册程序。该程序中包含两个 JSP 页面 register.jsp 和loginSuccess jsp、一个 Servlet类ControllerServlet。两个 JavaBean 类RegisterFormBean 和 UserBean,以及一个访问数据库的辅助类 DBUtil,这
些组件的关系如图所示。

( 1 ) UserBean 是代表用户信息的 JavaBean,ControllerServlet 根据用户注册信息创建出一个UserBean对象,并将对象添加到 DBUtil 对象中,loginSuccess.jsp 页面从 UserBean 对象中提取用户信息进行显示。
( 2 ) RegisterFormBean 是封装注册表单信息的 JavaBean,用于对从 ControllerServlet 中获取到的注册表单信息中的各个属性(也就是注册表单内的各个字段中所填写的数据)进行校验。
( 3 ) DBUtil 是用于访问数据库的辅助类,它相当于一个 DAO (数据访问对象)。
( 4 ) ControllerServlet 是控制器,它负责处理用户注册的请求。如果注册成功,就会跳到 loginSuccess.jsp页面;如果注册失败,重新跳回到 register.jsp 页面并显示错误信息。
( 5 ) register.jsp 是显示用户注册表单的页面,它将注册请求提交给 ControllerServlet 程序处理。
( 6 ) loginSuccess.jsp 是用户登录成功后进入的页面,新注册成功的用户自动完成登录,直接进入 loginSuccess.jsp 页面。

2.实现步骤

1.创建项目,编写JAVABean

在Eclipse中创建一个名称为chapter12的web项目, 在项目的src目录下创建包cn.itcast.chapter11.model2.domain,在包中定义UserBean类,用来封装用户信息。

package cn.itcast.chapter11.model2.domain;
/**
 * 用来封装用户的基本参数
 * @author apple
 *
 */
public class UserBean {
	private String name;
	private String password;
	private String email;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
	
}  
package cn.itcast.chapter11.model2.domain;


import java.util.HashMap;
import java.util.Map;

public class RegisterFormBean {

	//1.用来封装注册参数的
	private String name;
	private String password;
	private String password2;
	private String email;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getPassword2() {
		return password2;
	}
	public void setPassword2(String password2) {
		this.password2 = password2;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	//------------进行服务端的数据-----------------------
	//2.定义变量来接收用户校验的信息,比如说用户名、邮箱是否符合规范,
	//第一个参数 属性名称  第二个参数:属性值是否符合规范信息,比如(“email”,”邮箱格式有误“);
	private Map<String,String> errors = new HashMap<String,String>();
	public boolean validate(){
		//2.定义变量,来判断数据是否满足规范,如果满足 就返回true,不满足就返回false
		boolean flag = true;
		if(name == null || name.trim().equals("")){
			errors.put("name","请输入用户名");
			flag = false;
			return flag;
		}
		if(password == null || password.trim().equals("")){
			errors.put("password","请输入密码");
			flag = false;
			return flag;
		}else if(password.length()>12 || password.length()<6){
			errors.put("password","请输入6-12个字符");
			flag = false;
			return flag;
		}
		if(password != null && !password.equals(password2)){
			errors.put("password2","两次输入密码不一致");
			flag = false;
			return flag;
		}
		//校验邮箱,校验邮箱格式是否满足规范
		  String regex = "[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+";
		  if(email == null || email.trim().equals("")){
				errors.put("email","请输入邮箱");
				flag = false;
				return flag;
		 }else if(!email.matches(regex)){
				errors.put("email","邮箱格式错误");
				flag = false;
				return flag;
		}
		
			return flag;
	}
	//获取错误信息的方法
	public Map<String, String> getErrors() {
		return errors;
	}
	//提供向map集合中添加错误信息
	public void setErrorMsg(String err,String errMsg){
		if((err != null) && (errMsg!=null)){
			errors.put(err, errMsg);
		}}}


2.创建工具类

在chaterp11项目的src下创建cn.itcast.chaterp11.model2.util,在包中定义DBUtil类,

package cn.itcast.chapter11.model2.util;
import java.util.HashMap;

import cn.itcast.chapter11.model2.domain.UserBean;

public class DBUtil {
	private static DBUtil instance = new DBUtil();
	public static  DBUtil getInstance(){
		return instance;
	}
	private HashMap<String, UserBean> users = new HashMap<String, UserBean>();
	public DBUtil(){
		UserBean user1 = new UserBean();
		user1.setName("Jack");
		user1.setPassword("123456");
		user1.setEmail("[email protected]");
		users.put("Jack",user1);
		UserBean user2 = new UserBean();
		user2.setName("Rose");
		user2.setPassword("abcdefr");
		user2.setEmail("[email protected]");
		users.put("Rose",user2);
	}
	public UserBean getUser(String username){
		UserBean user = users.get(username);
		return user;
	}
	public boolean insertUser(UserBean user){
		if(user == null){
			return false;
		}
		String username = user.getName();
		//String usernameDB = users.get(username).getName();
		UserBean userDB = users.get(username);
		if(userDB !=null){
			return false;
		}
		users.put(username,user);
		return true;
	}	
}
3.创建Servlet

在chaterp11项目的src下创建cn.itcast.chaterp11.model2.web,在包中定义ConrtrollerServlet类,

package cn.itcast.chapter11.model.web;

import java.io.IOException;
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 cn.itcast.chapter11.model2.domain.RegisterFormBean;
import cn.itcast.chapter11.model2.domain.UserBean;
import cn.itcast.chapter11.model2.util.DBUtil;

/**
 * Servlet implementation class ControllerServlet
 */
@WebServlet("/ControllerServlet")
public class ControllerServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//����
		request.setCharacterEncoding("utf-8");
		//����
		response.setContentType("text/html;charset=utf-8");
		//
		String name=request.getParameter("name");
		String password= request.getParameter("password");
		String password2=request.getParameter("password2");
		String email= request.getParameter("email");
		
		RegisterFormBean fromBean= new RegisterFormBean();
		fromBean.setName(name);
		fromBean.setPassword(password);
		fromBean.setPassword2(password2);
		fromBean.setEmail(email);
		if(!fromBean.validate()) {
			request.setAttribute("fromBean", fromBean);
			request.getRequestDispatcher("/register.jsp").forward(request,response);
		return;
		}
		UserBean userBean= new UserBean();
		
		userBean.setName(name);
		userBean.setPassword(password);
		userBean.setEmail(email);
		
		boolean b = DBUtil.getInstance().insertUser(userBean);
		
		if(!b) {
			request.setAttribute("DBMes","你注册的用户存在");
			request.setAttribute("fromBean", fromBean);
			request.getRequestDispatcher("/register.jsp").forward(request,response);
		}
		response.getWriter().print("恭喜你注册成功,3秒钟自动跳转");
		request.getSession().setAttribute("userBean", userBean);
		response.setHeader("refresh", "3,url=loginSuccess.jsp");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

4.创建JSP页面
1.在项目WebContent目录下创建register.jsp文件,该文件是用户注册的表单页面,用于接收用户的注册信息。
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
    <title>用户注册</title>
    <style type="text/css">
        h3 {
	        margin-left: 100px;
        }
        #outer {
	        width: 750px;
        }
        span {
	        color: #ff0000
        }
        div {
             height:20px;
	        margin-bottom: 10px;
        }
        .ch {
	        width: 80px;
	        text-align: right;
	        float: left;
        }
        .ip {
	        width: 500px;
	        float: left
        }
        .ip>input {
	        margin-right: 20px
        }
        #bt {
	        margin-left: 50px;
        }
        #bt>input {
	        margin-right: 30px;
        }
    </style>
</head>
<body>
	    <form action="ControllerServlet" method="post">
		    <h3>用户注册</h3>
		    <div id="outer">
			    <div>
				    <div class="ch">姓名:</div>
				    <div class="ip">
				<input type="text" name="name" value="${formBean.name }" />
					    <span>${formBean.errors.name}${DBMes}</span>
				    </div>
			    </div>
			    <div>
				    <div class="ch">密码:</div>
				    <div class="ip">
					    <input type="password" name="password" />
					    <span>${formBean.errors.password}</span>
				    </div>
			    </div>
			    <div>
				    <div class="ch">确认密码:</div>
				    <div class="ip">
					    <input type="password" name="password2" />
					    <span>${formBean.errors.password2}</span>
				    </div>
			    </div>
			    <div>
				    <div class="ch">邮箱:</div>
				    <div class="ip">
			<input type="text" name="email" value="${formBean.email }" />
					    <span>${formBean.errors.email}</span>
				    </div>
			    </div>
			    <div id="bt">
				    <input type="reset" value="重置 " />
				    <input type="submit" value="注册" />
			    </div>
		    </div>
	    </form>
</body>
</html>

2.在项目WebContent目录下创建loginSuccess.jsp文件,该文件是用户登入成功的页面。
<%@ page language="java" pageEncoding="UTF-8" import="cn.itcast.chapter11.model2.domain.UserBean"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8">
<title>login successfully</title>
    <style type="text/css">
        #main {
	        width: 500px;
	        height: auto;
        }
        #main div {
	        width: 200px;
	        height: auto;
        }
        ul {
	        padding-top: 1px;
	        padding-left: 1px;
	        list-style: none;
        }
    </style>
</head>
<body>
	   
	    <div id="main">
		    <div id="welcome">恭喜你,登录成功</div>
             <hr />
		    <div>您的信息</div>
		    <div>
			    <ul>
				    <li>您的姓名:${userBean.name}</li>
				    <li>您的邮箱:${userBean.email}</li>
			    </ul>
		    </div>
	    </div>
</body>
</html>

5 运行程序,测试结果

第十一章jsp 开发模型 day14_第1张图片
第十一章jsp 开发模型 day14_第2张图片
第十一章jsp 开发模型 day14_第3张图片

本章小结

本章首次讲解了JSP的两种开发模式JSP Model1 和JSP Model2,然后介绍了MVC设计模式的思想,最后通过用户注册案例来帮组大家掌握JSP开发模型中JSP Model2的应用。使我对JSP开发模型的工作原理有所了解,学会使用
jsp model2的思想开发程序,并对MVC设计模式的思想有所了解。

2020080605013

你可能感兴趣的:(mvc,java,前端)