大二第十四次JSP开发模型

1.JSP开发模型

JSP 的开发模型即 JSP Model,在 Web 开发中,为了更方便地使用JSP 技术,SUN公司为jSP 技术提供了两种开发模型:JSP Model1 和JSP Model2。JSP Model1 简单轻便,适合小型Web 项目的快速开发;JSP Model2 模型是在 JSP Model1的基础上提出的,它提供了更清晰的代码分层,更适用于多人合作开发的大型 Web 项目,实际开发过程中可以根据项目需求,选择合适的模型。接下来就针对这两种开发模型分别进行详细介绍。

1. JSP Model1

在讲解 JSP Model1 前,先来了解一下 JSP 开发的早期模型。在早期使用 JSP 开发的 JavaWeb 应用中,JSP 文件是一个独立的、能自主完成所有任务的模块,它负责处理业务逻辑、控制网页流程和向用户展示页面等。
在这里插入图片描述

2. JSP Model2

JSP Model 虽然将数据和部分的业务逻辑从 JSP 页面中分离出去,但是 JSP 页面仍然需要负责流程控制和产生用户界面。对于一个业务流程复杂的大型应用程序来说,在JSP 页面中依旧会嵌入大量的 Java 代码,这样会给项目管理带来很大的麻烦。为了解决这样的问题,SUN公司在 Model1 的基础上又提出了 JSP Model2 架构模型。
在这里插入图片描述

MVC设计模式

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

案例解析

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

代码及成果展示

package cn.itcast.chapter11.model2.domain;

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

public class RegisterFormBean {
	private String name;
	private String password;
	private String password2;
	private String email;
	private Map<String, String> errors = new HashMap<String, String>();
	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;
	}
	public boolean validate(){
		boolean flag = true;
		if(name == null || name.trim().equals("")){
				errors.put("name","请输入姓名.  ");
				flag = false;
		}
		if (password == null || password.trim().equals("")) {
				errors.put("password","请输入密码. ");
				flag = false;
		}else if (password.length()> 12 || password.length()< 6) {
			errors.put ("password","请输入 6-12个字符. ");
			flag = false;
		}
		if (password != null && !password.equals(password2)) {
			errors.put("password2","  两次输入的密码不匹配. ");
			flag = false;
		}
		//对email格式的校验采用了正则表达式
		if(email == null || email.trim().equals("")){
			errors.put("email","请输入邮箱. ");
			flag = false;
		}else if(!email
		.matches("[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+")) {
			errors.put("email","邮箱格式错误. ");
			flag = false;
		}
		return flag;
	}
		// 向Map 集合 errors 中添加错误信息
		public void setErrorMsg(String err, String errMsg) {
		if ((err != null) && (errMsg != null)){
			errors.put(err, errMsg);
		}
		}
		//获取 errors 集合
		public Map<String, String> getBrrors() {
		return errors;
		}
		}
package cn.itcast.chapter11.model2.domain;

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.util;

import java.util.HashMap;

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

public class DBUtil {
	private static DBUtil instance = new DBUtil();
	// 定义 users 集合,用于模拟数据库
	private HashMap<String,UserBean> users = new HashMap<String,UserBean>();
		private DBUtil(){
			//向数据库(users)中存入两条数据
			UserBean userl = new UserBean();
			userl.setName("Jack");
			userl.setPassword("12345678");
			userl.setEmail("jack@it315.org");
			users.put("Jack ",userl);
			UserBean user2 = new UserBean();
			user2.setName("Rose");
			user2.setPassword("abcdefg");
			user2.setEmail("rose@it315.org");
			users.put("Rose ",user2);
		}
			public static DBUtil getInstance() {
			return instance;
			}
			//获取数据库(users)中的数据
			public UserBean getuser(String userName){
				UserBean user =(UserBean) users.get(userName);
				return user;
			}
			//向数据库(users)插入数据
			public boolean insertuser(UserBean user){
				if(user == null){
					return false;
				}
			String userName = user.getName();
			if(users.get(userName)!= null){
			return false;
			}
			users.put(userName,user);
			return true;
			}

}

package cn.itcast.chapter11.model2.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;

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

			public void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
				this.doPost(request, response);
			}
			public void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
				response.setHeader("Content-type","text/html;charset=GBK");
				response.setCharacterEncoding("GBK");
				//获取用户注册时表单提交的参数信息
				String password2=request.getParameter("password2");
				String password=request.getParameter("password");
				String name = request.getParameter("name");
				String email=request.getParameter("email");
				// 将获取的参数封装到注册表单相关的 RegisterFormBean 类中
				RegisterFormBean formBean = new RegisterFormBean();
			 formBean.setName (name);
			formBean.setPassword(password);
			formBean.setPassword2(password2);
			formBean.setEmail(email);
			
			System.out.println("test");
			//验证参数填写是否符合要求,如果不符合,转发到 register.jsp 重新填写
			if(!formBean.validate()){
			request.setAttribute("formBean", formBean);
			request.getRequestDispatcher("/register.jsp")
			.forward(request, response);
			return;
			}
			//参数填写符合要求,则将数据封装到 UserBean 类中
			UserBean userBean = new UserBean();
			userBean.setName(name);
			userBean.setPassword(password);
			userBean.setEmail(email);
			boolean b = DBUtil.getInstance().insertuser(userBean);
			// 调用 DBUtil的 insertUser()方法执行添加操作,并返回一个 boolean 类型的标志
			if(!b){
			//如果返回为 false,表示注册的用户已存在,则重定向到 register.jsp 重新填写
			request.setAttribute("formBean", formBean);
			request.setAttribute("DBMes","你注册的用户已存在");
			request.getRequestDispatcher("/register.jsp").forward(request, response);
			return;
			}
			response.getWriter().print("恭喜你注册成功, 3 秒钟自动跳转");
			response.setHeader("refresh","3;url=loginSuccess.jsp");
			//注册成功后,3 秒跳转到登录成功页面1oginSuccess.jsp
			request.getSession().setAttribute("userBean", userBean);
			}
}
<%@ page language="java" pageEncoding="GBK" 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>
<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>
	<%
	if (session.getAttribute("userBean")==null) {
	%>
	<jsp:forward page="register.jsp"/>
	<%
	return;
	}
	%>
	   
	    <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>

<%@ page language="java" pageEncoding="GBK"%>
<!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>

// An highlighted block
var foo = 'bar';

在这里插入图片描述
在这里插入图片描述

2020080605045 袁雪华 大数据2005

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值