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的是什么 ...
随机推荐
- DevOps 发展融合运维可视化
DevOps,是开发(Development)和运维(Operations)的组合,代表一种文化.运动或实践,旨在促进软件交付和基础设施变更软件开发人员(Dev)和 IT 运维技术人员(Ops)之间的 ...
- spring boot(13)-logback和access日志
logback logback出自log4j的作者,性能和功能相比log4j作出了一些改进,而配置方法和log4j类似,是spring boot的默认日志组件.在application.propert ...
- 5.servlet 上传文件
一.maven依赖 <dependency> <groupId>commons-fileupload</groupId> <artifactId>com ...
- tls/ssl工作原理及相关技术
https://www.wosign dot com/faq/faq2016-0309-03.htm TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash.对称加密和非对称加密,其利用非 ...
- alwayson监控
最近大体自己写了点alwayson相关的监控,是通过存储过程的方法,做个笔记如下: --alwayson启用状态 declare @isenabled sql_variant SELECT @isen ...
- asp.net MVC 使用PagedList.MVC实现分页
在上一篇的EF之DB First中,存在以下的两个问题: 1. 添加/编辑页面显示的是属性名称,而非自定义的名称(如:姓名.专业...) 2. 添加/编辑时没有加入验证 另外数据展示使用分页 @Htm ...
- vue的项目
vue的项目打开也是非常具有解耦性的 最重要的就是src目录了 我们的入口在main中 main是你的实例化vue app中就是我们的每一块田地是我们的vue实例对这个的操作 ,index因为是 ...
- Windows未能启动:0xc00000e9错误
问题:计算机无法启动,错误代码为:0xc00000e9 解决方法: 1.如报错所示,\Windows\System31\config\system 文件丢失或损坏: 2.如许修复此问题,需在打开此目录 ...
- PHP安装posix、pctl扩展
安装问题 PHP Fatal error: Uncaught Error: Call to undefined function tsingsun\swoole\server\posix_kill() ...
- 应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户
这是安装biztalk server 2013出现的问题,很多天了没解决,下边这个解决办法也搜到过类似的,但上次实验时出现设置组件权限时发现都是按钮都是灰的,无法操作. 这次设置好了.谢谢ibg. 文 ...