JavaWeb基础—JSP
一、什么是JSP
JSP 全称是 Java Server Pages,是一种开发动态web资源的技术
在原HTML上添加JAVA脚本(灵魂工程师,为页面添加灵魂),可以说 jsp = html + java代码 +jsp标签
二、JSP的原理
JSP基本原理:
JSP本身是一个特殊的Servlet(类,即万物皆对象)
JSP第一次被访问时,服务器会编译成JAVA文件(这个JAVA其实是Servlet类)
然后创建对象
调用对象的service()方法
(第一次惩罚,第一次会慢一点)
在tomcat的work的的对应jsp的.java文件(out.write(),java代码原封不动
JSP的真身实际上是 Servlet,我们访问 index.jsp 时,实际上是访问它的真身 index_jsp 这个 Servlet
并且是通过_jspService()这个方法处理请求,这个方法中放了 html 和 java 代码,所有java代码原样翻译过来,
html 代码使用out.write("<标签>"\r\n)向页面输出给浏览器
简单的流程可以概述为
找到.jsp文件 ——> 转换为 .java文件 ——> 编译为 .class文件 ——> 服务器执行之
若是第二次访问则直接找.class文件即可,若是进行了修改,则需要重新编译
三、基本语法
HTML代码称之为模板元素,也就是网页的骨架和布局
jsp3种java脚本
<%...%>【尽量不要使用】
JAVA代码片段(方法内可以写的它都可以写,例如调用方法等,但不能定义方法)
一个代码段中声明的变量,其它片段可以用
<%=...%>(out.print())
JAVA表达式 (常用于输出)response.writer.print()里面能放的,他都能放。注意不能输出多个,即不能有分号
<%!...%>
声明(作了解) 基本不用,但会被考虑到(类体中可以放什么,这里就可以放什么)
jsp的注释
<%-- --%>(编译成java文件时自动忽略.java .class都没有,客户端看不见) ——jsp的注释
<!-- -->(HTML的注释,右键查看源代码可以看到)——HTML的注释
// /**/ java的注释,此注释也是隐式的 ——JAVA的注释
四、JSP指令
JSP指令(derictive)是用来告知引擎如何执行处理页面的
JSP三大指令:
1.page指令:最复杂,可以存在任意个指令
2.include指令:静态包含
3.taglib指令:导入标签库
指令的格式:<%@ 指令 key="value" %>
一、page指令:一般放在第一行,定义了整个页面的属性
常用属性:
pageEncoding:指定当前jsp页面编码,在服务器要把JSP编译成.java时用到
contentType:相当于添加响应头:两人关系出现一个另外一个也相同。同时没有默认ISO
import:用来导包的,可以出现多次
errorPage和isErrorPage
如果没有设置isErrorPage="true",那么在jsp页面中是无法使用exception对象的
前者:页面出错要转到哪个页面去
后者:当前页面为处理错误页面(500)
<!-- 默认的错误处理页面 -->
例如:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
可以在web.xml中为整个项目配置
<error-page>
<error-code>403</error-code>
<location>/403.html</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
<!-- 仅仅在调试的时候注视掉,在正式部署的时候不能注释 -->
<!-- 这样配置也是可以的,表示发生500错误的时候,转到500.jsp页面处理。 -->
<error-page>
<error-code>500</error-code>
<location>/500.html</location>
</error-page> <!-- 这样的配置表示如果jsp页面或者servlet发生java.lang.Exception类型(当然包含子类)的异常就会转到500.jsp页面处理。 -->
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/500.jsp</location>
</error-page> <error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/500.jsp</location>
</error-page>
<!--
当error-code和exception-type都配置时,exception-type配置的页面优先级高
及出现500错误,发生异常Exception时会跳转到500.jsp
-->
二、include指令
两种形式:
1.@include 静态包含
与转发的包含类似{时间点不同} <%@include file="" %>,在生成.java时就包含了
两页面合体了。作用主要是页面分解,将变量分离。以及实现可重用。建议包含的文件拓展名为 .jspf
2.<jsp:inlcude> 动态包含
先处理结果后包含,推荐的方式: <jsp:include page="top.jsp"></jsp:include>
三、taglib指令
两个属性:prefix:指定本页面标签前缀 <pre:text>指定了前缀
uri:指定标签库位置
例如:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
五、JSP九大内置对象
九大内置对象由JSP引擎负责创建于传递(在调用相应的_jspServlet时)
九大内置详细对象见下表:
request | 请求对象 | 类型 javax.servlet.ServletRequest | 作用域 Request |
response | 响应对象 | 类型 javax.servlet.SrvletResponse | 作用域 Page |
pageContext | 页面上下文对象(1顶9) | 类型 javax.servlet.jsp.PageContext | 作用域 Page |
session | 会话对象 | 类型 javax.servlet.http.HttpSession | 作用域 Session |
application | 应用程序对象 | 类型 javax.servlet.ServletContext | 作用域 Application |
out | 输出对象 | 类型 javax.servlet.jsp.JspWriter | 作用域 Page |
config | 配置对象 | 类型 javax.servlet.ServletConfig | 作用域 Page |
page | 页面对象(this) | 类型 javax.lang.Object | 作用域 Page |
exception | 例外对象 | 类型 javax.lang.Throwable | 作用域 Page |
重点: >pageContext:1个顶9个,Servlet中有三大域对象,而JSP中有四大域对象,它就是最后一个。
域对象它就有域对象的方法。
- getException方法返回exception隐式对象
- getPage方法返回page隐式对象
- getRequest方法返回request隐式对象
- getResponse方法返回response隐式对象
- getServletConfig方法返回config隐式对象
- getServletContext方法返回application隐式对象
- getSession方法返回session隐式对象
- getOut方法返回out隐式对象
>ServletContext:整个应用程序
>session:整个会话(锁定一个用户)
>request:一个请求链中
>pageContext:一个JSP页面(页面标签中共享数据)
作为域对象,作为代理,获取其它内置对象,全域查找(从小到大)
pageContext.setAttribute("aaa", "AAA", PageContext.SESSION_SCOPE);
域对象:
pageContext:page作用范围
作用域仅限于当前页面对象,可以近似于理解为java的this对象,离开当前JSP页面(无论是redirect还是forward),则pageContext中的所有属性值就会丢失。
request:
作用域是同一个请求之内,在页面跳转时,如果通过forward方式跳转,则forward目标页面仍然可以拿到request中的属性值。如果通过redirect方式进行页面跳转,
由于redirect相当于重新发出的请求,此种场景下,request中的属性值会丢失。
session:例如购物车数据
session的作用域是在一个会话的生命周期内,会话失效,则session中的数据也随之丢失。
application:例如聊天数据
作用域是最大的,只要服务器不停止,则application对象就一直存在,并且为所有会话所共享。
六、JSP标签(JSP动作)
JSP动作标签:
与HTML提供的标签有本质的区别,是由服务器来解释执行。在服务器端执行
<jsp:forward /> 转发,与servlet中转发作用类似
例如:<jsp:forward page="/forwarddemo02.jsp"/>
<jsp:include /> 包含,与RequestDispecher.include()类似
例如:<jsp:include page="/jspfragments/head.jsp"/>
对比:<%@include file="/jspfragments/demo.jsp"%>
演示小案例
<jsp:param>作为forward和include的子标签,作为传参标签。
例如:
<jsp:include page="/jspfragments/Inc.jsp">
<jsp:param name="parm1" value="hello" />
<jsp:param name="parm2" value="gacl" />
</jsp:include>
JavaWeb基础—JSP的更多相关文章
- JavaWeb基础-Jsp基础语法
jsp基础语法 JSP的组成 静态内容.指令.表达式.小脚本.声明.注释 JSP的生命周期 用户发出index.jsp ,服务端判断是否是第一次请求,若是第一次请求,则tomcat中的JSP引擎中的文 ...
- JavaWeb基础-Jsp的请求与响应
JSP请求和相应 HTTP头信息 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息头的一部分来传送的. HttpServletRequest类 r ...
- JavaWeb基础-Jsp内置对象
request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应,它是HttpServlteRequest类的实例.Request对象具有请求域,即完成客户端 ...
- JavaWeb基础—JSP自定义标签入门
自定义标签的作用:替换JSP页面的java代码 步骤:1.标签处理类(标签是一个对象,那也就需要先有类) 2.tld文件 它是一个xml(可以向c标签里借),一般放到WEB-INF下,不让客户端浏览器 ...
- JavaWeb基础: 学习大纲
JavaWeb基础: Web应用和Web服务器 JavaWeb基础: Tomcat JavaWeb基础:HTTP协议和基于Restful的架构 JavaWeb基础: Web工程配置文件 JavaWeb ...
- javaweb学习--jsp
阅读电子书<Java Web从入门到精通>密码:461c,学习JavaWeb基础知识.由于本人已有html基础,所以直接略过前面部分,进入jsp学习 jsp页面添加库引用,引入项目文件 引 ...
- JavaWeb基础知识总结
JavaWeb基础知识总结. 1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供 ...
- 超详细的Java面试题总结(四 )之JavaWeb基础知识总结
系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...
- 关于java基础、多线程、JavaWeb基础、数据库、SSM、Springboot技术汇总
作者 : Stanley 罗昊 本人自行总结,纯手打,有疑问请在评论区留言 [转载请注明出处和署名,谢谢!] 一.java基础 1.多态有哪些体现形式? 重写.重载 2. Overriding的是什么 ...
随机推荐
- html的button疑问
button是可以自动垂直居中的,随便给个高度,它都会自动垂直居中.用控制台查看computed属性里也没有发现和垂直相关的,贴出来希望以后能够了解或有高手看到来解惑小弟:)
- Ionic Css样式详解
Header是固定在屏幕顶部的组件.可以包含如标题和左右的功能按钮.Sub Header同样是固定在顶部,只是是在Header的下面,就算没有写Header这个,Sub Header这个样式也会距离顶 ...
- [UI] Pull menu interaction concept - 下拉菜单交互
Pull menu interaction concept - 下拉菜单交互 http://freebiesbug.com/code-stuff/pull-menu-interaction-conce ...
- PowerShell管理SCOM2007R2
get-operationsmanagercommand #定义RMS服务器名称(SCOM管理控制台所在服务器名称)#Connect to the RMS server and initialize ...
- Python入门-模块4(序列化----json模块和pickle模块)
序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes.反之,把硬盘里面的数据读到内存里,叫反序列化.
- THE CUP OF LIFE即生命之杯。
生命之杯 编辑 THE CUP OF LIFE即生命之杯. <生命之杯>(西班牙语:La copa de la vida,英语:The Cup of Life)是一首由波多黎各裔歌手瑞奇· ...
- DevExpress01、独立使用的控件
XtraEditors 库提供了只能独立使用的控件,也就是说不能在容器控件的内置编辑中使用它们. 这些控件包括: 几种类型的列表框.数据导航控件.滚动条和一个按钮控件. 这些控件都是 BaseStyl ...
- JavaScript基础之数据类型部分总结
JavaScript 是世界上最流行的脚本语言,被设计为向 HTML 页面增加交互性. 我把它的基础语法分为了三个部分:数据类型,运算符,流程控制语句.入门还是比较容易的. 基本概念: 标识符:指变量 ...
- 走向Node与Webpack 之路 - CommonJS 模块化
走向Node与Webpack 之路 - CommonJS 模块化 1. 参考资料 JavaScript 标准参考教程(alpha) CommonJS规范(推荐 - 阮一峰写的) 官方网站 (看半天,不 ...
- JS相关知识点总结
一.获取元素方法 1.document.getElementById("元素id号"); 可以使用内置对象document上的getElementById方法来获取页面上设置了id ...