JSP:MVC
一个好的Web应用: 功能完善、易于实现和维护易于扩展等的体系结构
一个Web应用通常分为两个部分:
1. 由界面设计人员完成的表示层(主要做网页界面设计)
2. 由程序设计人员实现的行为层(主要完成本Web应用的各种功能)
Web开发的两种常用模式
Web开发的两
Model1 纯JSP或JSP+javabean
适用于小型的Web应用
模型1可以分为两种方式:
优点:简单,所见即所得,容易实现
缺点:访问数据库的代码需要写在JSP页面中,如果数据库发生变化,JSP页面需要重写
2.使用JSP+JavaBean
优点:数据访问代码和JSP页面分离,数据访问代码重用性好
缺点:系统复杂时,JSP页面中仍会包含大量脚本代码,代码开发和维护困难
Model2 MVC模式
该模型是一种将应用分解成三个独立部分的通用模型。
request周期的Javabean
session周期的Javabean
1.Javabean的创建
servet创建生命周期为session的bean的步骤如下:
(1)用BeanClass类的某个构造方法创建bean对象,例如:
BeanClass bean=new BeanClass();
(2)将所创建的bean对象存放到HttpSerletSession对象:session中,并指定查找该bean的关键字,该步骤决定了bean的生命周期为session。例如:
HttpSession session=request.getSession(true);
session.setAttribute("keyWord",bean);
内置对象执行上述操作,就会把bean存放到Tomcat引擎管理的内置对象pageContext中,该bean被指定的id是"keyWord",生命周期是PageContext.SESSION_SCOPE(session)。
2 视图更新
servelt创建bean, bean的生命周期为session,只要用户的session没有消失,该bean就一直存在,一个用户在访问Web服务目录的各个JSP中都可以使用<jsp:useBean id="keyWord" type="usern.yourbean.BeanClass" scope="session"/> 标记获得servlet所创建的bean的引用,然后使用<jsp:getProperty name="keyWord" property="bean的变量"/>标记显示该bean中的数据,该标记中的id是servlet所创建的bean索引关键字。
对于生命周期为session的bean,如果servlet希望某个JSP显示其中的数据,可以使用RequestDispatcher对象向该JSP页面发出请求,也可以使用HttpServletResponse类中的重定向方法(sendRedirect)。
show.jsp页面使用如下标记获得servlet所创建的bean的引用(注意没有用type属性而是用class属性):<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="session"/>该标记中的id是servlet所创建的bean索引关键字。那么即使servlet所请求的JSP页面或其他页面事先已经有了id是"keyWord",scope是" session "的bean,那么这个bean也会被servlet所创建的bean替换。
原因是,servlet所请求的JSP页面或其他页面被刷新时,就会根据当前页面使用的<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope=" session "/>标记到Tomcat引擎管理的内置对象PageContext中寻找id是"keyWord",生命周期是session,而该bean已经被servlet更新了。
application周期的Javabean
1.Javabean的创建
servet创建生命周期为application的bean的步骤如下:
(1)用BeanClass类的某个构造方法创建bean对象,例如:
BeanClass bean=new BeanClass();
(2)servlet使用getServletContext()方法返回服务器的ServletContext内置对象的引用,将所创建的bean对象存放到服务器这个ServletContext内置对象中,并指定查找该bean的关键字,该步骤决定了bean的生命周期为application,例如:getServletContext().setAttribute("keyWord",bean);
上述操作,就会把bean存放到Tomcat引擎管理的内置对象pageContext中,该bean被指定的id是"keyWord",有效期限是(生命周期)PageContext.APPLICATION_SCOPE(application)。
2 视图更新
当servlet创建创建生命周期为application的bean后,只要Web应用程序不结束,该bean就一直存在。一个用户在访问Web服务目录的各个JSP中都可以使用<jsp:useBean id="keyWord" type="user.yourbean.BeanClass" scope="application"/> 标记获得servlet所创建的bean的引用,然后使用<jsp:getProperty name="keyWord" property="bean的变量"/>标记显示该Javabean中的数据,该标记中的id是servlet所创建的bean索引关键字。
对于生命周期为application的bean,如果servlet希望某个JSP显示其中的数据,可以使用RequestDispatcher对象向该JSP页面发出请求,也可以使用HttpServletResponse类中的重定向方法(sendRedirect)。
注意:所有用户在同一个Web服务目录中的application生命周期的bean是相同的,即占有相同的内存空间。另外,如果servlet所请求的JSP页面,比如show.jsp页面,使用如下标记获得servlet所创建的bean的引用(注意没有用type属性而是用class属性):<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="application"/>该标记中的id是servlet所创建的bean索引关键字。那么即使servlet所请求的JSP页面或其他事先已经有了id是"keyWord",scope是"application"的bean,那么这个bean也会被servlet所创建的bean替换。
原因是,servlet所请求的JSP页面或其他页面被刷新时,就会根据当前页面使用的:<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="application"/>标记到Tomcat引擎管理的内置对象PageContext中寻找id是"keyWord",生命周期是application,而该bean已经被servlet更新了
Javabean和Servlet与配置文件
Javabean类的包名均为mybean.data;Servlet类的包名均为myservlet.control。
1.保存Javabean类和Servlet类的源文件
D:\ mybean\data 和 D:\myservlet\control
2.编译Javabean类 D:\javac mybean\data\Javabean的源文件
3.编译Servlet类 D:\ javac myservlet\control\servlet的源文件
4.将类的字节码文件保存到服务器 ch9\WEB-INF\classes\mybean\data 和ch9\WEB-INF\classes\myservlet\control
5.web.xml文件
编写web.xml文件,并保存到Web服务目录的WEB-INF子目录中,即ch9\WEB-INF中
MVC模式与注册登录 大部分Web应用都会涉及到注册与登录模块。本节使用MVC模式讲述怎样设计注册、登录模块。为ch9\WEB-INF中的web.xml文件添加如下子标记
Javabean与Servlet管理
本节的Javabean类的包名均为mybean.data;Servlet类的包名均为myservlet.control。
1.保存Javabean类和Servlet类的源文件 D:\ mybean\data 和 D:\myservlet\control
2.编译Javabean类 D:> javac mybean\data\Javabean的源文件
3.编译Servlet类 D:> javac myservlet\control\servlet的源文件
4.将类的字节码文件保存到服务器 ch9\WEB-INF\classes\mybean\data 和
ch9\WEB-INF\classes\myservlet\control
配置文件管理
本节的Servlet类的包名均为myservlet.control,需要配置Web服务目录的web.xml文件,即将下面的web.xml文件保存到Tomcat安装目录的Web服务目录ch9中。根据本书使用的Tomcat安装目录及Web服务目录,需要将web.xml文件保存到D:\apache-tomcat-8.0.3\webapps\ch9\WEB-INF目录中。
web.xml
<servlet>
<servlet-name>register</servlet-name>
<servlet-class>myservlet.control.HandleRegister</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>register</servlet-name>
<url-pattern>/helpRegister</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>myservlet.control.HandleLogin</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/helpLogin</url-pattern>
</servlet-mapping>
数据库设计与连接
1 创建一个数据库 、表 使用MySQL建立一个数据库student,该库共有一个user表 。
user表的用途:存储用户的注册信息。即会员的注册信息存入user表中,user表的主键是logname,各个字段值的说明如下:
logname :存储注册的用户名(属性是字符型,主键)
password :存储密码(属性是字符型)
email :存储email(属性是字符型
2 数据库连接
避免操作数据库出现中文乱码,需要使用
Connection getConnection(java.lang.String) 方法建立连接,连接中的代码是(用户是root,其密码是空)
String url = "jdbc:mysql://127.0.0.1/student?"+"user=root&password=&characterEncoding=gb2312";
Connection con = DriverManager.getConnection(uri);
相关文章:
JSP:MVC
一个好的Web应用: 功能完善、易于实现和维护易于扩展等的体系结构 一个Web应用通常分为两个部分: 1. 由界面设计人员完成的表示层(主要做网页界面设计) 2. 由程序设计人员实现的行为层(主要完成本Web应用的各种功能…...
微服务-京东秒杀
1 项目介绍 技术栈 后端 SpringCloud 中Netflix 五大组件: EurekaRibbonHystrixOpenfeignZuul SpringBootSpringSpringMVCMyBatis 数据库 MySQLRedis 前端 html5cssjsjQuery 消息中间件 RabbitMQ 2 项目搭建 项目分析 后端 shop-parent [pom] (商…...
「MACOS限定」 如何将文件上传到GitHub仓库
介绍 本期讲解:如何在苹果电脑上上传文件到github远程仓库 注:写的很详细 方便我的朋友可以看懂操作步骤 第一步 在电脑上创建一个新目录(文件夹) 注:创建GitHub账号、新建github仓库、git下载的步骤这里就不过多赘…...
python opencv 边缘检测(sobel、沙尔算子、拉普拉斯算子、Canny)
python opencv 边缘检测(sobel、沙尔算子、拉普拉斯算子、Canny) 这次实验,我们分别使用opencv 的 sobel算子、沙尔算子、拉普拉斯算子三种算子取进行边缘检测,然后后面又使用了Canny算法进行边缘检测。 直接看代码,代…...
【Unity入门】鼠标输入和键盘输入
Unity的Input类提供了许多监听用户输入的方法,比如我们常见的鼠标,键盘,手柄等。我们可以用Input类的接口来获取用户的输入信息 一、监听鼠标输入 GetMouseButtonUp 、GetMouseButtonDown、GetMouseButton input.GetMouseButtonDown和 inp…...
芯知识 | MP3语音芯片IC的优势特征及其在现代科技应用中的价值
随着科技的飞速发展,MP3语音芯片作为一种高度集成的音频处理解决方案,在现代电子产品中发挥着越来越重要的作用。本文将分析MP3语音芯片的优势特征,并探讨其在各个领域的应用价值。 一、MP3语音芯片的优势特征 MP3语音芯片具有多种显著的优…...
C语言进阶之路-基本数据小怪篇
目录 一、学习目标: 二、数据基本类型 整型 浮点型 / 实型 字符 字符串 布尔型数据 三、重要的杂七杂八知识点 常量与变量 标准输入 sizeof运算符: 类型转换 数据类型的本质 整型数据尺寸 可移植性整型 拿下第一个C语言程序 总结 一、学…...
【OpenCV实现图像:使用OpenCV生成拼图效果】
文章目录 概要通用配置不考虑间隔代码实现考虑间隔代码实现小结 概要 概要: 拼图效果是一种将图像切割为相邻正方形并重新排列的艺术效果。在生成拼图效果时,可以考虑不同的模式,包括是否考虑间隔和如何处理不能整除的部分。 不考虑间隔&a…...
【AOSP】生成签名文件release key,通过Android源码对apk进行签名
简介 现在apk都需要签名,Flutter做的项目官方规定编译apk必须签名。 签名的好处: 应用来源验证: 应用签名允许Android系统验证应用的来源。每个应用都使用开发者的私钥进行签名,而应用的签名信息包含在应用的APK文件中。当用户尝…...
深度学习之基于Tensorflow银行卡号码识别系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介银行卡号码识别的步骤TensorFlow的优势 二、功能三、系统四. 总结 一项目简介 # 深度学习基于TensorFlow的银行卡号码识别介绍 深度学习在图像识别领域取得…...
第95步 深度学习图像目标检测:Faster R-CNN建模
基于WIN10的64位系统演示 一、写在前面 本期开始,我们学习深度学习图像目标检测系列。 深度学习图像目标检测是计算机视觉领域的一个重要子领域,它的核心目标是利用深度学习模型来识别并定位图像中的特定目标。这些目标可以是物体、人、动物或其他可识…...
设计模式—里氏替换原则
1.概念 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影…...
PyTorch包
进入PyTorch的官网: pytorch GitHub 点击GitHub: 进入PyTorch的主目录: 进入Vision reference: detection: 这就是我们在训练过程中会使用到的文件了:...
22、什么是中间件和权限拦截中间件实操
新建中间件 middleware\auth.js // 定义权限判断中间件,中间件的第一个参数是context export default ({store, redirect}) > {console.log("中间件被调用")// if (!store || !store.state.userinfo) {// redirect("/")// } }页面使用…...
vue.config.js
proxy代理 proxy选项用于配置开发服务器的代理。下面是proxy的全部属性: 1. target (String | Object | Function): 指定要代理的目标主机的URL。可以是一个字符串,也可以是一个对象或函数,用于动态返回目标URL。 2. forward (Boolean): 控…...
80C51单片机----数据传送类指令
目录 一.一般传送指令,即mov指令 1.16位传送(仅1条) 2.8位传送 (1)目的字节为A(累加器) (2)目的字节为Rn(工作寄存器) (3)目的字节为direct…...
【Golang】使用泛型对数组进行去重
背景: 要求写一个方法,返回去重后的数组。数组的类型可能是int64,也可能是string,或是其他类型。 如果区分类型的话,每增加一个新的类型都需要重新写一个方法。 示例代码: //对int64数组进行去重 func DeD…...
Ps:画笔工具的基本操作
画笔工具 Brush Tool是 Ps 中最常用的工具,广泛地用于绘画与修饰工作。 虽然多数操作可在画笔工具的工具选项栏中选择执行,但是如果能记住相应的快捷键可大大提高工作效率。 熟练掌握画笔工具的操作对于使用其他工具也非常有益,因为 Ps 中许多…...
【Apache Doris】一键实现万表MySQL整库同步 | 快速体验
【Apache Doris】一键实现万表MySQL整库同步 | 快速体验) 一、 环境信息1.1 硬件信息1.2 软件信息 二、 流程介绍三、 前提概要3.1 安装部署3.2 JAR包准备3.2.1 数据源3.2.2 目标源 3.3 脚本模版 四、快速体验五、常见问题5.1 Mysql通信异常5.2 MySQL无Key同步异常5…...
35.逻辑运算符
目录 一.什么是逻辑运算符 二.C语言中的逻辑运算符 三.逻辑表达式 三.视频教程 一.什么是逻辑运算符 同时对俩个或者俩个以上的表达式进行判断的运算符叫做逻辑运算符。 举例:比如去网吧上网,只有年满十八周岁并且带身份证才可以上网。在C语言中如果…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
