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. MVC 使用entity framework 访问数据库 发布IIS

    1.  SQL SERVER 数据库内容 2. MVC工程 3. EF 参考 工程架构: 对应实体类: public class MvcUser { public int Id { get; set; ...

  2. 深入SpringBoot:自定义Endpoint

    前言 上一篇文章介绍了SpringBoot的PropertySourceLoader,自定义了Json格式的配置文件加载.这里再介绍下EndPoint,并通过自定EndPoint来介绍实现原理. En ...

  3. windows环境同时连多个openvpn配置

    根据同事的经验分享:   环境: os:windows7 vpn: openvpn5   1. 进入"设备管理器" 2. 选择"操作" —> " ...

  4. 关于thenao.scan() fn函数参数的说明

    theano.scan()原型: theano.scan( fn, sequences=None, outputs_info=None, non_sequences=None, n_steps=Non ...

  5. VS 创建虚拟目录失败,映射到其他文件夹!

    今天,改一哥们项目!立马,问了一下原因.支支吾吾的气死LZ! 算了,就不信自己琢磨不出来!哼 找了半天,坑爹的是在Web.csproj文件中! 用txt打开,发现这个东东! <UseIIS> ...

  6. python学习笔记系列----(二)控制流

    实际开始看这一章节的时候,觉得都不想看了,因为每种语言都会有控制流,感觉好像我不看就会了似的.快速预览的时候,发现了原来还包含了对函数定义的一些描述,重点讲了3种函数形参的定义方法,章节的最后讲述了P ...

  7. jqueryui引用出错(base is not a constructor,widget no found)

    出错的原因,主要是引用顺序出错. 正确顺序如下: query本身必须放在第一位: <script src="../../../Scripts/Jquery1.7.2/jquery-1. ...

  8. 设置irb和ri

    设置irb和ri 输入ruby -v查看是否能够显示ruby版本 现在可以 配置irb了. irb是交互式Ruby 的命令行工具,即输入一句就立即执行并给出结果. 默认的irb不够强大,现在给它配置一 ...

  9. 十三、Java基础---------多线程总结

    多线程概述 理解多线程首先应明确线程,要了解线程就必须了解什么是进程. 1.进程 是一个正在执行的程序. 每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 2.线程 就是进程 ...

  10. JavaBean-DAO模式

    一.信息系统的开发架构   客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/S ...