Java Web基础:JSP基础概念
JSP介绍
- JSP全称是Java Server Pages,它和Servlet都是Sun公司定义的用于开发动态Web资源的技术,它解决了Servlet输出流排版复杂和难以维护的问题。JSP完美融合了HTML模版元素和Java代码,通过JSP写服务端输出变得和写HTML网页一样容易。
- JSP通过涵盖HTML模版元素来简化输出排版,还提供不同的JSP标签管理不同类型的Java代码,除此之外,它还默认封装了9大隐式对象,帮助提高开发的效率。
- JSP本质上是Servlet,当用户请求JSP时,JSP引擎(Tomcat内嵌)会自动把JSP代码转化为Servlet,并把HTML模版元素和JSP标签内容填充到Servlet中的Service方法,通过Service方法输出响应流给客户。在进行转换时,Servlet引擎也会默认的将JSP的9大隐式对象封装到service方法当中。
- JSP页面组成:HTML,JavaScript, JSP指令,JSP脚本,JSP动作标示,JSP九大内置对象,JSTL等第三方标签库...
- 由于JSP良好的布局性,实际开发Web应用通常采用JSP+Servlet的形式,JSP主要负责数据的展示,Servlet负责业务逻辑和数据计算。此种方式可以实现良好的代码解耦合和分层管理,也利于UI人员和后端人员并行开发。
JSP工作原理
示例:tomcat容器自带的index.jsp 对应的servlet

- 默认生成Servlet,并将JSP的内容自动填充到_jspService方法中
- Java代码直接填充到方法中
- HTML模版通过out.write("HTML 模版 /n") 填充到方法中,形成输出流
- JSP引擎还自动的在_jspService方法里面生成其他对象的引用并对他们初始化,这些对象结合起来称为JSP的默认9大隐式对象,在JSP页面可以直接通过对象名进行引用.
JSP九大隐式对象
常用JSP对象
Normal 7.8 磅 false EN-US /* Style Definitions */ |
非常用JSP对象
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}
table.MsoTableGrid
{mso-style-name:网格型;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-priority:39;
mso-style-unhide:no;
border:solid windowtext 1.0pt;
mso-border-alt:solid windowtext .5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-border-insideh:.5pt solid windowtext;
mso-border-insidev:.5pt solid windowtext;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}
内置对象 |
说明 |
config |
ServletConfig,可以获取Servlet的初始化参数 |
page |
代表JSP本身,等同于this,可以通过它获取当前JSP页面的一些属性。 |
pageContext |
page运行的上下文,可以通过它获取当前页面的各种内置对象,包括request,response,session….因为JSP的内置对象可以直接使用,通过此方法来间接调用在实际开发中使用不多。 |
exception |
只能用于errorPage当中(设置JSP Page指令中的isErrorPage=true),否则会抛异常,通常用于捕获最终的错误消息。 1. 设置页面A的Page指令,errorPage=”pageB.jsp” 2. 设置页面B的Page指令,isErrorPage=”true”,并在B中对错误进行捕获和处理。 3. 页面A出现了没有捕获的异常以后会跳转到页面B进行相应的处理和显示。 |
JSP页面示例
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8" import="java.util.*"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>第一个JSP</title>
- </head>
- <body>
- <%!//定义一个类方法,只能通过JSP申明定义方法,全局变量和静态代码块
- public void testJSPDeclarition() {
- System.out.println("这是一个JSP申明");
- }%>
- <%--JSP注释,该注释并不会做为输出输出给浏览器,在JSP中应当用此注释替代Html注释<!--XXX-->,避免输出垃圾数据给客户端造成流量浪费 --%>
- 当前系统时间是:
- <%--脚本表达式,可以书写遵循java规范的代码,可以在JSP中多次出现,并且会被翻译为相应Servlet中的Service方法的代码片段 --%>
- <%
- testJSPDeclarition();
- Date d = new Date();
- out.write(d.toLocaleString());
- String jspDefindedVar = "hello,i am a var generated by JSP";
- for (int i = 0; i < 2; i++) {
- %>
- <br>测试脚本片段语法和多个脚本片段组合作用
- <%
- }
- %>
- <br>
- <br> 查看前面JSP脚本片段定义的变量值:
- <%-- 脚本表达式,用于向浏览器输出数据,不以;结尾,仅用做数据输出 --%>
- <%=jspDefindedVar%>
- <br>
- <br> 查看Servlet传递过来的参数变量:
- <%=request.getAttribute("servletTransferVar")%>
- </body>
- </html>
JSP脚本
- <% %> JSP脚本片段,即Java代码块( Java代码直译)
- <%! %> JSP申明
- <%= %> JSP表达式(直接翻译成out.print)
- <%-- --%> JSP 注释,此注释不在浏览器展示
JSP脚本片段
- <% %> 只能出现严格遵循Java语法的代码,每行必须以;结束。
- 在一个JSP页面中可以有多个脚本片段,不同的脚本片段之间可以嵌入文本,HTML标记或者其他JSP元素, 并且同一个页面之间的脚本片段可以相互访问。本质上这些脚本片段都被翻译为同一个jspService方法里的代码,方法里的变量是可以相互访问的, 但一样要遵循先定义后访问的原则。
- 单个脚本片段在JSP中可以是不完整的,但是多个顺序结合的脚本片段必须是完整的Java代码。
JSP申明
- <%! %> JSP页面中编写的所有代码,默认都会翻译到servlet的Service方法当中,除了JSP申明。
- JSP申明中的Java代码会被翻译到Servlet的service方法外,常常用来定义JSP转化为Servlet程序的静态代码块,成员变量或者是方法。JSP脚本片段不能用来定义方法,只有JSP申明能够用来定义方法。
- JSP 申明必须满足Java代码规范
- JSP默认的九大隐式对象都是Servlet Service方法里申明的方法变量,在JSP申明中不能使用这些隐式对象。
JSP脚本表达式
JSP 注释
- <%— —%>, 需要和HTML注释区别开,实践中应该多用JSP注释少用html注释。
- <!— —>, HTML 注释会被解析到浏览器当中,造成不必要的垃圾数据输出。
JSP 指令
JSP指令是为JSP引擎设计的,它不直接产生可见输出,只是用于告诉JSP引擎如何处理JSP,JSP指令基本语法:<%@ 指令 属性名=“值” %> 。
JSP指令 |
说明 |
Page指令 <%@Page attr1=”value1” attr2=”value2” %>
|
最常用的JSP指令,作用域是整个页面,通常用于设置JSP的全局属性,实际开发中常常放在JSP页面顶部,重点包括以下几项:
|
include指令 <%@include file=”url” %> |
静态包含,通过url(相对地址或者是绝对地址)来包含相关的页面,include指令采用的是静态包含的方式,被包含的页面内容会直接输出到包含页面中,然后再进行统一的编译执行,因此要注意被包含页面和包含页面中不要有变量名的冲突,实际开发中,常常用来包含网站的页眉和页脚。 |
taglib指令 <%@taglib prefix=”” url=”url”%> |
引入第三方标签库,比如JSTL标签库,page指定第三方url,prefix指定在jsp页面中的前缀,通过<前缀:标签>的方式使用。 |
JSP动作标示
JSP动作标示 |
说明 |
<jsp:include/> |
<jsp:include page=”url”></jsp:include> 动态包含,可以包含其他JSP页面,此包含是动态包含,当调用被包含页面时会先将被包含页面进行动态编译输出结果,然后把输出结果嵌入到包含页面中,和JSP指令中的<%@include %>不一样。 |
<jsp:forward/> |
<jsp:forward page=“url”/> 请求转发 |
<jsp:param/> |
<jsp:param name=“”value=“”/> 可以内嵌在jsp:forward和jsp:include中使用,用于参数传递。 |
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}
table.MsoTableGrid
{mso-style-name:网格型;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-priority:39;
mso-style-unhide:no;
border:solid windowtext 1.0pt;
mso-border-alt:solid windowtext .5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-border-insideh:.5pt solid windowtext;
mso-border-insidev:.5pt solid windowtext;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}
Java Web基础:JSP基础概念的更多相关文章
- 重拾Java Web应用的基础体系结构
目录 一.背景 二.Web应用 2.1 HTML 2.2 HTTP 2.3 URL 2.4 Servlet 2.4.1 编写第一个Servlet程序 2.5 JSP 2.6 容器 2.7 URL映射到 ...
- java web构建学习(概念基础)
1.什么是Java Web Application 一个Java web应用程序生成交互式web页面包含各种类型的标记语言(HTML.XML等)和动态内容.它通常由web组件例如JavaServer ...
- java web filter 之一 基础实现
本文主要对filter的基本使用进行了讲解,其中涉及到了 filter是什么 一个filter处理一个jsp 多个filter处理一个jsp filter是什么 Filter 是java下的一种过滤器 ...
- java攻城师之路--复习java web之jsp入门_El表达式_JSTL标签库
JSP 技术掌握:JSP语法 + EL + JSTL 为什么sun推出 JSP技术 ? Servlet 生成网页比较复杂,本身不支持HTML语法,html代码需要通过response输出流输出,JSP ...
- 初学Java Web(6)——JSP学习总结
为什么要学习 JSP Servlet 的短板: Servlet 的出现,是为了解决动态输出网页的问题. 虽然这样做目的能达到,但是存在一些缺陷: 在 Servlet 输出网页片段非常恶心 (可读性差, ...
- Java Web之JSP
什么是JSP? JSP就是一个可以写Java代码的HTML页面 JSP是什么? JSP是Servlet,JSP的本质就是Servlet Tomcat的web.xml文件下有这样几段代码: 看到下面的通 ...
- 复习java web之jsp入门_El表达式_JSTL标签库
JSP 技术掌握:JSP语法 + EL + JSTL 为什么sun推出 JSP技术 ? Servlet 生成网页比较复杂,本身不支持HTML语法,html代码需要通过response输出流输出,JSP ...
- JavaWeb基础-Jsp基础语法
jsp基础语法 JSP的组成 静态内容.指令.表达式.小脚本.声明.注释 JSP的生命周期 用户发出index.jsp ,服务端判断是否是第一次请求,若是第一次请求,则tomcat中的JSP引擎中的文 ...
- Java Web之JSP技术
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比htm ...
- Java Web(五) JSP详解(四大作用域九大内置对象等)
前面讲解了Servlet,了解了Servlet的继承结构,生命周期等,并且在其中的ServletConfig和ServletContext对象有了一些比较详细的了解,但是我们会发现在Servlet中编 ...
随机推荐
- Android 第三方开源下拉框:NiceSpinner
Android原生的下拉框Spinner基本上可以满足Android开发对于下拉选项的设计需求,但现在越来越流行的下拉框不满足于Android原生提供的下拉框Spinner所提供的设计样式,而改用自定 ...
- Java多线程 LockSupport
在AQS里面进行阻塞线程,解除阻塞线程就用的LockSupport. JDK1.8源码: package java.util.concurrent.locks; import sun.misc.Uns ...
- DuiLib学习bug整理——某些png不能显示
今天下午遇到用ps导出的png显示不出来的情况.而从其他来源的png有的可以显示.到群里问了下也有人遇到过,但是都没想明白具体原因.后来经人指点说png保存时存在深度位不同.最后经过测试 8位深度.3 ...
- Maven聚合与继承的实例讲解(一)
概述 在javaweb高速发展的今天,我们软件设计人员往往会用很多种方式对软件划分模块,目的就是为了能有清晰的设计和低耦合性的,高重用性的软件.Maven有很好的依赖管理系统(Dependency M ...
- SQLite Expert 删除表数据并重置自动增长列
用下面的语句肯定是行不通的,语句不支持 truncate table t_Records 方法:1.删除表数据 2.重置自动增长列 where name='t_Records' /*name :是表名 ...
- Eclipse中使用自己封装的jar包的过程
在包名上右键,选择Export"" 经过上面的步骤,成功导出了可运行jar包,下面在另一个自己的工程里引入这个jar包 最终效果如下:可见包已经可以正常使用了!! 运行自己的jar ...
- 郑轻校赛题目 问题 G: 多少个0
问题 G: 多少个0 时间限制: 1 Sec 内存限制: 128 MB提交: 192 解决: 40 题目描述 一个n*n的方格,每个格子中间有一个数字是2或者5,现在从方格的左上角走到右下角,每次 ...
- [技术分享] .NET下 , 上传图片的处理方式 , 贴上代码 .
如题 , 直接上单代码 , AC代码 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" ...
- 聚类算法之BIRCH(Java实现)转载
http://www.cnblogs.com/zhangchaoyang/articles/2200800.html http://blog.csdn.net/qll125596718/article ...
- linux 互信不生效
版权声明:本文为博主原创文章,未经博主允许不得转载. 1. 操作系统版本 1)操作系统 cat /etc/issue cat /etc/issue CentOS release 6.6 (Final ...