JSP:MVC

news2024/11/19 6:41:30

一个好的Web应用: 功能完善、易于实现和维护易于扩展等的体系结构

一个Web应用通常分为两个部分

1. 由界面设计人员完成的表示层(主要做网页界面设计)

2. 由程序设计人员实现的行为层(主要完成本Web应用的各种功能)

Web开发的两种常用模式

Web开发的两

Model1 纯JSP或JSP+javabean

适用于小型的Web应用

模型1可以分为两种方式

1. 完全使用JSP页面

优点:简单,所见即所得,容易实现

缺点:访问数据库的代码需要写在JSP页面中,如果数据库发生变化JSP页面需要重写

2.使用JSP+JavaBean

优点数据访问代码和JSP页面分离,数据访问代码重用性好

缺点系统复杂时,JSP页面中仍会包含大量脚本代码,代码开发和维护困难

Model2 MVC模式

该模型是一种将应用分解成三个独立部分的通用模型。

这三个部分分别是:
模型(Model) 描述系统的数据
视图(view) 数据的显示,包括图形、文本和文件输出等;
控制器(Controller) 获取系统的输入,控制系统的执行;
MVC 是 Model-View-Controller 的缩写
Model代表的是应用程序的商业逻辑 (通过 JavaBean EJB 等组件实现)
View提供可交互的客户界面 ,向客户显示模型数据(使用 JSP 来输出 HTML );
Controller响应客户的请求 ,根据客户的请求操纵模型,并把模型的响应结果由视图展现给客户 通常是 Servlet ;
MVC好处
各司其职,互不干涉
在MVC 模式中,三个层各司其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。
有利于开发中的分工
在MVC 模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的 JSP ,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。
有利于组件的重用
分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面。
MVC 有助于把应用分离成合理的组件,以方便开发
MVC(Servlet、JSP、JavaBean相结合)
Servlet扮演控制者的角色,接受客户请求 ,创建 JavaBean JavaBean 执行业务逻辑 ,向 Servlet 返回结果。 Servlet 将结果交给 JSP 页面 ,由 JSP 页面生成 HTML 向客户返回结果
 MVC 模式的核心思想是有效地组合“视图”、“模型”和“控制器”。
掌握该模式对于设计合理的 Web 应用以及学习使用某些流行的 Web 框架,如 Hibernate Spring Struts等,都有着十分重要的意义。
MVC 是一种通过三个不同部分构造一个软件或组件的理想办法:
模型( Model —— 用于存储数据的对象。
视图( View —— 为模型提供数据显示的对象。
控制器( Controller ——负责具体的业务逻辑操作,即控制器根据视图提出的要求对数据做出处理,并将有关结果存储到模型中,同时负责让模型和视图进行必要的交互,当模型中的数据变化时,让视图更新显示。
JSP 技术中,“视图”、“模型”和“控制器”的具体实现如下:
模型( Model ):  一个或多个 JavaBean 对象,用于存储数据, JavaBean 主要提供简单的 setXXX () 方法和 getXXX () 方法,在这些方法中不涉及对数据的具体处理细节。
视图( View ):  一个或多个 JSP 页面,为模型提供数据显示, JSP 页面主要使用 HTML 标记和 JavaBean 标记来显示数据
控制器( Controller 一个或多个 Servlet 对象,根据视图提交的要求进行数据处理操作,并将有关的结果存储到 JavaBean 中,然后 Servlet 使用重定向方式请求视图中的某个 JSP 页面更新显示。
JSP+Javabean 模式中,由 JSP 页面通过使用 useBean 标记:
< jsp:useBean id=" 名字 " class=" 创建 bean 的类 " scope=" 生命周期 "/> 创建 Javabean
  JSP 中的 MVC 模式中,也可以由控制器 servet 创建 Javabean ,并将有关数据存储到所创建的 Javabean 中,然后 servlet 请求某个 JSP 页面使用 Javabean getProperty 动作标记:
< jsp:getProperty name= " 名字 " property="bean 的属性 "/> 显示 Javabean 的中的数据。
JSP 中的 MVC 模式中,非常重要的手段是由 servlet 负责用构造方法创建 Javabean ,因此允许创建 Javabean 的类可以有带参数的构造方法。
JSP 中的 MVC 模式中, servet 创建的 Javabean 也涉及到生命周期 ( 有效期限 ) ,生命周期分为 request session application 。以下假设创建 Javabean 的类的名字是 BeanClass ,该类的包名为 user.yourbean

request周期的Javabean

1. Javabean的创建
 servlet 负责创建 bean 。那么创建生命周期为 request bean 的步骤如下:
1 )用 BeanClass 类的某个构造方法创建 bean 对象
例如: BeanClass bean=new BeanClass ();
2 )将所创建的 bean 对象存放到 HttpSerletRequest 对象 request 中,并指定查找该 bean 的关键字,该步骤决定了 bean 的生命周期为 request
例如:
request.setAttribute (" keyWord ",bean);
执行上述操作,就会把 bean 存放到 Tomcat 引擎管理的内置对象 pageContext 中,该 bean 被指定的 id " keyWord " ,生命周期是   PageContext.REQUEST_SCOPE request 。  
2   视图更新
servlet 请求一个 JSP 页面,比如 show.jsp 的代码如下:
RequestDispatcher dispatcher= request.getRequestDispatcher (" show.jsp ");
dispatcher.forward ( request,response );
servlet 所请求的 JSP 页面可以使用如下标记获得 servlet 所创建的 bean 的引用( type 属性使得该 JSP 页面不负责创建 bean
< jsp:useBean id=" keyWord " type=" user.yourbean.BeanClass " scope="request"/>
该标记中的 id servlet 所创建的 bean 索引关键字。然后 JSP 页面使用 < jsp:getProperty name=" keyWord " property="bean 的变量 "/> 标记显示 bean 中的数据。如果上述代码执行成功,用户就看到了 show.jsp 页面的执行效果。
特别注意 : 如果 servlet 所请求的 JSP 页面 , 使用如下标记获得 servlet 所创建的 bean 的引用 ( 注意没有用 type 属性而是用 class 属性 )
< jsp:useBean id=" keyWord " class=" user.yourbean .BeanClass " scope="request"/>
该标记中的 id servlet 所创建的 bean 索引关键字。那么即使 servlet 所请求的 JSP 页面事先已经有了 id " keyWord " scope "request" bean ,那么这个 bean 也会被 servlet 所创建的 bean 替换。
原因是 servlet 所请求的 JSP 页面会被刷新,就会根据当前页面使用的 < jsp:useBean id=" keyWord " class=" user.yourbean.BeanClass " scope="request"/> 标记到 Tomcat 引擎管理的内置对象 PageContext 中寻找 id " keyWord " ,生命周期是 request ,而该 bean 已经被 servlet 更新了。

session周期的Javabean

1.Javabean的创建

servet创建生命周期为sessionbean的步骤如下:

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_SCOPEsession)。  

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中的数据,该标记中的idservlet所创建的bean索引关键字。

对于生命周期为sessionbean,如果servlet希望某个JSP显示其中的数据,可以使用RequestDispatcher对象向该JSP页面发出请求,也可以使用HttpServletResponse类中的重定向方法(sendRedirect)。

show.jsp页面使用如下标记获得servlet所创建的bean的引用(注意没有用type属性而是用class属性)<jsp:useBean id="keyWord" class="user.yourbean.BeanClass" scope="session"/>该标记中的idservlet所创建的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

1Javabean的创建

servet创建生命周期为applicationbean的步骤如下:

1BeanClass类的某个构造方法创建bean对象,例如:

BeanClass bean=new BeanClass();

2servlet使用getServletContext()方法返回服务器的ServletContext内置对象的引用,将所创建的bean对象存放到服务器这个ServletContext内置对象中,并指定查找该bean的关键字,该步骤决定了bean的生命周期为application,例如:getServletContext().setAttribute("keyWord",bean);

上述操作,就会把bean存放到Tomcat引擎管理的内置对象pageContext中,该bean被指定的id"keyWord",有效期限是(生命周期)PageContext.APPLICATION_SCOPEapplication 

2   视图更新

servlet创建创建生命周期为applicationbean后,只要Web应用程序不结束,该bean就一直存在。一个用户在访问Web服务目录的各个JSP中都可以使用<jsp:useBean id="keyWord" type="user.yourbean.BeanClass" scope="application"/>  标记获得servlet所创建的bean的引用,然后使用<jsp:getProperty name="keyWord" property="bean的变量"/>标记显示该Javabean中的数据,该标记中的idservlet所创建的bean索引关键字。

 对于生命周期为applicationbean,如果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"/>该标记中的idservlet所创建的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更新了

JavabeanServlet与配置文件

Javabean类的包名均为mybean.dataServlet类的包名均为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

5web.xml文件

编写web.xml文件,并保存到Web服务目录的WEB-INF子目录中,即ch9\WEB-INF

MVC模式与注册登录    大部分Web应用都会涉及到注册与登录模块。本节使用MVC模式讲述怎样设计注册、登录模块。为ch9\WEB-INF中的web.xml文件添加如下子标记

JavabeanServlet管理

本节的Javabean类的包名均为mybean.dataServlet类的包名均为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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1252567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot网上超市管理系统

基于springboot网上超市管理系统 摘要 随着互联网的快速发展&#xff0c;电子商务行业迎来了蓬勃的发展&#xff0c;网上超市作为电子商务的一种形式&#xff0c;为消费者提供了便利的购物体验。本文基于Spring Boot框架&#xff0c;设计和实现了一个网上超市管理系统&#xff…

C语言—冒泡排序

方法一&#xff08;不使用函数解决&#xff09; #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int arr[]{15,52,23,0,5,6,45,8,9,10};int i0;int j0;for ( i 0; i < 9; i){int flag1; //flag判断数组元素是否有序&#xff0c;这里先假设…

动手学深度学习(四)---多层感知机

文章目录 一、理论知识1.感知机2.XOR问题3.多层感知机4.多层感知机的从零开始实现 【相关总结】1.torch.randn()2.torch.zeros_like() 一、理论知识 1.感知机 给定输入x,权重w&#xff0c;和偏移b,感知机输出&#xff1a; 2.XOR问题 感知机不能拟合XOR问题&#xff0c;他…

Javaweb之Vue组件库Element的详细解析

4 Vue组件库Element 4.1 Element介绍 不知道同学们还否记得我们之前讲解的前端开发模式MVVM&#xff0c;我们之前学习的vue是侧重于VM开发的&#xff0c;主要用于数据绑定到视图的&#xff0c;那么接下来我们学习的ElementUI就是一款侧重于V开发的前端框架&#xff0c;主要用…

辅助驾驶功能开发-系统方案篇-地平线超级驾驶解决方案介绍

01.产品方案 Horizon Matrix SuperDrive超级驾驶解决方案,助力汽车智能化步入人机共驾时代 SuperDrive超级驾驶解决方案,全面整合了自动驾驶、智能交互、云端大脑三大模块,形成完整的泛车载AI人工智能系统,帮助整车智能化提升到一个新的高度。该方案的核心硬件-车载中央计…

【LeetCode】挑战100天 Day15(热题+面试经典150题)

【LeetCode】挑战100天 Day15&#xff08;热题面试经典150题&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-172.1 题目2.2 题解 三、面试经典 150 题-173.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&…

基于python+Django+SVM算法模型的文本情感识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介1. 简介2. 技术栈3. 系统架构4. 关键模块介绍5. 如何运行 二、功能三、系统四. 总结 一项目简介 # 基于 Python Django SVM 算法模型的文本情感识别系统介…

2023年最新IntelliJ IDEA下载安装以及Java环境搭建教程(含Java入门教程)

文章目录 写在前面Java简介IntelliJ IDEA简介IntelliJ IDEA下载安装JDK简介JDK下载教程 Java入门IntelliJ IDEA使用教程 写在后面 写在前面 2023年最新IntelliJ IDEA下载安装教程&#xff0c;内含JAVA环境搭建教程&#xff0c;一起来看看吧&#xff01; Java简介 Java是一门…

【数据库】聊聊一颗B+树 可以存储多少数据

我们知道数据库使用的数据结构是B树&#xff0c;但是B树可以存储多少数据呢&#xff0c;在面试中也是经常会问的问题&#xff0c;所以我们从根上理解这个问题。 操作系统层面 数据都是存储在磁盘中的&#xff0c;而磁盘中的数据都是以最新单位扇区进行分割。一个扇区的大小是…

C++初阶(十二)string的模拟实现

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、string类的模拟实现1、构造、拷贝构造、赋值运算符重载以及析构函数2、迭代器类3、增删查…

3.1 CPU内部结构与时钟与指令

CPU内部结构 总线一些自定义部件总线图内存指令执行流程:取指令,译码,执行pc做的事内存地址寄存器内存缓存寄存器指令寄存器,译码第一步指令寄存器传递地址到内存地址寄存器指令MOV_A的过程(译码第二步)第一条指令执行完毕第三条指令的执行第四条指令第四条指令不同的执行流程…

java容器

cow容器 copy on write 又被成为写时复制(读写分离)容器, 原理就是: 如果向一个数组中添加元素的时候,会将原来的数组复制一份为新的数组,原来的数组不会动,负责读处理,然后在新的数组中进行添加操作,添加完后,将新数组的地址,赋值给原来数组的地址 这种设计的好处是什么呢?…

x86 汇编语言介绍001

1&#xff0c;搭建编程环境 1.1 NASM 基本信息 示例使用的汇编器为 nasm 主页&#xff1a; https://www.nasm.us/https://www.nasm.us/ 下载最新的稳定版源代码 wget https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/nasm-2.16.01.tar.gz 1.2解压并编译安装 tar zx…

基于时隙的多重冗余流指纹模型

文章信息 论文题目&#xff1a;基于时隙的多重冗余流指纹模型 期刊&#xff08;会议&#xff09;&#xff1a;网络与信息安全学报 时间&#xff1a;2023 级别&#xff1a;CCF C 概述 为确保内生网络流量安全可信&#xff0c;本文在研究流水印及其扩展的流指纹机制的基础上&a…

鸿蒙(HarmonyOS)应用开发——装饰器

简介 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript&#xff08;简称TS&#xff09;的基础上&#xff0c;扩展了声明式UI、状态管理等相应的能力&#xff0c;让开发者可以以更简洁、更自然的方式开发高性能应用。TS是JavaScript&#xff08;简称JS&#xff09;的超…

FIB表与快速转发表工作原理

在一张路由表中&#xff0c;当存在多个路由项可同时匹配目的IP地址时&#xff0c;路由查找进程会选择掩码最长的路由项用于转发&#xff0c;即最长匹配原则。因为掩码越长&#xff0c;所处的网段范围就越小&#xff0c;网段的范围越小&#xff0c;就越能快速的定位到PC机的具体…

2.Linux系统及常用命令

目录 一、Linux文件系统和目录 1.1 Linux文件系统 1.2Linux主要目录 二、Linux远程连接 2.1前置条件 2.2 具体远程操作 三、Linux的常用命令 3.1 Linux命令的格式 3.2 Linux命令的帮助信息查看 3.3 Linux文件操作常用命令 命令中快捷键 以管理员权限执行命令 3.3.1…

[网鼎杯 2020 青龙组]singal

一道VM题目 可以看到长度是15 跟踪调用read函数的函数 分析一下switch中每个指令的含义、 在scanf下面打断点 在关键跳转处下断点 打开Ponce插件 GitHub - illera88/Ponce: IDA 2016 plugin contest winner! Symbolic Execution just one-click away! 然后开始动调 输入15个…

【C4D如何将多个选集设置为一个选集】

操作 首先&#xff0c;单击一个选集&#xff0c;将选集中的面高亮显示 接着&#xff0c;按着shift&#xff0c;点击另一个选集&#xff0c;点击右侧命令栏中的选择&#xff0c;即可多选另外的面选集&#xff0c;更多的面选集是同样的操作&#xff0c;按着SHIFT选择新的选集即…

计算机中由于找不到vcruntime140.dll无法继续执行代码无法打开软件怎么解决分享

关于如何解决vcruntime140.dll无法继续执行代码的6个教程。在这个科技日新月异的时代&#xff0c;电脑已经是我们日常和工作中必不可少的电子产品&#xff0c;然后我们在使用过程中经常会遇到不一样的问题&#xff0c;比如vcruntime140.dll文件丢失&#xff0c;那么vcruntime14…