Jsp概述

java server pages—java服务器页面,是一种动态网页技术标准,在传统的网页HTML中插入Java程序段(Scriptlet和JSP标记tag),从而形成JSP文件。JSP=HTML+Java代码+JSP自身东西。

因为Servlet存在如下缺点,所以sun公司开发了新的动态网页开发技术JSP
Servlet的缺点:
Servlet需要进行配置,不方便维护
Servlet很难向网页中输出HTML页面内容

jsp的运行原理,浏览器发送请求到服务器,服务器找到对应的jsp文件,将其翻译成Java文件并编译生成class文件,运行该class文件,最终将结果响应到浏览器

Jsp的脚本元素(Jsp中嵌入JAVA代码)

声明标签:<%! 变量或方法声明 %>
写在这个脚本中的代码,会被翻译成Servlet内部的成员变量或成员方法。一般不适用,因为Servlet是线程不安全的,如果定义了成员变量就会有线程安全问题。
表达式标签:<%= 表达式 %>
写在这个脚本中的代码,会被翻译成Servlet中方法内部的out,print()当中的内容。
程序代码标签:<% 程序代码 %>
写在这个脚本中的代码,会被翻译成会被翻译成Servlet中方法内部的局部变量或者方法内部的代码片段。

JSP的开发模式之MVC模式

动态网页开发模式的发展:
Servlet(显示HTML元素非常麻烦)
—>JSP(优点:显示数据非常方便; 缺点:数据的封装和处理)
—>JSP+JavaBean(显示数据和封装数据非常方便但是维护麻烦)
----JSP开发模式一:使用JSP显示数据,使用JavaBean封装和处理数据,只能开发简单应用
—>JSP+Servlet+JavaBean
----JSP开发模式二:使用JSP显示数据,使用JavaBean封装和处理数据,使用Servlet控制调度
即MVC开发模式:Model(模型层) View(视图层) Controller(控制层)
请求—>Servlet(控制层)—>JavaBean(Model)Servlet根据请求决定具体调用Java类去封装 和处理数据—>JSP(View)最后Servlet再决定输出到哪个页面
开发中的路径问题
在页面中点击链接或表单时,数据提交到Servlet中,如何编写从页面向Servlet发送请求的地址(路径)
相对路径:
在根路径下的页面访问Servlet 在当前目录下查找 Servlet名 或者 ./Servlet名
在某个目录下的页面访问Servlet 向上一层路径 …/Servlet名
绝对路径:通常以 / 开始
在根路径下的页面访问Servlet
在某个目录下的页面访问Servlet
都使用 /工程名/Servlet名
注意:绝对路径分为客户端路径和服务器端路径
客户端路径 需要带工程名
服务器端路径 不需要带工程名

请求转发和重定向

请求转发:
原理(执行流程):
(1)客户端向服务器发送请求,Servlet做出业务逻辑判断;
(2)Servlet调用forward()方法,服务器把目标资源返回给客户端浏览器。
WEB客户端—请求—>服务器Servlet—>JSP—>客户端
request.getRequestDispatchar(URL地址).forward(request,response);
用的是服务器端路径,不需要带工程名。
重定向:
原理(执行流程):
(1)客户端向服务器发送请求,Servlet做出业务逻辑判断;
(2)Servlet调用sendRedirect()方法,服务器把要访问的目标资源作为response响应头信息发给客户端浏览器
(3)客户端浏览器重新访问服务器资源***.jsp,服务器再次对客户端浏览器做出响应。
WEB客户端—请求—>服务器Servlet—>JSP—>客户端
使用HttpServletResponse对象中的 sendRedirect(String location)
response.sendRedirect(URL地址)
用的是客户端路径,需要带上工程名。

两者的区别:
(1)请求转发是一次请求一次响应;重定向是两次请求两次响应;
(2)请求转发地址栏不发生变化,重定向地址栏会发生变化;
(3)请求转发路径不带上工程名,重定向需要带上工程名路径;
(4)请求转发只能在本网站内部,即只能转发web服务器内部资源,不能跨域访问,重定向可以定向到任何网站资源。所以如果使用request域去保存数据,只能使用请求转发,不能使用重定向。request域去保存数据只在本次请求有效,每次该请求对应的响应结束之后,request都会被销毁,里面的数据就不会再保留。

总结:如果需要使用request进行值传递,需要通过请求转发完成。如果页面需要跳转到其他网站上则必须使用重定向。

JSP指令元素

语法:<% @ 指令名称 属性名称=属性值 属性名称=属性值 %>
分类:
page指令:指示JSP的页面设置属性和行为,定义JSP文件的全局属性
<% @page 属性名称=属性值 属性名称=属性值 … %>
只有import属性可以多次出现,其他属性只能出现一次
language属性:声明使用脚本的语言。目前只能是java
extends属性:标明JSP编译成Servlet的时候继承的类。默认是HttpJspBase
session属性:标明JSP中是否可以直接使用session对象。默认是true
buffer属性:标明JSP对客户端输出缓冲区大小,默认大小是8kb
autoFlush属性:如果缓冲区大小溢出,是否自动刷出,默认是true
import属性:用于导入Java的包或类(快捷键 Alt+/)
contentType属性:标明JSP被浏览器解析和打开时采用的默认的字符集
pageEncoding属性:JSP文件及JSP翻译后的Servlet保存到硬盘上所采用的字符集
isErrorPage属性:处理JSP异常
errorPage属性:处理JSP异常
isELIgnored属性:通知JSP是否忽略EL表达式,默认是false

include指令:指示JSP包含哪些其他的页面写法:<%@include 属性名=属性值%>用于在JSP页面中静态包含一个文件,同时由该JSP解析包含的文件内容。file属性:指示JSP页面所包含的页面的路径<%@include file="被包含的页的路径"%>静态包含的原理:将被包含的页面的内容全都复制到当前JSP中,一起被翻译成一个Servlet,然后编译执行。注意:将被包含的页面中的结构去掉在被包含的页面中定义的变量,在包含的页面中还可以使用动态包含:<jsp:include page=" " flush="true"/> taglib指令:指示JSP要包含哪些标签库写法:<%@taglib 属性名=属性值%>用于在页面中引入标签库uri属性:引入的标签库的路径prefix属性:引入的标签库的别名

pageContext对象

即页面上下文对象,代表的是当前页面运行的一些属性。它是java.servlet.jsp.PageContext类的实例对象.
作用:
提供了page范围的数据存取方法;
通过这个对象可以获得其他8个对象。
pageContext的API:
存入数据的方法: setAttribute(String name, object object)
获取数据的方法: getAttribute(String name)
移除数据的方法: removeAttribute(String name)
查找属性的方法: findAttribute(String name)
获得其他8个对象:get***()

JSP的四个作用范围

PageScope:页面范围
在当前的页面内有效,出了这个页面,用pageContext保存的数据就无效了。
RequestScope:请求范围
从客户端发送一次请求,服务器对这次请求作出响应之后,用request保存的数据就无效了。
SessionScope:会话范围
每个浏览器向服务器发送请求(可以是多次请求),直到会话结束(关闭浏览器或者手动清楚浏览器中的数据)。
ApplicationScope:应用范围
在整个应用(项目)中任意地方都可以获取。

pageContext对象可以向四个域范围存取数据:

page范围:pageContext.setAttribute(String name, object object)pageContext.getAttribute(String name)
request范围:request.setAttribute(String name, object object)request.getAttribute(String name)可以写成:pageContext.setAttribute(String name, object object,PageContext.REQUEST_SCOPE)pageContext.getAttribute(String name, PageContext.SESSION_SCOPE)
session范围:pageContext.setAttribute(String name, object object,PageContext.SESSION_SCOPE)pageContext.getAttribute(String name, PageContext.SESSION_SCOPE)
application范围:pageContext.setAttribute(String name, object object,PageContext.APPLICATION_SCOPE)pageContext.getAttribute(String name, PageContext.APPLICATION_SCOPE)

查找属性的方法: findAttribute(String name)

先根据小范围的名称进行查找,如果找到了就返回,如果没有找到就会去比其大一个的域范围查找。即优先从小范围开始找。

JSP的动作标签

用于在JSP页面中提供业务逻辑功能,避免直接在JSP页面写Java代码。
常用的动作标签:

<jsp:forward/>:请求转发   <jsp:forward page="跳转页面路径"></forward>
<jsp:include/>:动态包含<jsp:include page="被包含的页面路径2"></include><jsp:include page="被包含的页面路径1"></include>本jsp内容<jsp:include page="被包含的页面路径3"></include>动态包含和静态包含的区别:动态包含中被包含的jsp会被独立编译执行,动态包含包含的是目标jsp的运行结果。
<jsp:param/>:多页面之间传递参数<jsp:forward page="跳转页面路径aaa,jsp"><jsp:param name="name" value="asd" /></forward>在aaa.jsp中可以接收到这个值<%= request,getParameter("name")%>现在基本不用,因为可以直接用其他域对象存取值。

动态网页开发技术(三):jsp相关推荐

  1. JSP动态网页开发技术

    一.学习目标 1.JSP概述 2.JSP指令 3. JSP 隐式对象 二.重点知识 1.JSP概述:JSP是什么? 1)JSP全称Java Server Pages,是一种动态网页开发技术.它使用JS ...

  2. 动态网页开发技术(一):Servlet

    1. Servlet 1.1 Servlet概述 java EE Api Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务 ...

  3. 动态网页开发技术(二):Servlet

    ServletConfig对象 1)ServletConfig是用来获得Servlet的相关配置的对象 2)获得ServletConfig对象-通过Servlet的实例调用getServletConf ...

  4. jsp php动态网站开发,动态网站开发技术ASP、PHP与JSP的比较

    龙源期刊网 http://www.doczj.com/doc/4d5157a89a89680203d8ce2f0066f5335b816746.html 动态网站开发技术ASP.PHP与JSP的比较 ...

  5. 畅游Python 二十二:网页开发技术方案:AJAX

    一.概述 对于WEB应用程序而言:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回的是字符串(HTML),浏览器将字符串(HTML)渲染并显示在浏览器上. 1.传统的Web应用 一个简 ...

  6. Python动态网页爬虫技术

    这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫. 动态网页技术介绍 动态网页爬虫技术一之API请求法 动态网页爬虫技术二之模拟浏览器法 安装selenium模块下载 Google Chr ...

  7. 第四本书第1章 动态网页开发基础、

    一.动态网页开发基础 1.动态网页:能跟用户进行交互的网页,能够处理用户请求的网页 2.B/S架构:浏览器:客户端零维护:与操作系统平台的关系最小化:在响应速度和安全性上需要花费更多设计成本 C/S架 ...

  8. 网页三剑客软件测试自学,动态网页制作技术实验指导书.doc

    PAGE 动态网页制作技术实验指导书 Computer Science and Technology西南科技大学(SouthWest University of Science and Technol ...

  9. 雅虎JavaScript架构师:网页开发技术安全优先

    由于当前技术仍偏向功能强化为主要思维,指令码趋向庞杂的结果,容易产生更多安全漏洞,且失去快速因应攻击调整架构的灵活性. 身为JavaScript网路技术重要推手的雅虎(Yahoo!)架构设计师Doug ...

最新文章

  1. navicatformysql
  2. 在IIS中删除ETag的方法
  3. 红帽企业虚拟化平台RHEV中WINDOWS 虚拟机如何安装 GUEST代理和驱动
  4. 中通滤波matlab,如何用MATLAB将低通改成中通滤波器
  5. 互联网日报 | 3月6日 星期六 | 知乎在美递交IPO申请;钉钉“开工节”发放8千万红包;特斯拉中国大陆超充桩数量创新高...
  6. 企业私有云解决方案(基于桌面与服务器虚拟化技术)
  7. ROS 内外网做双网卡绑定负载分流教程bonding 配置教程
  8. 迭代时移除List中的元素的正确方式
  9. 先爆火再遇冷 元宇宙能否托起梦想?
  10. ubuntu查看隐藏文件及显示隐藏文件所占用存储空间
  11. Android FFmpeg视频播放器一解封装
  12. POL8901 LVDS转MIPI DSI 支持旋转图像处理芯片
  13. 对接医疗资源,创建高质量医疗数据库,这家公司能降低跨境医疗费用吗?
  14. 福兮祸所伏,祸兮福所依
  15. 都 2021 年了,你还在用 Kafka?快试试这个全新平台吧
  16. 相机画幅等值计算器_全画幅相机和作物传感器相机有什么区别?
  17. (附源码)SSM校园一卡通管理系统JAVA计算机毕业设计项目
  18. arcgis api for javascript 4.16 定位功能的实现
  19. 基于java的ECharts插件使用
  20. CSS速成手册(5)

热门文章

  1. 经验与教训:测试员的偏向
  2. supervisor linux下进程管理工具
  3. DIV+CSS 让同一行的图片和文字对齐
  4. 当你的程序在朋友的机器上显示丢失msvcr100d.dll的时候
  5. FMS案例开发--视频聊天室(三)
  6. GridView控件 72变(一)
  7. 刚刚!频域通道注意力网络FcaNet开源了!
  8. “3D几何与视觉技术”全球在线研讨会第六期第七期
  9. 北大阿里中科院提出细粒度人体姿态迁移方法,提升外观细节逼真度
  10. 图片鉴黄大赛上线,请开始你的表演