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的是什么 ...
随机推荐
- Ubunt 安装mysql
apt-get install mysql-client-core-5.6apt-get install mysql-client-5.6apt-get install mysql-server-5. ...
- 009_svn配置多仓库与权限控制(Alpha)
1,配置多仓库 实际项目中,我们会同时开发多个项目,通过SVNserve进行仓库监管,但是监管命令只能同时监管一个文件夹,而不能同时监管多个仓库. 解决方法: 可以通过监管总目录来监管所有仓库 SVN ...
- Ubuntu-18.04 下使用Nginx搭建高可用,高并发的asp.net core集群
一.实现前的准备 以下是实现简单负载均衡的思路,图中的服务器均为虚拟机 三台Linux服务器,一台用作Nginx负载均衡(192.168.254.139),另外两台用作Asp.Net Core应用程序 ...
- Eclipse 控制台视图和服务器视图中停止Web服务器的差别
Eclipse 控制台视图和服务器视图中停止Web服务器的差别 (1)console视图里面, "红色方形图标" 是terminate, 也会关闭web服务器!!!!!!!!这个, ...
- Jmeter入门--脚本录制
一.Badboy脚本录制(推荐) 下载地址:http://www.badboy.com.au/download/add,下载完成后直接安装即可. Badboy是一个强大的工具,旨在帮助测试和开发复杂的 ...
- REST Framework 的用户认证组件
用户认证流程: 我们要知道这个流程是怎么走的? 认证之后做的什么? 怎么认证?这三个条件 认证流程:就是使用BaseAuthentication这个模块来做认证,判断你登陆成功传递过来的随机字符串是否 ...
- Celery学习---Celery 分布式队列介绍及安装
Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, ...
- java中常用Redis操作
stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向 ...
- 【2】python3字符串的比较(辨析is与==的区别)
PYTHON3基本数据类型(二.字符串) Python3字符串 ①字符串比较 1.比较字符串是否相同: ==:使用==来比较两个字符串内的value值是否相同 is:比较两个字符串的id值. 2.字符 ...
- SQL Server错误处理
一.SQLServer数据库引擎错误 1.查询系统错误信息 SQLServer在每个数据库的系统视图sys.messages中存储系统自定义(Message_id <= 50000)和用户自定义 ...