`

Java Web应用概述

阅读更多
Java Web应用的核心技术是Java Server Page和Servlet。开发一个完整的Java Web应用

1. JAVA Web应用的结构



2. Servlet

Servlet在Web应用中担任重要角色。Servlet运行于Servlet容器中,可以被Servlet容器动态加载,来扩展服务器的功能,并提供特定的服务。Servlet按照请求/响应的方式工作。在Struts和Tapestry框架中,控制器组件就是由Servlet来构成的。

当用户请求访问某个Servlet时,Servlet容器将创建一个ServletRequest对象和ServletResponse对象。在ServletRequest对象中封装了用户请求信息,然后Servlet容器把ServletRequest对象和ServletResponse对象传给用户所请求的Servlet。Servlet把响应结果写入ServletResponse中,然后由Servlet容器把响应结果传给用户。

Serlet容器响应用户请求的过程:



在Java Servlet API中有以下几个比较重要的类,它们决定了Web应用的请求/响应方式及各种共享数据的存放地点:
HttpServletRequest:  Servlet容器把HTTP请求信息包含在HttpServletRequest对象中,Servlet组件从request对象中读取用户的请求数据。此外,HttpServletRequest可以存放request范围内的共享数据。

HttpServletResponse:用户生成HTTP响应结果。

HttpSession : Servlet容器为每个HTTP会话创建一个HttpSession实例,HttpSession可以存放session范围的共享数据。

ServletContext: Servlet容器为每个Web应用创建一个ServletCntext实例,ServletCntext可以存放application范围的共享数据。

3. JSP

在传统的HTML文件中加入Java程序片段和JSP标签,就构成了JSP网页。
当JSP容器接收到Web用户的一个JSP文件请求时,它对JSP文件进行语法分析并生成Java Servlet源文件,然后对其编译。一般情况下。Servlet源文件的生成和编译仅在初次调用JSP时发生。如果原始的JSP文件被更新,JSP容器将检测所做的更新,在执行它之前重新生成Servlet并进行编译。

JSP容器初次执行JSP的过程:




4. 共享数据在Web应用中的范围

共享数据有4中存在范围。
Page:共享数据的有效范围是用户请求访问的当前页面。

Request:共享数据的有效范围为“用户请求访问的当前Web组件,以及和当前Web组件共享同一个用户请求的其他Web组件。”如果用户请求访问的是JSP网页,那么该JSP网页的<%@include>指令以及<forward>标记所包含的其他JSP文件也能访问共享数据。Request范围内的共享数据实际上存放在HttpServletRequest对象中。

Session:共享数据存在于整个HTTP会话的生存周期内,同一个HTTP会话中的Web组件共享它。Session范围内的共享数据实际上是存放在HttpSession对象中。

Application:共享数据存在月整个Web应用的生命周期内,Web应用中的所有Web组件都能共享它,共享数据实际上存放在ServletCntext对象中。

共享数据在Web应用中的范围:




当客户第一次访问Web应用中支持会话的某个网页时们就会开始一个新的HTTP会话,Servlet容器为这个会话创建一个HttpSession对象。接下来,当客户浏览这个Web应用的不同网页时,始终处于同一个会话中。会话拥有特定的生命周期。在以下情况中,会话将结束生命周期,Servlet容器会将HTTP会话所占有的资源释放掉:

客户端关闭浏览器
会话过期
服务器端调用了HttpSession的invalidate()方法

5. JavaBean组件及其在Web应用中的范围

JavaBean是一种符合特定规范的JAVA 对象。在JAVABean中定义了一系列的属性,并提供了访问和设置这些属性的公用方法。JavaBean可以作为共享数据,存放在page,request,session,application范围内。在JSP文件中,可以通过专门的标签来定义和范围JavaBean。如
<jsp:useBean id="calendar" scope="page/request/session/application" class="employee.Calendar" />
<h2>
Calendar of <jsp:getProperty name="calendar" property="username" />
</h2>

6. EJB组件

EJB组件是基于标准分布式对象技术,CORBA和RMI的服务端JAVA组件,EJB组件和JavaBean组件一样,都用于实现企业应用的业务逻辑,它们的根本区别在于,EJB组件总是分布式的,EJB组件运行于EJB服务器中,而JavaBean组件可以和Servlet或JSP运行于同一JAVA虚拟机中。

7. Web组件的三种关联关系

请求转发
URL重定向
包含

7.1. 请求转发

请求转发允许把请求转发给同一应用中的其他Web组件。这种技术通常用于Web应用控制层的Servlet流程控制器,它检查HTTP请求数据,并将请求转发到合适的目标组件,目标组件执行具体的请求处理操作,并生成响应结果。

一个Servlet把请求转发给另一个JSP组件的过程:




如果在Servlet组件转发请求给一个JSP组件,可以在Servlet的service()方法中执行以下代码:
RequestDispatcher rd = request.getRequestDispatcher(“hello.jsp”);
Rd.forward(request.response);

如果在JSP页面中,可以使用<jsp:forward>标签来转发请求,例如:
<jsp:forward page=”hello.jsp”/>

对于请求转发,转发的源组件和目标组件共享request范围内的数据。

7.2.  请求重定向

请求重定向类似请求转发,但是有一些重要区别:
Web组件可以将请求重定向到任一URL,而不进进是同一应用中的URL。
重定向的元组件和目标组件之间不共用同一个HttpServletRequest对象,因此不能共享request范围内的共享数据。

显示一个Servlet把请求重定向给另一个JSP组件的过程:




如果当前应用的Servlet组件要把请求转发给URL。可以在Servlet的service方法中执行:
response.sendRedirect(URL);

7.3. 包含

包含关系允许一个Web组件聚集来自同一个应用中的其他Web组件的输出数据,并使用被聚集的数据来创建响应结果。这种技术通常用于模板处理器,它可以控制网页的布局。模板中每个页面区域的内容都来自不同的URL,从而组成单个页面。

显示了一个Servlet包含另一个JSP组件的过程:




Servlet类使用javax.servlet.RequestDispatcher.include()方法包含其他的Web组件。
例如,如果当前饿Servlet组件包含了三个JSP文件:header.jsp,main.jsp和 footer.jsp,则在Servlet的service()方法中执行如下代码:
RequestDispatcher rd;
Rd=req.getRequestDispatcher(“/header.jsp”));
Rd.include(req,res);
Rd=req.getRequestDispatcher(“/main.jsp”));
Rd.include(req,res);
Rd=req.getRequestDispatcher(“/footer.jsp”));
Rd.include(req,res);

在JSP文件中,可以通过<include>指令来包含其他的Web资源,例如:
<%@ include file=”header.jsp”%>
<%@ include file=”main.jsp”%>
<%@ include file=”footer.jsp”%>
  • 大小: 35.2 KB
  • 大小: 10.3 KB
  • 大小: 17.1 KB
  • 大小: 12.7 KB
  • 大小: 12.2 KB
  • 大小: 12.4 KB
  • 大小: 13.2 KB
分享到:
评论
1 楼 paladin1988 2012-11-06  
不错不错。。

相关推荐

    的最全韩顺平php入门到精通全套笔记.doc )

    【PHP入门】 PHP(Hypertext Preprocessor)是一种广泛使用的开源服务器端脚本语言,尤其适用于Web开发,能够嵌入HTML中。本篇笔记基于韩顺平老师的讲解,全面覆盖了从基础到精通的PHP知识体系。 1. **HTML基础** HTML,即超文本标记语言,用于创建网页内容。它包括各种标签来定义网页结构,如`<html>`、`<head>`、`<body>`等。HTML与CSS结合使用,可以实现页面样式控制。HTML5作为最新版本,引入了更多增强功能,如离线存储、拖放功能和媒体元素等。运行HTML有两种方式:本地运行(直接通过浏览器打开文件)和远程访问(通过HTTP协议在服务器上运行)。 2. **动态网页技术** 动态网页能够根据用户输入或服务器状态变化实时更新内容。PHP作为动态网页开发的重要技术之一,具有跨平台、安全性高、效率好、成本低、易于学习和丰富的开源社区支持等优点。PHP可以连接多种数据库,如MySQL,并在PHP4、PHP5和PHP6(及后续版本)中逐。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    花生好坏缺陷识别数据集,7262张图片,支持yolov7格式的标注,识别准确率在95.7%

    花生好坏缺陷识别数据集,7262张图片,支持yolov7格式的标注,识别准确率在95.7% 两种标签: Good,Bad 花生好坏缺陷识别数据集,7262张图片,支持yolo,coco json,pasical voc xml格式的标注,识别准确率在95.7% 详情查看地址:https://backend.blog.csdn.net/article/details/144983881

    总务科(基建办)2024年工作总结.doc

    总务科(基建办)2024年工作总结.doc

    基于springboot+vue的相亲网站(Java毕业设计,附源码,部署教程).zip

    该项目包含完整的前后端代码、数据库脚本和相关工具,简单部署即可运行。功能完善、界面美观、操作简单,具有很高的实际应用价值,非常适合作为Java毕业设计或Java课程设计使用。 所有项目均经过严格调试,确保可运行!下载后即可快速部署和使用。 1 适用场景: 毕业设计 期末大作业 课程设计 2 项目特点: 代码完整:详细代码注释,适合新手学习和使用 功能强大:涵盖常见的核心功能,满足大部分课程设计需求 部署简单:有基础的人,只需按照教程操作,轻松完成本地或服务器部署 高质量代码:经过严格测试,确保无错误,稳定运行 3 技术栈和工具 前端:HTML + Vue.js 后端框架:Spring Boot 开发环境:IntelliJ IDEA 数据库:MySQL(建议使用 5.7 版本,更稳定) 数据库可视化工具:Navicat 部署环境:Tomcat(推荐 7.x 或 8.x 版本),Maven

    广东省高清卫星地图全图

    广东省高清卫星地图全图

    智能聊天机器人在电商客服领域的应用研究与开发毕业设计报告

    本文聚焦智能聊天机器人于电商客服领域的应用,开篇点明研究背景,剖析电商发展促使客服需求暴增,传统客服乏力,智能机器人应运而生。接着详述电商客服发展脉络、现存痛点,如高峰拥堵、知识滞后、服务同质化等。核心技术涵盖自然语言处理、机器学习、知识图谱,系统采用微服务架构,各模块分工协作。开发流程包括精细调研、多元数据采集、模型选型调优等。创新应用体现于售前精准导购、沉浸式营销,售中订单跟踪、答疑,售后问题处理与回访。经量化指标与用户调研评估成效显著,虽有挑战,但未来借助新技术有望重塑电商服务生态,助力企业与消费者双赢。

    基于springboot+vue的人口老龄化社区服务与管理平台(Java毕业设计,附源码,部署教程).zip

    该项目包含完整的前后端代码、数据库脚本和相关工具,简单部署即可运行。功能完善、界面美观、操作简单,具有很高的实际应用价值,非常适合作为Java毕业设计或Java课程设计使用。 所有项目均经过严格调试,确保可运行!下载后即可快速部署和使用。 1 适用场景: 毕业设计 期末大作业 课程设计 2 项目特点: 代码完整:详细代码注释,适合新手学习和使用 功能强大:涵盖常见的核心功能,满足大部分课程设计需求 部署简单:有基础的人,只需按照教程操作,轻松完成本地或服务器部署 高质量代码:经过严格测试,确保无错误,稳定运行 3 技术栈和工具 前端:HTML + Vue.js 后端框架:Spring Boot 开发环境:IntelliJ IDEA 数据库:MySQL(建议使用 5.7 版本,更稳定) 数据库可视化工具:Navicat 部署环境:Tomcat(推荐 7.x 或 8.x 版本),Maven

    eap2025010741566905-1-1.pdf

    eap2025010741566905-1-1.pdf

    双馈风机MATLAB simulink模型 多个模型打包发送

    双馈风机MATLAB simulink模型 多个模型打包发送

    小熊汉字笔顺学习软件 v2.0

    给小孩找的,看着还不错,分享出来~

    基于springboot+vue的美容院管理系统(Java毕业设计,附源码,部署教程).zip

    该项目包含完整的前后端代码、数据库脚本和相关工具,简单部署即可运行。功能完善、界面美观、操作简单,具有很高的实际应用价值,非常适合作为Java毕业设计或Java课程设计使用。 所有项目均经过严格调试,确保可运行!下载后即可快速部署和使用。 1 适用场景: 毕业设计 期末大作业 课程设计 2 项目特点: 代码完整:详细代码注释,适合新手学习和使用 功能强大:涵盖常见的核心功能,满足大部分课程设计需求 部署简单:有基础的人,只需按照教程操作,轻松完成本地或服务器部署 高质量代码:经过严格测试,确保无错误,稳定运行 3 技术栈和工具 前端:HTML + Vue.js 后端框架:Spring Boot 开发环境:IntelliJ IDEA 数据库:MySQL(建议使用 5.7 版本,更稳定) 数据库可视化工具:Navicat 部署环境:Tomcat(推荐 7.x 或 8.x 版本),Maven

    bcolz-1.2.1-cp38-cp38-win-amd64.whl.rar

    bcolz-1.2.1-cp38-cp38-win-amd64.whl.rar

    自动驾驶技术中域控制单元(DCU)的核心作用与发展前景

    内容概要:本文详尽阐述了自动驾驶技术中的域控制单元(DCU)及其重要性。首先介绍了ADAS(高级驾驶辅助系统)和AD(自动驾驶)的区别和发展现状。接着讨论了域控制单元作为高级ECU,在自动驾驶系统中扮演的重要角色,包括高性能计算、高效的数据处理能力和与其他子系统的紧密配合。文中详细解释了DCU的构成元素——收发器、SoC、MCU和电源管理等模块的工作原理和技术细节,同时也探讨了市场趋势和技术发展趋势,如高集成度、智能化、低功耗等方面。最后展望了DCU在未来域集中式EE架构下的广阔应用前景。 适用人群:从事汽车工程、自动驾驶技术和嵌入式软件开发的专业技术人员,以及对此领域感兴趣的科研工作者。 使用场景及目标:①帮助开发者深入了解自动驾驶系统组成尤其是DCU的设计理念和技术特征;②指导相关领域的研究者把握当前行业发展动态和技术前沿。 其他说明:本文不仅深入浅出地讲解了专业知识,而且引用了一些作者个人感悟的文字,增加了可读性和启发性。

    Java与Python编程语言特性、应用场景及其学习选择

    内容概要:文章主要介绍了Java和Python这两种流行的编程语言之间的区别和联系。首先详细讲述了Java的基本特性,包括跨平台性、面向对象编程、类型安全、自动化内存管理和多线程支持等特点,并概述了其在企业级开发中的广泛应用。接着深入探讨了Python的特点,指出它的简明语法、灵活性以及丰富的生态体系,特别提到了其在数据分析、人工智能等前沿领域的优势。文中还比较了两者的应用场景和技术实现方式的不同之处。最后为初学者提出了基于个人职业发展目标来选择编程语言的建议。 适合人群:对编程有兴趣的学生、编程新手以及想要转换编程方向的技术人员。 使用场景及目标:有助于读者理解两种编程语言各自的优劣,便于在实际工作中或者个人兴趣发展中做出明智的选择。 其他说明:通过对比讲解,不仅展示了两种编程语言的共同点,还强调了它们各自独特的优势所在。这有助于加深读者对其本质特征的认识,从而更好地应对不同类型的编程任务和挑战。

    Java 飞机订票系统实训报告

    Java 飞机订票系统实训报告,有数据库

    easy-interceptor修改请求头和响应头.zip

    easy-interceptor修改请求头和响应头.zip

    Python身份证识别系统源码(精准度非常高).zip

    Python身份证识别系统源码(精准度非常高).zip,个人大三大作业设计项目、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 Python身份证识别系统源码(精准度非常高).zipPython身份证识别系统源码(精准度非常高).zipPython身份证识别系统源码(精准度非常高).zipPython身份证识别系统源码(精准度非常高).zipPython身份证识别系统源码(精准度非常高).zipPython身份证识别系统源码(精准度非常高).zipPython身份证识别系统源码(精准度非常高).zipPython身份证识别系统源码(精准度非常高).zipPython身份证识别系统源码(精准度非常高).zipPython身份证识别系统源码(精准度非常高).zipPython身份证识别系统源码(精准度非常高).zipPython身份证识别系统源码(精准度非常高).zipPython身份证识别系统源码(精准度非常高).zipPython身份证识别系

    【电磁】基于matlab微带线中的电势和场分布【含Matlab源码 10949期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    一个利用深度学习模型(LSTM 网络)对电商用户咨询文本进行意图分类的python源码

    功能:利用深度学习模型(LSTM 网络)对电商用户咨询文本进行意图分类,相比简单规则匹配,能处理更复杂、语义模糊的文本,精准识别用户需求。 技术要点:使用 TensorFlow 构建 LSTM 模型,包括文本预处理将文本数字化,Embedding 层将数字映射为向量,LSTM 层捕捉序列特征,Dense 层输出分类结果,通过训练优化模型参数,实现准确意图识别。

    国产银河麒麟V10和统信系统(linux)没有root用户的解决办法

    国产银河麒麟V10和统信系统(linux)没有root用户的解决办法。如何在没有root用户的情况下,开通和启用root用户

Global site tag (gtag.js) - Google Analytics