JSP开发模型与MVC设计模式

JSP开发模型

JSP概念:
JSP的开发模型即JSP Model,在Web开发中,为了更方便地使用JSP技术,Sun公司为JSP技术提供了两种开发模型:JSP Model1和JSP Model2。JSP Model1简单轻便,适合小型Web项目的快速开发;JSP Model2模型是在JSP Model1的基础上提出的,它提供了更清晰的代码分层,更适用于多人合作开发的大型Web项目,实际开发过程中可以根据项目需求,选择合适的模型。
JSP Model1模型工作原理图
Model1基础是JSP,它由JSP和JavaBean组成,JSP从HttpRequest中获得所需的数据,并进行业务逻辑的处理,然后将结果通过HttpResponse返回给前端浏览器。
在这里插入图片描述

JSP Model2模型工作原理图
相比Model1, Model2 是将控制层(Servlet) 单独划分出来负责业务流程的控制,接收请求,创建所需的JavaBean实例,并将处理后的数据再返回给视图层(JSP) 进行界面数据展示。
在这里插入图片描述
MVC处理过程
MVC设计模式将软件程序分为三个核心模块:模型(Model)、视图(View)和控制器(Controller) ,这三个模块如图所示:
在这里插入图片描述
实现步骤:
编写UserBean类:
package cn.itcast.chapter10.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;
}
}
编写RegisterFormBean类:
package cn.itcast.chapter10.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;
}
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 void setErrorMsg(String err,String errMsg){
if((err != null) && (errMsg!=null)){
errors.put(err, errMsg);
}
}
public Map<String, String> getErrors() {
return errors;
}
}

创建工具类UBUtil
package cn.itcast.chapter10.model2.util;
import java.util.HashMap;
import cn.itcast.chapter11.model2.domain.UserBean;
public class DBUtil {
private static DBUtil instance = new DBUtil();
private HashMap<String, UserBean> users = new HashMap<String, UserBean>();
public DBUtil(){
UserBean user1 = new UserBean();
user1.setName(“Jack”);
user1.setPassword(“123456”);
user1.setEmail(“jack@it315.org”);
users.put(“Jack”,user1);
UserBean user2 = new UserBean();
user2.setName(“Rose”);
user2.setPassword(“abcdefr”);
user2.setEmail(“rose@it315.org”);
users.put(“Rose”,user2);
}
public static DBUtil getInstance() {
return instance;
}
public UserBean getUser(String username){
UserBean user = (UserBean) 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(users.get(username) !=null){
return false;
}
users.put(username,user);
return true;
}
}

创建Servlet 定义ControllerServlet类:
package cn.itcast.chapter10.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;
public class ControllerServet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(“test/html;charset=utf-8”);
request.setCharacterEncoding(“utf-8”);
//BeanUtils.populate(new RegisterFormBean(), request.getParameterMap());
String name = request.getParameter(“name”);
String password = request.getParameter(“password”);
String password2 = request.getParameter(“password2”);
String email = request.getParameter(“email”);
RegisterFormBean formBean = new RegisterFormBean();
formBean.setName(name);
formBean.setPassword(password);
formBean.setPassword(password2);
formBean.setEmail(email);
if(!formBean.validate()) {
request.setAttribute(“formBean”, formBean);
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(“formBean”, formBean);
request.getRequestDispatcher(“register.jsp”).forward(request, response);
return;
}
response.getWriter().print(“恭喜你,注册成功,3秒后自动跳转”);
request.getSession().setAttribute(“userBean”, userBean);
response.setHeader(“refresh”, “3,url = loginSuccess.jsp”);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}

创建JSP页面,编写register.jsp文件:
<%@ page language=“java” pageEncoding=“GBK”%>

用户注册 <% if (session.getAttribute("userBean") ==null) { %> <% return; } %>
恭喜你,登录成功

您的信息
  • 您的姓名:${userBean.name }
  • 您的邮箱:${userBean.email }

运行测试:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值