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工作原理

JSP的本质是Java Servlet,它通过Tomcat JSP引擎将 JSP  翻译为相应的Servlet,并通过service方法来接受和响应客户请求。

示例:tomcat容器自带的index.jsp 对应的servlet

  • 默认生成Servlet,并将JSP的内容自动填充到_jspService方法中

    • Java代码直接填充到方法中
    • HTML模版通过out.write("HTML 模版  /n") 填充到方法中,形成输出流
  • JSP引擎还自动的在_jspService方法里面生成其他对象的引用并对他们初始化,这些对象结合起来称为JSP的默认9大隐式对象,在JSP页面可以直接通过对象名进行引用.

JSP九大隐式对象

常用JSP对象

内置对象

说明

request

HttpRequest

封装所有的请求信息,有以下几种做法:

Ø  获取请求参数: request.getParameter(paraName);

Ø  保存属性到请求域:request.setAttribute(String attrName,Object property);

Ø  获取请求域中的属性:request.getAttribute(attrName),此时返回的类型是object,要在界面上显示,需要做一个类型转换

Ø  获取cookies: request.getCookies();

Ø  解决request中文编码乱码的问题

session

Session

会话请求域

Ø  获取session对象:Session s=request.getSession(); 在JSP中不用实例化session,可以直接调用session对象的各种方法。

Ø  向session域添加内容:s.addAttribute(String, Object);

Ø  从session域取内容:s.getAttribute(attrName), 返回的也是object对象,通常转化为string对象在页面显示。

Ø  从session域中移除属性:s.removeAttribute(attrName)

Ø  使得session域过期:s.invalidate();

session的生命周期开始于request请求,当发起request请求以后服务器自动的创建或者获取关联的session, 当浏览器关闭,session对象会被销毁。 session在Tomcat服务器下的默认生命周期是30分钟,即使不关闭浏览器,超过了session的时长,session也会被销毁。可以在web.xml中配置session的超时时间。除了以上两种方式,也可以认为的通过session.invalidate方法把session置为无效。

Ø  session.getLastAccessTime();获取最后一次session的获取时间

Ø  session.getMaxInactiveInterval(); 返回session的最大间隔

Ø  session.setMaxInactiveInterval();设置session的最大间隔(即超时时间)

application

ServletContext

保存全局信息,在Web应用启动时创建,在Web应用销毁时销毁。

Ø  访问应用程序的初始化属性:application.getInitialParameter(String name)

Ø  管理应用程序的环境属性:application.setAttribute(s.object); application.getAttribute(s);

response

HttpResponse

封装http响应,向页面输出结果,指定各种输出的响应。

Ø  重定向: response.sendRedirect(url);

Ø  禁止缓存:(对于安全性和实时性要求较高的页面,可以禁止缓存)response.setDateHeader(“Expires”,0); response.setHeader(‘Cache-Control’’,’no-store’);

Ø  定时刷新:response.setHeader(‘refersh’,’10’);

Ø  定时跳转:response.setHeader(‘referesh’,’10;URL=login.jsp’);

Ø  输出非文本内容(下载文件):response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(filename,"UTF-8"));

Ø  输出非文本内容(图片):  response.setContentType("image/jpeg");

Ø  设置缓冲区大小:response.setBufferSize(32);

out

OutputWriter

OutputStream

out主要用于输出和管理缓冲流

Ø  out.println(string), out.print(string)

Ø  缓冲:out.clear(), out.clearBuffer(),out.flush();

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;}

 

非常用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脚本

  1. <%       %>   JSP脚本片段,即Java代码块( Java代码直译)
  2. <%!     %>   JSP申明
  3. <%=     %>   JSP表达式(直接翻译成out.print)
  4. <%--    --%>  JSP 注释,此注释不在浏览器展示

JSP脚本片段

用于在JSP中编写和运行多行代码, 这些代码被“翻译到” service方法中,因此不能嵌套方法
  • <%  %> 只能出现严格遵循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页面顶部,重点包括以下几项:

  • language=“java”, 编程语言是java
  • contentType="text/html; charset=UTF-8”, 输出给浏览器的字符编码
  • pageEnconding=“UTF-8”, JSP 页面的编码
  • import=“”,引入的Java包,JSP默认引入的Java包只有java.lang和javax.servlet.*,其余的包需要在JSP页面中用到,则需要在page指令中导入, 否则都编译不过。
  • session="true/false", 是否自动获取session。即使这里设置为false,仍然可以通过request.getSession()获取session对象
  • buffer=“none/kbSize”,
  • isThreadSafe="true/false"
  • autoFlush="true/false"
  • errorPage="relative_url", 定位页面失败后的自动跳转页面,避免抛500带来的差用户体验。

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基础概念的更多相关文章

  1. 重拾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映射到 ...

  2. java web构建学习(概念基础)

    1.什么是Java Web Application 一个Java web应用程序生成交互式web页面包含各种类型的标记语言(HTML.XML等)和动态内容.它通常由web组件例如JavaServer ...

  3. java web filter 之一 基础实现

    本文主要对filter的基本使用进行了讲解,其中涉及到了 filter是什么 一个filter处理一个jsp 多个filter处理一个jsp filter是什么 Filter 是java下的一种过滤器 ...

  4. java攻城师之路--复习java web之jsp入门_El表达式_JSTL标签库

    JSP 技术掌握:JSP语法 + EL + JSTL 为什么sun推出 JSP技术 ? Servlet 生成网页比较复杂,本身不支持HTML语法,html代码需要通过response输出流输出,JSP ...

  5. 初学Java Web(6)——JSP学习总结

    为什么要学习 JSP Servlet 的短板: Servlet 的出现,是为了解决动态输出网页的问题. 虽然这样做目的能达到,但是存在一些缺陷: 在 Servlet 输出网页片段非常恶心 (可读性差, ...

  6. Java Web之JSP

    什么是JSP? JSP就是一个可以写Java代码的HTML页面 JSP是什么? JSP是Servlet,JSP的本质就是Servlet Tomcat的web.xml文件下有这样几段代码: 看到下面的通 ...

  7. 复习java web之jsp入门_El表达式_JSTL标签库

    JSP 技术掌握:JSP语法 + EL + JSTL 为什么sun推出 JSP技术 ? Servlet 生成网页比较复杂,本身不支持HTML语法,html代码需要通过response输出流输出,JSP ...

  8. JavaWeb基础-Jsp基础语法

    jsp基础语法 JSP的组成 静态内容.指令.表达式.小脚本.声明.注释 JSP的生命周期 用户发出index.jsp ,服务端判断是否是第一次请求,若是第一次请求,则tomcat中的JSP引擎中的文 ...

  9. Java Web之JSP技术

    JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比htm ...

  10. Java Web(五) JSP详解(四大作用域九大内置对象等)

    前面讲解了Servlet,了解了Servlet的继承结构,生命周期等,并且在其中的ServletConfig和ServletContext对象有了一些比较详细的了解,但是我们会发现在Servlet中编 ...

随机推荐

  1. 12月07日《奥威Power-BI智能分析报告制作方法 》腾讯课堂开课啦

            前几天跟我一个做报表的哥们聊天,听着他一茬一茬地诉苦:“每天做报表做到想吐,老板看报表时还是不给一个好脸色.”我也只能搬出那一套“过程大于结果”的内心疗程赠与他,没想到他反而怒了:“做 ...

  2. mongodb配置

    Mongodb1. 安装2. CRUD3. 索引4. 副本及(replica sets)5. 分片(sharding) nosql 简单数据模型 元数据和应用数据分离 弱一致性 优势: 避免不必要的复 ...

  3. 用jQuery实现限制输入字数的文本框

    1.导入外部.js文件: <script src="js/jquery-1.8.3.js" type="text/javascript"></ ...

  4. 解决SQLSERVER在还原数据时出现的“FILESTREAM功能被禁用”问题

    解决SQLSERVER在还原数据时出现的“FILESTREAM功能被禁用”问题 今天由于测试需要,在网上下载了Adventureworks2008实例数据库的BAK文件,进行还原时出现了这样的错误“F ...

  5. JAVA的网络编程

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

  6. 解决连接VPN后无法上网问题

    解决连接VPN后无法上网问题 VPN的英文全称是“Virtual Private Network”,翻译过来就是“虚拟专用网络”.顾名思义,虚拟专用网络可以把它理解成是虚拟出来的企业内部专线. 在公司 ...

  7. 关于ClassLoader的一点小问题

    今天在看某框架的源码的时候,遇到一个使用URLClassLoader加载Servlet类的问题,当自己在eclipse里面做试验的时候,始终无法把Class加载成功.比如: ClassLoader c ...

  8. [已解决] java.net.InetAddress.getHostName() 阻塞问题

    在学习java nio的过程中发现某些情况下使用该方法会导致程序阻塞,(情况:服务器,Linux:客户端,WIN10) java.net.InetAddress.getHostName() 阻塞情况如 ...

  9. Java 基础知识 练习题

    利用文本编辑器输入课堂上练习的Hello.java,并在JDK环境下编译和运行.请将程序编译.运行的结果截图.

  10. 关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法

    在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法: 1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中2. 建立数据库间的 ...