目录

  • 第十一章JSP开发模型
    • 11.1 JSP开发模型
      • 11.1.1 JSP Model1
      • 2. JSP Model2
    • 11.2 MVC设计模式
    • 任务:按照Model2思想实现用户注册功能

第十一章JSP开发模型

11.1 JSP开发模型

11.1.1 JSP Model1

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

2. JSP Model2

JSP Model2架构模型采用 JSP + Servlet + JavaBean 的技术,此技术将原本 JSP 页面中的流程控制代码提取出来,封装到 Servlet 中,从而实现了整个程序页面显示、流程控制和业务逻辑的分离。

11.2 MVC设计模式

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

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

任务:按照Model2思想实现用户注册功能

  1. 创建项目,定义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 {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;}private Map<String,String> errors=new HashMap<String,String>();public boolean validate() {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("password", "两次输入密码不一致");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;}public void setErrorMsg(String err,String errMsg) {if((err!=null)&&(errMsg!=null)) {errors.put(err, errMsg);}}}
  1. 定义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>();//插入2条数据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 UserBean getUser(String username){UserBean user = users.get(username);return user;}//提供插入数据库的方法public boolean insertUser(UserBean user){//用户为null,不能插入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;}
}
  1. 定义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 {response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("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("formBean", fromBean);request.getRequestDispatcher("/register.jsp").forward(request, response);return ;}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 stubdoGet(request, response);}}
  1. 创建jsp文件
    创建register.jsp文件,该文件是用户注册的表单页面,用于接收用户的注册信息。
<%@ 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>

创建loginSuccess.jsp文件,该文件是用户登入成功的页面。

<%@ 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><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>

运行结果

2020080605012

Java Web day14相关推荐

  1. Java web基础学习笔记

    1.xml概述 1.1xml:xml一种数据存储格式,这种数据存储格式在存储数据内容的同时,还能够保存数据之间的关系 1.2xml保存数据的方法:xml利用标签来保存数据的内容,利用标签之间的嵌套关系 ...

  2. Java Web 08_tomcatServlet

    Java Web 08_tomcat&Servlet web相关概念回顾 web服务器软件: Servlet: server applet IDEA与tomcat的相关配置 Servlet: ...

  3. 1、JAVA web学习笔记

    以下内容是在学习某机构视频过程中记录的笔记,不准确的地方请大家评论指正. JavaWeb是使用Java语言开发基于互联网的项目. 资源分类有两类: 静态资源: 使用静态网页开发技术发布的资源. 特点: ...

  4. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  5. Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用

    问题:Jenkins 2.16.3默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的. 如何设置才能让出来呢? 打开&quo ...

  6. Java Web项目结构

    Java Web项目结构(一般) 1.Java src 2.JRE System Library 3.Java EE 6 Libraries 4.Web App Libraries 5.WebRoot ...

  7. Java Web 中的一些问题

    http://localhost:8080/struts2demo/online/userLogin.jsp 请求模式 :// 主机名名称(或者服务器名称) : 端口 / Servlet容器的名称(通 ...

  8. java web ubuntu_Ubuntu部署Java web项目

    登录服务器和给服务器传输文件,使用的工具是Xshell Xftp Mysql 安装mysql 输入:sudo apt-get update                     更新软件列表 输入: ...

  9. JAVA Web项目中所出现错误及解决方式合集(不断更新中)

    JAVA Web项目中所出现错误及解决方式合集 前言 一.几个或许会用到的软件下载官网 二.Eclipse的[preferences]下没有[sever]选项 三.Tomcat的安装路径找不到 四.T ...

  10. 使用Netbeans创建java Web项目

     使用Netbeans创建java Web项目 需要先搭建JDK参考: Java开发环境的搭建以及使用eclipse创建项目 Linux环境安装卸载JDK 1.安装Tomcat 去官网下载最新的T ...

最新文章

  1. 使用docker安装Mongodb
  2. Docker 6岁啦!多场线下 Party 即将来袭!
  3. 如何进行 Vue.js 框架的安装?
  4. PDF编辑器Acrobat Pro DC 2022 for Mac
  5. 524.通过删除字母匹配到字典里最长的单词(力扣leetcode) 博主可答疑该问题
  6. ubuntu装指定分区_安装Ubuntu时如何手动指定分区(高级分区)
  7. 水电缴费系统php源码_水电缴费管理系统(示例代码)
  8. VIJOS P1540 月亮之眼
  9. 用HTML写一首绝句古诗,《绝句二首》_杜甫的诗词_诗词名句网
  10. 魔方教程--很多教程都不对,整理并实践了一下
  11. 工程部署: 低算力平台模型性能的优化
  12. 物联网控制APP入门专题(五)---使用android studio直接编写物联网控制APP
  13. 上市公司融资需要哪些条件
  14. 笔记本 触摸板无法使用 解决办法
  15. 运行时异常和受检查异常的区别
  16. vue中created、mounted、activated的区别
  17. MATLAB/Simulink封装子模块图片显示和参数输出设置问题
  18. YX2811景观装鉓驱动IC
  19. 解锁oracle中的scott用户,Oracle 解锁scott用户
  20. Python常见加密方式总结和实现

热门文章

  1. Java Web 前端到后台常用框架介绍
  2. mac idea jrebel 激活
  3. c#如何在FTP服务器上下载文件夹及子文件夹中的文件
  4. Opencv系列1_opencv对单张DCM文件的读取并显示
  5. 怎么不带卡、刷手机进出图书馆---手机NFC
  6. 将CCT色温转换成RGB
  7. Android硬件加速
  8. SQL SERVER 资源性能监控-资源监视器
  9. 冒泡排序代码实现与详解
  10. mysql like 匹配排序,MySQL 基于like的模糊查询 并根据查询的匹配度排序