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的是什么 ...
随机推荐
- 记录一次测试环境遇到的push消息记录
测试环境测试push消息,调用消息中心同事的api接口,感觉怎么都调用不通.纠结了一天,最终发现原因:一是版本的问题,不同的测试包有不同的版本,不同的版本 可能push的消息不同.二是 用户有没有 开 ...
- Linux学习之CentOS(三)----将Cent0S 7的网卡名称eno16777736改为eth0
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- LeetCode题解之Missing Number
1.题目描述 2.题目分析 将 [ 0 , n ]之间的整数放到 n 个元素的数组中去,必然缺失一个元素.在一次遍历中,将元素n[i] 放到 n[ n[i] ] ,位置.最后检查元素值和下标不相等的情 ...
- sonarQube环境搭建--常见问题及解决
环境配置:MySQL Server 5.7 Jdk1.8 1.安装mysql数据库(默认安装一路默认到底,注意不要先新建用户账号) a) Mysql 环境变量配置: b)新增my.ini文件: ...
- 我们是如何拿下Google和Facebook Offer的?
http://posts.careerengine.us/p/57c3a1c1a09633ee7e57803c 大家好,我是小高,CMU CS Master,来Offer第一期学员,2014年初在孙老 ...
- 铁乐学python-面向对象的更多说明
以下内容摘自授课老师的博客http://www.cnblogs.com/Eva-J/ 面向对象的更多说明 面向对象的软件开发 很多人在学完了python的class机制之后,遇到一个生产中的问题,还是 ...
- (转)Matlab增加块注释
1)方法一选中你要加注释的内容,然后选择工具菜单“text|comment”就可以了,如果要把注释变为语句,同样选中要转变的语句,然后用鼠标选择“text|uncomment”就可以了.用键盘的快捷键 ...
- 一、HTML概述 二、web相关的概念 三、HTML的常用标签
一.HTML概述###<1>概念 HTML:Hypertext Markup Language,超文本 标记语言,用来描述网页的一种语言. 非编程语言,由浏览器直接解释运行. ###< ...
- 一、Linux中的常用命令2 二、Vim编辑器的使用
一.Linux的常用命令###<1>文件目录操作 13. echo:用于输出字符串,shell编程,echo 1. 输出字符串 : echo str ,shell编程会使用(类似java中 ...
- RMAN恢复脚本案例
$ crontab -l0 12,19 * * * $ORACLE_HOME/scripts/arcbkup.sh59 03 * * * $ORACLE_HOME/scripts/dbbkup.sh ...